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分散リンクトレーシングについての簡単な説明

推薦する

Maxthon Hosting香港荃湾VPSレビュー、Maxthon Hostingがいかに優れているかを説明します

Aoyou Hostはどうですか? Zhujimao.com は香港の荃湾データセンターで Aoyo...

マルチクラウド、ベアメタル、エッジクラウドなど: 2020 年以降のクラウド コンピューティング市場における主な検討事項

調査によると、今後 12 か月以内に、企業のワークロードの 83% がクラウドで実行されるようになり...

長期的なSEO戦略: コンテンツに戻る

2月1日、百度は2013年中国ウェブサイト発展動向レポートを発表し、中国の現在のウェブサイト生態環境...

事例分析:キーワード検索時にウェブサイトの説明が表示されない理由

みなさんこんにちは。私は湖南省出身のキネスです。今日、私はSouwaiフォーラムでウェブマスターから...

domaincom - ドメインは年間 7 ドルから /com/net/org/biz/info/us

domain.com、mydomain.com、doster.com がドメイン名のプロモーションを...

Baidu のランキングに手動による介入が必要なのはなぜですか?

Baidu のランキングに人為的な干渉はあるのか? 多くのウェブマスターがこの疑問について議論したと...

オリジナルのSEO記事を書くには?なぜ一部のウェブサイトは疑似オリジナル記事を書かないのか

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますオリジナル...

Racknerd: 新しい2K20プロモーションVPSの簡単なレビュー。RacknerdのVPSがどのようなものか大まかに説明します。

2 月 20 日、racknerd はコード名「2K20」の 3 つの安価な VPS モデルをリリー...

ハイパースケールクラウドに別れを告げよう、次はもっと良いものになるだろう

ハイパースケールクラウドは高すぎるので、「代替クラウド」について学びましょう代替クラウドとは、「ハイ...

ウェブサイトのページコンテンツの類似性が高い理由と解決策

一般的に、ウェブサイト構築時に重複コンテンツを避けることは困難ですが、重複コンテンツは検索エンジンに...

virmach: 米国の VPS は年間 6.3 ドルから、オプションのデータ センターは 10 か所、Alipay/PayPal での支払いが可能

これは、virmach の今年最後の格安 VPS になるかもしれません。最低価格は年間 6.3 ドル...

DPU市場は活況を呈しています。将来的には少数の大企業が市場を独占することになるのでしょうか?

これを DPU (データ処理ユニット) と呼ぶ人もいれば、IPU (インフラストラクチャ処理ユニット...

マシュー効果が現れ始める IDC 2019 政府クラウド サービス プロバイダー市場レポートがリリースされました

最近、有名な分析機関IDCが2019年中国政府クラウドサーバーオペレーター市場シェアレポートを発表し...

ウェブサイトのランキングが下がったらどうすればいい?内部分析

最近、私が運営している心理カウンセリングサイトの順位が下がっています。一週間ほど経ちますが、ざっと観...