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

推薦する

extravm: 月額 5 ドル、ハイエンド VPS、10Gbps 帯域幅 + ryzen9 3900x + NVMe、1G メモリ/1 コア/15G/5T トラフィック

extravm(~) のハードコア VPS をご紹介します。データ センターは米国マイアミにあり、1...

分散システムサービスの登録と検出の原理を徹底的に理解するための13枚の写真

[[349916]]この記事はWeChatの公開アカウント「笑い好きの建築家」から転載したものです。...

教育・研修ウェブサイトのキーワードデータ分析

検索エンジンで最も人気のある業界は、ヘルスケア、不動産、教育、B2C であり、最も多くの投資と検索が...

一度海を見たら、水に感動することはもうないだろう。Welo City と Kupeng.com のクーポン失敗

花は咲いて散り、雲は流れて散る。絶えず変化するインターネットの世界では、更新や置き換えは当たり前のこ...

白洋製薬とオラクルがクラウド協力を強化し、製薬業界に新たな活力を注入

[51CTO.comからのオリジナル記事] 近年、ビッグデータ、クラウドコンピューティング、人工知能...

NodeServ - $40/年/KVM/768M メモリ/35G ハードディスク/2T トラフィック/G ポート

NodeServ は、フロリダのデータ センターに年間料金を支払う VPS をいくつか導入しました。...

ウェブマスターネットワークの第19回SEOトレーニングコースの申し込み受付が始まりました

トレーニングの目的: 今日のインターネットの急速な発展により、大量の高品質のトラフィックをウェブサイ...

周紅一:無料は最高のマーケティング手法

今夜、当社のパートナーである AutoNavi は、これまで有料だった「AutoNavi」モバイル ...

浙江金華が「万家ショッピング」の調査に回答:電子商取引の変化

「万家ショッピング」ウェブサイトはねずみ講の疑いで閉鎖された。会長室は封鎖された6月11日、浙江易佳...

SEOにおけるウェブサイトのホーム画面デザインの5つの重要な側面に関する実用的な情報を共有します

ウェブサイトのユーザー エクスペリエンスは、アート、デザイン、プログラミング、戦略、フィードバックを...

OpenStack仮想マシンのメタデータを取得する方法

1. OpenStackメタデータサービスについてOpenStack 仮想マシンは、ネットワーク カ...

独創性≠高品質 初級 識字能力 上級

8月に百度は記事品質アルゴリズムを更新し、多くのウェブサイトからジャンクコンテンツを削除した。その結...

dedipath: 米国の VPS、年間 10 ドルから、帯域幅 1Gbps、トラフィック無制限、複数のデータセンターを利用可能

dedipath の VPS の最大の利点は、1Gbps の帯域幅、無制限のトラフィック、20Gbp...