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
ログから学ぶKubernetes
Search
GoogleCloudPlatformJapan
February 20, 2025
Business
740
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ログから学ぶKubernetes
GoogleCloudPlatformJapan
February 20, 2025
More Decks by GoogleCloudPlatformJapan
See All by GoogleCloudPlatformJapan
日本CTO協会 新卒合同研修_Google Cloud
googlecloudjapan
0
39
Jagu'e'r O11y分科会 0630 - kubectl logsのその先へ、実は使えるいろんなKubernetesログを追ってみよう
googlecloudjapan
0
88
Google Kubernetes Engine (GKE) の可観測性を活用し、 システムの Resiliency を高める障害原因調査
googlecloudjapan
0
110
「原因不明なナゾの障害」で終わらないための Kubernetes のログの徹底活用
googlecloudjapan
0
470
15 分で学ぶ Cloud Run のユースケースと代表的なアーキテクチャパターン
googlecloudjapan
3
840
Google Cloud の スペシャリストと学ぶ! BigQuery & Gemini
googlecloudjapan
0
280
GKE Enterprise 徹底解説
googlecloudjapan
2
1.4k
Cloud Run で作るサーバーレス アーキテクチャ 30 連発 - これのときはこう!
googlecloudjapan
33
12k
実践!サーバーレス RAG 構築:Firestore ベクトル検索と VertexAI LLM 活用
googlecloudjapan
2
3k
Other Decks in Business
See All in Business
Fable5との実践から生まれた非エンジニア組織のループエンジニアリング
nagatsu
0
700
川下り型キャリア感できのこってきた 35歳子育て世帯の葛藤
ikasumiwt
0
250
NOROSHI inc_COMPANY DECK
noroshi
0
1.8k
アイエンター採用デック.pdf
ienter
PRO
0
140
株式会社プロッセルテクノロジーズ会社紹介
tom1214
0
280
AIネイティブな組織を問い直す
smiyawaki0820
11
4.6k
新規事業立ち上げにPMMが果たすべき役割と責任 −スケールアップ企業における"プロダクトマーケティング"の可能性
yushimad
1
370
「この数字おかしくない?」対応に追われていたのに、 Claude Codeで設計改善まで着手できた話
matsumotokoki
0
170
28卒_新卒営業職 会社説明資料
divarecruiting
0
140
マルチプロダクト時代のPMM-Discoveryから0→1、Expansionまで フェーズで変わる期待役割とアサインの設計図
sasaguchi
0
320
開発が速く安くなった後の話 AI時代のソフトウェアエンジニアリング組織論 #devsumi
recruitengineers
PRO
20
9.7k
5年間コードを書かなかったVPoEが なぜ現場に戻ったのか?
gessy0129
1
270
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
63
55k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
For a Future-Friendly Web
brad_frost
183
10k
Transcript
ログから学ぶ Kubernetes ~ Deployment がコンテナを動かすまで ~ Kubernetes Novice Tokyo #36
セッション枠1 (と Kubernetes History Inspector の紹介)
自己紹介 Kakeru Ishii Google Cloud Technical Solutions Engineer Google Cloud
のサポート内のエンジニア Google Kubernetes Engine (GKE) / Google Distributed Cloud (GDC) 等を中心としたトラブ ルシューティングを主にやっています。 今日の話で後ほど出てくる OSS ログビューア Kubernetes History Inspectorの作者 (GoogleCloudPlatform/khi on GitHub)
Kubernetes 利用者が一番最初に学ぶ事と言えば ...? $ kubectl apply -f my-deployment.yaml 1. ユーザが
Deployment を作る 2. ReplicaSet ができる 3. Pod ができる Deployments | Kubernetes公式ドキュメント より引用 (CC-BY)
実際に起こっていることはもう少し複雑 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml Deployments | Kubernetes公式ドキュメント より引用 (CC-BY)
この振る舞いをログで観察する 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml ログからこれらを観察したい ! • 始めの操作とリソースの結果のみではなく 過程がよく理解でき、トラブル解決に強くなる • 問題が起きた後自動的に解決してしまっても調査することが できて再発防止に努められる • 上手く行っていた時と何故か動作しない時を比べて調査す ることができる • 自分が詳しくないアプリケーションでも Kubernetesの振る 舞いの観点で調査ができる、クラスタ上で動作するアプリ ケーションに依存しない汎用性の高い知識
この振る舞いをログで観察する 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml
この振る舞いをログで観察する 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml Kubernetes では全てのリソースへの操作が kube-apiserver を介して行われる ▶ これら操作は kube-apiserver の Audit 機能で 監査ログとして記録される
この振る舞いをログで観察する 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml Kubernetes では全てのリソースへの操作が kube-apiserver を介して行われる ▶ これら操作は kube-apiserver の Audit 機能で 監査ログとして記録される Kubernetes では様々なリソースの更新を 各種コントローラが監視し、変更に応じてリソースを操作する ▶ これら操作はコントローラの ログとして出力される
この振る舞いをログで観察する 1. ユーザが Deployment を作る 2. ReplicaSet ができる 3. Pod
ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録 $ kubectl apply -f my-deployment.yaml Kubernetes では全てのリソースへの操作が kube-apiserver を介して行われる ▶ これら操作は kube-apiserver の Audit 機能で 監査ログとして記録される Kubernetes では様々なリソースの更新を 各種コントローラが監視し、変更に応じてリソースを操作する ▶ これら操作はコントローラの ログとして出力される ノード上の要素もそれぞれノード上で Pod が示された状態 で稼働するように監視し続け、必要に応じて実際のコンテナ を操作する ▶ これら操作はノード上にそれぞれの要素から ログとして出力される ( journald など)
Google Kubernetes Engine (GKE)でこれらログを観察してみる GKE ではこれらは全て Cloud Logging 上に連携される (一部ログは環境により手動で有効にする必要があります
[1] ) →理想的には ログフィルタが書ければ Kubernetes の細かな動きがわかるはず ...? [1] https://cloud.google.com/kubernetes-engine/docs/concepts/about-logs?hl=ja#available-logs Kubernetes の振る舞いの十分な情報を含むログが有ること ≠ Kubernetes の振る舞いをログから理解できる Kubernetes では全てのリソースへの操作が kube-apiserver を介して行われる ▶ これら操作は kube-apiserver の Audit 機能で 監査ログとして記録される Kubernetes では様々なリソースの更新を 各種コントローラが監視し、変更に応じてリソースを操作する ▶ これら操作はコントローラの ログとして出力される ノード上の要素もそれぞれノード上で Pod が示された状態 で稼働するように監視し続け、必要に応じて実際のコンテナ を操作する ▶ これら操作はノード上にそれぞれの要素から ログとして出力される ( journald など) • 関係するコンポーネントに当たりをつけないとログフィルタは書けない • 最小限のクラスタで数分でも数千のログがあり、実際には膨大な量のログを分析 しなければならないが、ログは通常一覧性に乏しい • 構造化ログの様々なフィールドをそれぞれのログで読まないと 状態を理解できない
Place Image Here Kubernetes History Inspector (KHI) • GoogleCloudPlatform Github
組織配下 に 1/29 に公開したオープンソースな K8s に適したリッチなログビューア GoogleCloudPlatform/khi • Google Cloud のサポートチームで迅速か つ正確に GKE のトラブルシューティングが できるように開発されたツール • ログストレージ(現状では Cloud Logging のみ)からログを取得、 リソースごとのタイムラインやダイアグラムと して可視化 • ログから可視化するのでクラスタが既に消 えていても OK 、クラスタ内へのエージェン ト類の導入一切必要なし
Deployment の振る舞いを見るデモ
デモ中説明用スライド KHIの動かし方 1. Cloud Shell を開く a. https://shell.cloud.google.com/ 2. kubectl
apply -f deployment.yaml (マニフェストはこちらから : Deployments | Kubernetes) 3. docker run -p 127.0.0.1:8080:8080 asia.gcr.io/kubernetes-history-inspector/release:latest 4. 対象のクラスタのログを KHI で見る https://github.com/GoogleCloudPlatform/khi/blob/main/docs/ja/images/guide-timeline-screen.png クラスタの設定
KHI で確認できた振る舞い $ kubectl apply -f my-deployment.yaml 1. ユーザが Deployment
を作る 2. ReplicaSet ができる 3. Pod ができる 1-1. ユーザが kube-apiserver を介して Deployment リソースを作成 1-2. deployment-controller が Deployment の新規作成を検知して、 kube-apiserver を介して ReplicaSet リソースを作成 2-1. replicaset-controller が ReplicaSet の新規作成を検知して kube-apiserver 介して Pod を作成 3-1. kube-scheduler がどの Node にも紐づいていない Pod を検知して kube-apiserver を介して Binding サブリソースを作成 3-2. kubelet が自分のノードに紐づいている Pod を検知して、 CRI に Pod のサンドボックス、コンテナの実行をリクエスト 3-3. kubelet が各コンテナや Pod の状態を kube-apiserver を介して記録
まとめ • ログからクラスタの振る舞いを説明できると様々な利点がある (問題収束後の調査、より深い K8s の理解...etc) • ログを元に Deployment からコンテナが起動するまでの振る舞いを確認
した • KHI は Google Cloud のサポートチームが開発した、ログを元にクラスタ のリソースのタイムラインやダイアグラムを可視化してくれる OSS ツール • ログビューアなので、クラスタへのエージェント導入の必要がなく 、既に 消されているクラスタにも適用可能で、 docker さえあれば 1 コマンドで動 作可能 GoogleCloudPlatform/khi Now available on GitHub!