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

推薦する

中国のクラウド運用市場は今年上半期に成長を達成

2020-12-23 09:35 市場調査会社IDCが発表した最新のレポートによると、2020年上半...

クラウドサービス市場は2033年までに4.4兆ドルを超える

中小企業におけるクラウドベースのソリューションに対する需要の高まりによりクラウド サービスの導入が促...

クラウドネイティブのセキュリティ状況はますます厳しくなってきています。 2020年グローバルクラウドセキュリティ脅威リストの解釈

近年、サイバー犯罪組織やハッカーによるクラウド サービスの悪用が増えていますが、これはクラウド サー...

2013 年に Baidu ホームページでウェブサイトを最適化する方法

前回の記事「2013年にウェブサイトをBaiduのホームページに掲載する方法 - オンサイト最適化」...

ブランド広告とマーケティングのための 5 つのヒント!

どのような広告が「良い広告」と見なされますか?デビッド・オグルビーはかつてこう言いました。「広告が売...

Baidu アルゴリズム更新 SEOVIP ランキング消失の推測

2012年、世界の終わりが近づき、新年を迎える準備をしていたとき、Baiduのアルゴリズムは依然とし...

Googleの新しい検索アルゴリズム「ペンギン」が「過度にSEO的な」サイトの排除を開始

グーグルは昨年2月、低品質の情報で溢れたさまざまな「コンテンツファーム」ウェブサイトを取り締まること...

ウェブサイトがネガティブSEOに遭遇した場合の対処法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスネガティブ SEO は、...

中国のバレンタインデーが近づいていますが、実店舗の花屋はどのようにしてこのお祭りのプロモーションを効果的に行うことができるのでしょうか?

明日は中国のバレンタインデーです。ここ数日、花屋は大忙しです。中国のバレンタインデーは花を売るのに最...

bpsnode - $15/年/128MB メモリ/5GB SSD/500GB トラフィック/G ポート

Bpsnode はワンマンのような感じがします。現在、openvz と KVM 仮想 VPS を提供...

AWS、NetEase Gamesの海外展開を支援

[51CTO.com からのオリジナル記事] ゲームといえば、NetEase Games について触...

スマートデバイスとエッジコンピューティングはどのように発展するのでしょうか?

エッジコンピューティングが増加しています。 AI とネットワークの進歩を組み合わせて、より強力なロー...

オンラインプロモーションはどのようにして企業の実際の売上を増加させるのでしょうか?

企業がオンラインでプロモーションを行う際、成果を追求することになりますが、その成果を具体的に測定する...

Discuz!社長チェン・リャン:マイクロコミュニティをうまく運営する鍵は、適切なポジショニングを見つけることです

成都ビジネスデイリーのマイクロコミュニティ「紅星制作チーム」は、立ち上げ以来、数万回の訪問と多くのア...

クラウドネイティブストレージツールの選択と適用に関する議論

1.クラウドネイティブストレージの概念クラウド ネイティブ ストレージの概念は、クラウド ネイティブ...