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
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
Search
Sota Takaki
September 04, 2026
Programming
10
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
Sota Takaki
September 04, 2026
More Decks by Sota Takaki
See All by Sota Takaki
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
120
Terraform での Google Cloud IAM 管理 について考える
stkk
0
75
Other Decks in Programming
See All in Programming
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
270
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
150
バグを直したら useEffect が消えた
colorful12
3
780
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
260
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
My Marp Sample
sinoue0108
0
140
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.4k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
500
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
560
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
400
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
The SEO Collaboration Effect
kristinabergwall1
1
540
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Designing for Timeless Needs
cassininazir
1
460
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
400
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
57k
Practical Orchestrator
shlominoach
191
12k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
590
Transcript
GKE で Pod の見方を変えたら、 スケールアウト時の Pod の挙動を 真に捉えられた話 株式会社スリーシェイク Sreake事業部
髙木 創太 SRE Tech Talk #15 2026-09-04 Copyright Reserved. Copyright © © 3-shake, 3-shake, Inc. Inc. All All Rights Right Reserved. 1
自己紹介 • • • Copyright © 3-shake, Inc. All Rights
Reserved. 名前 ◦ 髙木 創太 所属 ◦ 株式会社スリーシェイク SRE 一言 ◦ 全てこのアフロでプロフィール画像を統一していま す。よろしくお願いします。 ▪ X: https://x.com/stkk_12 ▪ Zenn: https://zenn.dev/stkk 2
目次 • Pod のどの値をみているか? ◦ • • current / desired
/ available の違い 原因は probe だった ◦ pod が再起動されていた ◦ 自己増殖ループ まとめ • 対象 ◦ • 1つの Deployment が管理する Pod メトリクス ◦ Deployment 単位の台数メトリクス ▪ Copyright © 3-shake, Inc. All Rights Reserved. (kubernetes_state.deployment.*) 3
01 Pod のどの値をみているか? Copyright © 3-shake, Inc. All Rights Reserved.
Pod のどの値を見ていますか? • ダッシュボードに単に「Pod 数」のグラフを置いているチームは多いと思います • 私も単に「Pod 数」のグラフを見て、スケールアウト時などの Pod の挙動を確認していました
→ その Pod 数は何を表していますか? Copyright © 3-shake, Inc. All Rights Reserved. 5
ある日のモニタリング 左軸: Pod 数 右軸: LB 5xx/分 • トラフィックの増加に伴い HPA
により Pod がスケール • Pod 数は一度も減っていない • 起動失敗の様子もない → 想定通りの動きなのに LB の 5xx が増加 → Pod 数には異常が一切写っていなかった ※ 数値は傾向を保ったうえでダミー値に置き換えています Pod 数をみておくのは良かったが、 指標が Pod の「どの段階」を数えているかを知らなかった 本日は主に Pod の current / ready / available の3つの指標についてみていきます Copyright © 3-shake, Inc. All Rights Reserved. 6
3 つの指標は、ライフサイクルの違う地点を数えている Pod は作成されてから配れるまでに、いくつもの段階を経る 段階 Condition ノード割り当て PodScheduled = True
• init コンテナ完了 Initialized = True • image pull → 起動 phase: Running • readinessProbe 通過 ContainersReady = True Ready = True • • readinessGate 承認 Ready = True • • minReadySeconds 経過 — • • current ready 指標 Datadog 何を数えるか desired deployment.replicas_desired 何台にしたいか(Pod が存在しない分も含む目標) current deployment.replicas 存在する Pod。Pending も未 Ready も再起動中も全部含む ready deployment.replicas_ready Ready: True の Pod available deployment.replicas_available Ready: True が minReadySeconds 続いた Pod available • current は上の段階から全部数え、ready は Ready = True から。 Ready は一度 True になっても False に戻ります Copyright © 3-shake, Inc. All Rights Reserved. ReadinessGate: Readiness Probe に加え、他の条件も含めてコンテナがリクエストを受け付けられる状態なのか制御できる機能 7
desired / current / ready 3 つ並べたら、ready が「減って」いた • ready
が 10 → 4 → 3 と「減っている」 • 目標 15 台に対して、配れていたのは 3 台 • current でみた Pod は増えていたが、トラフィックを 処理可能な ready の Pod は一時的に急減していた ※ 数値は傾向を保ったうえでダミー値に置き換えています ※ current と desired は完全に重なっているとします xx:03 地点では、、、 desired 15 desired と ready を比較してみてみるだけで、事象の輪郭を捉えることができました current 15 正常にスケールしているようにみえていたが、実はトラフィック増加初期はトラフィッ ready クを処理可能な Pod 自体は減っていたのです 3 <- 処理可能なのはここだけ Copyright © 3-shake, Inc. All Rights Reserved. 8
02 原因は probe だった Copyright © 3-shake, Inc. All Rights
Reserved.
Pod の詳細を調査してみると、、、 指標 実測 読み取れること コンテナ再起動 6 分間で数10回 pod が
kill され続けている 終了理由 reason:error 10数件 liveness kill か異常終了 終了理由 OOMKilled 0件 メモリ不足ではない CPU 利用率 60%前後 → 95%超 飽和している • アプリのログにクラッシュの形跡はなかった • context deadline exceeded での Readiness / Liveness probe failed のログが大量に観測された → probe の失敗による Pod の切り離しや再起動が原因と判断 Copyright © 3-shake, Inc. All Rights Reserved. 10
原因は probe の未指定パラメータだった パラメータ 未指定時のデフォルト timeoutSeconds 1 条件が厳しく、アプリケーションが再起不能になっていないにも関わらず、 periodSeconds 10
トラフィックの増加によるレスポンス遅延で、probe が失敗判定されてしまう failureThreshold 3 2 つの probe がそれぞれ何度も失敗していた probe 失敗すると何が起きるか 観測された症状 readinessProbe endpoints から除外される(Pod は生きたまま) ready が 10 → 3 livenessProbe コンテナが再起動される 再起動数十回 probe 失敗による自己増幅ループが完成します 遅い Pod が endpoints から外れる → 残った Pod にトラフィックが集中 → そちらも遅くなって外れる Copyright © 3-shake, Inc. All Rights Reserved. 11
連鎖の全体像 — 自己増幅ループ 1 トラフィック増で CPU が飽和 2 アプリケーションのレスポンスが遅延してきます 3
readinessProbe が失敗し、正常だった pod が NEG から切り離される 4 livenessProbe が同様に失敗し、コンテナが kill → 数十回の再起動を観測 5 残った pod に全負荷が集中し、さらに飽和 手順 2 に戻る → 負荷で遅くなった pod を probe が殺し、それが残りの pod をさらに追い込む「自己増殖ループ」に readiness / liveness probe をチューニングし、自己増殖ループからの一部脱却に成功 Copyright © 3-shake, Inc. All Rights Reserved. 12
03 まとめ Copyright © 3-shake, Inc. All Rights Reserved.
まとめ 今日の話 1 明日からできること 見ていたのは current だけだった Pod は 10
→ 20 に増えていて、グラフは健全に見えた。それでも LB の 5xx は増加 2 1 ダッシュボードの「Pod 数」を 見直してみる 2 スケール時の ready もしくは aveilable を観察する 3 probe の条件が厳しすぎないか確認する desired / current / ready を並べた ready が 10 → 4 → 3 と「減っていた」。Pod は増えていたが、配れる Pod は減っていた 3 原因は probe の未指定パラメータだった timeoutSeconds は書かなければ 1 秒。readiness で除外、liveness で再起 動が同時に起きていた Copyright © 3-shake, Inc. All Rights Reserved. 14
補足 1 probe の改善は対症療法。根本解決にはリソース値の見直しが必要 • • • 2 minReadySeconds を設定しているなら、available
でみる • • • 3 連鎖の起点は CPU 飽和と throttling。requests / limits を見直せば、probe の timeout もそもそも踏まなくなる ただし throttling を完全に無くすことはできないので、probe 側の余裕も別途必要 今回は影響範囲が小さく即日入れられる probe から着手した、という順序の話 available = Ready が minReadySeconds 続いた Pod。再起動を繰り返す Pod を数えない 未設定(0 秒)なら ready とほぼ一致する。設定していると available は ready より遅れて動く ready(反応が速い)、available(安定)と使い分ける スケールアウト時の新 Pod 起動では、startupProbe の失敗も観測された • • • startupProbe の失敗もコンテナ再起動。起動が完了しないので ready が回復しない startupProbe 実行中は readiness / liveness が動かないため、症状が見えにくい 猶予は failureThreshold × periodSeconds。timeoutSeconds のデフォルト 1 秒はここでも効く Copyright © 3-shake, Inc. All Rights Reserved. 15
ご清聴ありがとうございました! Copyright © 3-shake, Inc. All Rights Reserved. 16