Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ログから学ぶKubernetes
Search
GoogleCloudPlatformJapan
February 20, 2025
Business
770
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
62
Jagu'e'r O11y分科会 0630 - kubectl logsのその先へ、実は使えるいろんなKubernetesログを追ってみよう
googlecloudjapan
0
100
Google Kubernetes Engine (GKE) の可観測性を活用し、 システムの Resiliency を高める障害原因調査
googlecloudjapan
0
120
「原因不明なナゾの障害」で終わらないための Kubernetes のログの徹底活用
googlecloudjapan
0
510
15 分で学ぶ Cloud Run のユースケースと代表的なアーキテクチャパターン
googlecloudjapan
3
940
Google Cloud の スペシャリストと学ぶ! BigQuery & Gemini
googlecloudjapan
1
310
GKE Enterprise 徹底解説
googlecloudjapan
2
1.5k
Cloud Run で作るサーバーレス アーキテクチャ 30 連発 - これのときはこう!
googlecloudjapan
33
12k
実践!サーバーレス RAG 構築:Firestore ベクトル検索と VertexAI LLM 活用
googlecloudjapan
2
3.1k
Other Decks in Business
See All in Business
TECO Design 会社紹介資料
tecodesign
0
310
さまざまなサイズにおける巻き込み方と伝え方 / OSO2026
daiksy
2
680
インキュデータ会社紹介資料
okitsu
3
60k
malna-recruiting-pitch
malna
0
27k
SaaS・クラウド版・ソフトウェア版…どれを選ぶ? 用途と課題で紐解く Movable Type シリーズ選定ガイド
masakah
0
230
採用ピッチデック
macloud
5
91k
01_全社_FLUX採用ピッチ資料_Ver.5.7
flux
12
230k
会社説明資料_株式会社イー・コミュニケーションズ
ecoms_ikeda08
0
130
セーフィー株式会社(Safie Inc.) 会社紹介資料
safie_recruit
8
470k
増え続ける運用を、 Skill化する"型"でさばく
morimori3
0
320
なぜデベロッパーアドボカシーが必要なのか?
taiponrock
PRO
0
180
ログラス会社紹介資料 新卒採用 ビジネス職[経営幹部候補]/ Loglass Company Deck
loglass2019
2
25k
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
880
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
710
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Site-Speed That Sticks
csswizardry
13
1.5k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Building Applications with DynamoDB
mza
96
7.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
HDC tutorial
michielstock
2
880
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
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!