eBPF プログラムを使用して Kubernetes を監視する方法を学習しましたか?

eBPF プログラムを使用して Kubernetes を監視する方法を学習しましたか?

Kubernetes クラスターを監視することは、コンテナ化されたアプリケーションの健全性、パフォーマンス、信頼性を確保するために重要です。 Kubernetes は強力な監視ツールと統合スイートを提供しますが、カーネルお​​よびネットワーク レベルの複雑な部分を詳しく調べる必要がある場合は、eBPF (Extended Berkeley Packet Filter) が非常に貴重なリソースになります。この記事では、eBPF の優れた機能と、それを活用して Kubernetes 監視戦略を改善する方法について説明します。

eBPF 機能を使用して Kubernetes モニタリングを操作する方法からの翻訳。著者: Dev Genius。

Kubernetes のコンテキストでは、eBPF は、コンテナ ネットワークの監視 (CNI プラグイン)、eBPF ベースのネットワーク ポリシーによるセキュリティの適用、詳細なパフォーマンス分析の実行などのタスクで重要な役割を果たします。 eBPF のパワーを深く理解することで、Kubernetes クラスターに関する比類のない洞察が得られ、問題のトラブルシューティング、パフォーマンスの最適化、インフラストラクチャの微調整による最高の効率化が可能になります。

eBPF は、Linux カーネルのソース コードを変更することなく、カスタム コードを Linux カーネルに動的に挿入できる強力なテクノロジーです。これらのコードは、eBPF Kubernetes のコンテキストでのネットワーク分析、トレース、可観測性など、さまざまな目的に使用できます。

写真

Kubernetes は、コンテナ ネットワーク監視 (CNI プラグイン)、セキュリティ (eBPF ベースのネットワーク ポリシーなど)、パフォーマンス分析などのさまざまなタスクに eBPF を活用します。

eBPF を使用した Kubernetes の環境設定と監視

eBPF ベースの Kubernetes モニタリングに進む前に、まず環境を設定しましょう。次の前提条件を満たしていることを確認してください。

  • 実行中のKubernetesクラスター
  • kubectlコマンドラインツールをインストールしました
  • Docker またはその他のコンテナランタイム
  • Linux ベースのシステム (eBPF ツール用)

必要なツールをインストールする

まず、システムに eBPF 関連のツールをインストールする必要があります。これらのツールは、カーネルレベルのイベントを分析および追跡するのに役立ちます。

 # Install BPF Compiler Collection (BCC) sudo apt-get install bpfcc-tools # Install BPFTrace sudo apt-get install bpfcc-tools

ポッドのネットワークトラフィックを観察する

eBPF は、Pod 間のネットワーク トラフィックに関する詳細な情報を提供できます。特定の 2 つの Pod 間のネットワーク トラフィックをトレースする簡単な eBPF プログラムを作成しましょう。

 #include <linux/bpf.h> #include <linux/if_ether.h> #include <linux/ip.h> BPF_TABLE("hash", u64, u64, packet_count, 256); int count_packets(struct __sk_buff *skb) { u64 *value; u64 key = 0; struct ethhdr *eth = bpf_hdr_pointer(skb); struct iphdr *ip = (struct iphdr *)(eth + 1); if (ip->protocol == IPPROTO_TCP) { key = ip->saddr; value = packet_count.lookup_or_init(&key, &key); (*value)++; } return 0; }

このコードをファイル(例:packet_count.c)に保存します。 clang でコンパイルし、bpftool でカーネルにロードできます。

 clang -O2 -target bpf -c packet_count.c -o packet_count.o bpftool prog load packet_count.o /sys/fs/bpf/packet_count

これで、コンテナ ID を使用して、この eBPF プログラムを特定のポッドのネットワーク インターフェースに接続できるようになりました。

 # Get the container ID of a pod kubectl get pods -n <namespace> <pod-name> -o jsnotallow='{.status.containerID}' # Attach the eBPF program to the container's network interface bpftool net attach container <container-id> /sys/fs/bpf/packet_count

その後、指定したポッドのパケット数を監視できます。

BPFTrace を使用した動的トレース

BPFTrace は柔軟な動的トレース ツールです。特定のポッドによって行われたシステム コールを監視するための簡単な BPFTrace スクリプトを作成しましょう。

 tracepoint:syscalls:sys_enter_* { if (str(args->comm) == "<pod-name>") { printf("%s called %s()\n", args->comm, probefunc); } }

<pod-name> を、監視するポッドの名前に置き換えます。このスクリプトを syscall_trace.bt などのファイルに保存し、BPFTrace を使用して実行します。

 bpftrace syscall_trace.bt

このスクリプトは、指定されたポッドによって行われたシステムコールをリアルタイムで表示します。

Kubernetes リソースの使用状況を分析する

eBPF は、Kubernetes ポッドとコンテナのリソース使用状況を把握するのにも役立ちます。特定のポッドの CPU とメモリの使用量を追跡する eBPF プログラムを作成しましょう。

 #include <linux/bpf.h> #include <linux/perf_event.h> #include <linux/sched.h> BPF_HASH(pod_cpu, u64, u64); BPF_HASH(pod_memory, u64, u64); TRACEPOINT_PROBE(sched, sched_process_exit) { u64 pid = bpf_get_current_pid_tgid(); u64 cpu_usage = bpf_perf_counter_value(pod_cpu, &pid); u64 memory_usage = bpf_perf_counter_value(pod_memory, &pid); printf(“Pod PID %lld — CPU Usage: %lld ns, Memory Usage: %lld bytes\n”, pid, cpu_usage, memory_usage); }

この eBPF プログラムを前と同じようにコンパイルし、カーネルにロードします。次に、特定のポッドのプロセスにアタッチします。

 # Get the PID of a pod's main process kubectl exec -it -n <namespace> <pod-name> — pidof <process-name> # Attach the eBPF program to the pod's process bpftool proc attach -p <pid> /sys/fs/bpf/pod_cpu bpftool proc attach -p <pid> /sys/fs/bpf/pod_memory

指定したポッドの CPU とメモリの使用状況をリアルタイムで監視できるようになりました。

結論は

Kubernetes モニタリングで eBPF 機能を活用すると、カーネルレベルのイベント、ネットワーク トラフィック、リソースの使用状況に関する洞察が得られます。カスタム eBPF プログラムを作成し、BPFTrace などのツールを使用することで、クラスターの動作をより深く理解し、問題をトラブルシューティングし、パフォーマンスを最適化し、リソース使用率を分析できるようになります。

eBPF は強力ですが低レベルのツールであるため、注意して使用し、本番環境でカスタム eBPF プログラムを実行するときは常にセキュリティ上の影響を考慮してください。 eBPF エコシステムをさらに詳しく調べて、Kubernetes の監視と観測の実践を改善するための方法をさらに見つけてください。

<<:  クラウド アプリケーション管理の未来: 分散クラウド環境

>>:  Go分散リンクトレーシングについての簡単な説明

推薦する

競争の激しい医療業界で生き残る方法

ここ数ヶ月、民間病院が患者から金銭をだまし取っているというニュースが頻繁に報道されていることに気づい...

モバイル検索の最適化、今参入しなければ、排除されてしまいます!

CNNICの報告によると、2013年12月までに、わが国のモバイルインターネットユーザー数は5億人に...

知乎を振り返る:知識英雄をどう運用するか?

はじめに:コミュニティの焦点は何であるべきか?Zhihuメディアチームの強みは、情報収集、知識管理、...

段階別のウェブサイトの注意点とプロモーション戦略

現在、ウェブサイトのプロモーションには多くのチャネルがありますが、ウェブサイトのプロモーションはます...

Douban FM: 「気取った」ユーザーに課金することで無料ユーザーから広告料を稼ぐ

Douban FMの有料版が最近リリースされ、月額10元で、ユーザー課金モデルの模索が正式に始まった...

インターネット マーケティングその他: 今は SEO と PPC のどちらに重点を置くべきでしょうか?

今年 6 月に百度がアルゴリズムの災難に見舞われて以来、SEO 業界を去ることを選択する SEO 担...

本から得られる知識はいつも浅い:2つのセッションの提案と提言から見たコンテンツマーケティング

今年も「両会」がやってきた。私は、多くの全国人民代表大会の代表と政治協商会議の委員が、文化レベルを問...

crowncloud - $30/年/KVM/512m メモリ/20G ハードディスク/1T トラフィック/ドイツ

crowncloud.net(運用開始)は、ドイツのフランクフルトデータセンターに新しいhenを導入...

医療ウェブサイトのプロモーションにおける問題点の詳細なまとめ

まず、医療ウェブサイトを宣伝する際に理解しておくべき最も重要なことは、何を宣伝すべきかということです...

シーメンス中国とアマゾン ウェブ サービスが、製造業における生成型 AI の革新的なアプリケーションの実装を加速するための戦略的協力契約を締結

シーメンス中国とアマゾン ウェブ サービスの上級幹部がシーメンス中国の北京本社で会談し、 「共同イノ...

ウェブマスターネットワークからの日報: トップレベルドメインの拡張とモバイル検索マーケティングが詐欺に遭う

1. トップレベルドメインが拡大するにつれて、通常のドメインはますます安価になるかつて100万元だっ...

racknerd: ロサンゼルスの DC2 データセンターに VPS が再入荷、最低 9 ドル/年、Intel\AMD プラットフォームも利用可能

ロサンゼルス DC2 データセンターの Racknerd の VPS は、数か月間在庫切れでした。本...