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
390
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
390
Kubernetesにおける推論基盤
ry
3
1.1k
Vault Secrets Operator Tutorial
ry
0
630
KyvernoとRed Hat ACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
1.3k
明日から始められるKyvernoを用いたポリシー制御
ry
4
990
CNDT2022 k8snovice Community introduction
ry
0
200
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
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.1k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
2
530
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
2
350
私がブラウザを自作したくなった理由
supurazako
1
270
AIに狂うスタートアップが、あえて「人との協働」に全振りした新卒エンジニア研修 / New Graduate Engineer Training at a Startup Accelerating AI Adoption
ohnoeight
0
160
Digitization部 紹介資料
sansan33
PRO
2
7.7k
AI時代に、人は何を、どう学ぶのか #pbl_pub / What and How Do We Learn in the AI Era?
takaking22
1
140
Sets in Go
ramalho
1
1.1k
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
110
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
5
730
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
260
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
The Pragmatic Product Professional
lauravandoore
37
7.4k
Become a Pro
speakerdeck
PRO
31
6.2k
Why Our Code Smells
bkeepers
PRO
340
58k
Building Adaptive Systems
keathley
44
3.2k
The Curse of the Amulet
leimatthew05
2
14k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
Joys of Absence: A Defence of Solitary Play
codingconduct
1
440
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The browser strikes back
jonoalderson
0
1.5k
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