Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
eBPF Tools on Kubernetes part1
Search
ry
August 04, 2024
Technology
380
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
eBPF Tools on Kubernetes part1
ry
August 04, 2024
More Decks by ry
See All by ry
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
380
Kubernetesにおける推論基盤
ry
3
1k
Vault Secrets Operator Tutorial
ry
0
630
KyvernoとRed Hat ACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
1.3k
明日から始められるKyvernoを用いたポリシー制御
ry
4
980
CNDT2022 k8snovice Community introduction
ry
0
190
Policy Engine on Kubernetes
ry
1
1.5k
ConfigMap and Secret
ry
0
440
Policy Manager試してみた!
ry
0
470
Other Decks in Technology
See All in Technology
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
460
AI時代の強いチームの作り方
yuukiyo
23
15k
ガバメントクラウドでのランサムウェア対策
techniczna
1
750
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
820
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
210
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
180
AI エージェント時代のデジタルアイデンティティ
fujie
3
1.4k
AIQAのナレッジ構築について
qatonchan
1
160
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
280
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
330
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
440
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Side Projects
sachag
455
43k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Building Applications with DynamoDB
mza
96
7.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
How to build a perfect <img>
jonoalderson
1
5.8k
Transcript
eBPFツールを使ってみた! (Observability編 Part 1) Kubernetes Novice Tokyo #33
参考 eBPF Applications Landscape
今回用いるサンプルアプリケーション # kubectl apply -f https://raw.githubusercontent.com/keyval-dev/microservices-demo/master/release/kubernetes-manifests.yaml # kubectl get pods
-n default NAME READY STATUS RESTARTS AGE adservice-64d674d84-kgjp5 1/1 Running 0 2m51s cartservice-68c568b947-ks85d 1/1 Running 2 (2m30s ago) 2m51s checkoutservice-74f77477d4-nlf62 1/1 Running 0 2m51s currencyservice-cd84b68-vbx9z 1/1 Running 0 2m51s emailservice-88fd5969b-m7757 1/1 Running 0 2m51s frontend-5f5f58ff9f-bmrgh 1/1 Running 0 2m51s loadgenerator-5c46bcfb7d-npjgr 1/1 Running 0 2m49s paymentservice-7d58f78948-5qkgr 1/1 Running 0 2m51s productcatalogservice-6c447cb789-cbgrw 1/1 Running 0 2m50s recommendationservice-7fb98d9d5b-jc8t5 1/1 Running 0 2m50s redis-cart-548dfd74d-w2fdt 1/1 Running 0 2m50s shippingservice-6cf97c9854-tpwr8 1/1 Running 0 2m50s
None
検証用監視基盤 以下のように、Grafana, Prometheus, Grafana Loki, Grafana Tempoを作成しておく。 デプロイ簡略化のため 以下のHelm Chartを利用しますが、とても古いものなので商用環境などでは使わないでください。
https://github.com/odigos-io/charts/tree/master # kubectl get pods -n observability NAME READY STATUS RESTARTS AGE observability-grafana-7c68bb5d56-cdlz9 1/1 Running 0 5m52s observability-loki-0 1/1 Running 0 15m observability-prometheus-server-7847cd6968-2wt9t 2/2 Running 0 15m observability-tempo-0 2/2 Running 0 15m
Odigos
Odigosとは https://github.com/odigos-io/odigos eBPFを用いてアプリケーションから分散トレーシング情報を取得するためのツール。 (Java, Python, .NET, Node.js, and Go) インタプリタ言語の場合、
OpenTelemetryによる自動計装を実行。 コンパイル言語の場合、 eBPFによる自動計装を実行。 取得したデータをOpenTelemetry形式で様々なオブザーバビリティツールに対して送ることができる。
アーキテクチャ アプリケーションの言語に応じて自動計装を実行する
アーキテクチャ Odigos Collectorのデプロイと構成を担当
アーキテクチャ Instrumentorによって検出されたアプリケーションを、 Autoscalerによって作成された Collectorに割り当てる
アーキテクチャ データ取得対象や送信先の決定などを行う
インストール方法 以下二つの方法が用意されている。 • Odigos CLI • Helm 以下のようなリソースが稼働する。 # kubectl
get pods -n odigos-system NAME READY STATUS RESTARTS AGE odiglet-8fbbs 1/1 Running 0 6h31m odiglet-dnd5l 1/1 Running 0 6h31m odiglet-h2t82 1/1 Running 0 6h31m odigos-autoscaler-84b99b8647-628c5 1/1 Running 0 6h31m odigos-data-collection-n5fkt 1/1 Running 0 18m odigos-data-collection-vqqbz 1/1 Running 0 18m odigos-data-collection-xzd5c 1/1 Running 0 18m odigos-gateway-6c95bc95bb-gh47b 1/1 Running 0 24m odigos-instrumentor-7bd64ffb68-rttcs 1/1 Running 0 6h31m odigos-scheduler-5d89b686c-hbcc5 1/1 Running 0 6h31m odigos-ui-7b78f6d454-kqnz7 1/1 Running 0 6h31m
セットアップ odigos uiコマンドを用いてUIに接続し、自動計装対象とテレメトリーデータの送信先を設定する。
セットアップ セットアップが完了すると、以下の様になる。
Grafanaでの可視化 (Service Graph) サンプルアプリケーションにアクセスし何かしらのアクションを起こすと、以下の様に通信をグラフ化して表示することができる。
Tracing -> Metrics ノードをクリックすることで様々な情報にアクセスすることが可能。
Tracing -> Metrics -> Tracing Request histgramでは、リクエストがあった所からのトレーシング情報への導線にアクセスすることができます。
Tracing -> Metrics -> Tracing 「Query with Tempo」をクリックすることで、 TraceQLを打った画面が表示される。
Tetragon
Tetragonとは CilliumやHubbleなどを開発しているIsovalentによって管理されている OSS。 eBPFを用いて、アプリケーションに変更を加えることなく様々な制御をおこなったり、情報を取得することができるようになっている。
インストール Helmを用いて容易にインストールが可能。 $ helm repo add cilium https://helm.cilium.io "cilium" has
been added to your repositories $ helm install tetragon ${EXTRA_HELM_FLAGS[@]} cilium/tetragon -n tetragon --create-namespace NAME: tetragon LAST DEPLOYED: Mon Jul 29 19:09:06 2024 NAMESPACE: tetragon STATUS: deployed REVISION: 1 TEST SUITE: None
Tetragonによる情報の取得 大きく分けると以下の 2つに分けて、情報の取得ができる。 • Event • TracingPolicy
Event Tetragonでは、デフォルトでPod内においてシステムコールが呼ばれた際の情報を Json形式でログに出力してくれる。 (gRPC エンドポイントを公開可能 ) テスト用Pod # kubectl exec
-it checkoutservice-76f9457cff-vwqt8 -n sample-app -- sh / # touch test Tetragon $ kubectl logs tetragon-gxfkt -c export-stdout --tail 1 | jq .
Tracing Policy カーネル内の任意のイベントをトレースし、指定した条件にマッチした場合に実行するアクションを定義することができます。 • Hook Point: eBPFをトリガーするための起点となるもの ◦ Kprobes ◦
Tracepoints ◦ Uprobes • Selector: TracingPolicyによる制御の対象を絞るためのもの ◦ Arguments ◦ PID ◦ Binary ◦ Namespace (Linux機能としてのNamespace) ◦ etc…
TracingPolicy 以下の様なTracingPolicyを用いることで、どこからどこに対して通信がされているかを確認することができる。
まとめ アプリケーション側で何かしらの対応をすることなく、 eBPFを用いて情報を取得できるようになってきている。 今後はMetrics, Logs, Tracesなどでは不十分だった情報の取得や、 Pod 内のプロセスレベルでのイベント監視といったことが容易にできる世界に なっていくのかなと楽しみで仕方ない。
お願い 今回のようなやってみた系の発信は、まだ使ったことがない方にとって使い始めようとする際のハードルを下げてくれます。 ぜひ、「こんなことをやってみた」や「 Kubernetesのこんなことを調べてみた」といったご登壇をお待ちしております! そして、リレー参加者募集 !! 「eBPFツール使ってみた! (Observability編 Part2)」を話していただけますと嬉しいです! -
Grafana Beyla - Pyroscope - Kepler - KubeScoop - etc…
Thank you