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

推薦する

#特別オファー# servarica: カナダの大型ハードドライブ VPS、年間 29 ドル、1G メモリ/1 コア/1T ハードドライブ/無制限トラフィック

servarica(カナダの会社、2010年~)は数日前にブラックフライデー\サイバーマンデースーパ...

企業サイトのSEO最適化とプロモーションの効率を短期間で向上させる方法

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

短編動画の戦いでは、Xigua VideoとiQiyiのどちらが優れているでしょうか?

2019年10月20日、西瓜動画の任立峰社長は、今後1年間で西瓜動画が動画クリエイターに少なくとも2...

openvirtuals-5周年/50%オフ/5つのコンピュータルーム/OpenVZ+大容量ハードディスク

OpenVirtuals.com は 5 年間運営されています。最後の VPS プロモーションは昨年...

ブランドマーケティングとプロモーション丨デュレックスの母の日ポスターの何が問題なのでしょうか?

デュレックスとヘイティーのポスターコピーライティングの失敗以来、業界と読者はデュレックスに対して否定...

OpenStack は Ceph ストレージを使用します。 Ceph は何をしますか?

1 背景1.1 Ceph の紹介Ceph は、高いスケーラビリティ、高いパフォーマンス、高い信頼性の...

WordPress の見落とされがちな SEO のヒントをご存知ですか?

多くの場合、Web サイトを構築するときは、Web サイト自体が完全に構築される前に、いわゆる SE...

絶体絶命の窮地に追い込まれたウェブマスターは事態を好転させることができるのか?

記事を最新の状態に保つために、まだ編集に忙しいですか? それとも、品質を確保するために、まだリンクを...

Amazon Web Services: ジョブゼロセキュリティの実践と 5 層保護システムの構築

企業がクラウドへの移行を加速するにつれて、クラウド上のデータの種類と量は増加し続けています。同時に、...

クラウド内のコンテナ用の永続ストレージの設定

コンテナの永続ストレージは、クラウドでワークロードを実行するユーザーを含むエンタープライズ ユーザー...

ftech: 月額 20 ドル、ベトナム VPS、1Gbps 帯域幅、無制限トラフィック、4G メモリ/2 コア/25g SSD、Windows/Linux

ftechはベトナム企業で、2009年に設立され、2009年から運営されています。主な事業は、仮想ホ...

電子商取引代理店の運営は沈黙のスパイラルに陥り、リーダーは控えめな態度を取る

電子商取引代理店業界は沈黙のスパイラルに陥りつつある。従来の企業が電子商取引の業務に慣れてきたため、...

virpus: 全アイテムが 60% オフ、Xen/Windows、512M シアトル VPS が年間 20 ドルから

virpus は新しい特別プロモーションを実施しており、すべての Xen PV および Xen HV...

hotiis: 米国のクラウドサーバー、cn2+cuvipハイブリッドネットワーク、月額15元から、10G防御無料

Hotnet Internetの国慶節プロモーションが始まりました。米国ロサンゼルス地域のクラウドサ...