• システム開発に関わる内容をざっくりと書いていく

Kubernetes CrashLoopBackOff のざっくり切り分け

Pod が Running にならず CrashLoopBackOff——起動しては落ちるを繰り返している状態だ。イメージ取得はできていることが多いので、次はアプリの起動失敗・プローブ・設定不足を疑う。

先に結論

  • kubectl describe podkubectl logs(前回ログ含む)が一次情報
  • ExitCode、OOMKilled、プローブ失敗、設定/Secret 不足を順に見る
  • ImagePullBackOff とは別物(あちらは取得失敗)
  • ローカルと同じ設定でも、クラスタの ConfigMap/環境変数差分で落ちることが多い

見る順番

  • describe の Events(Back-off、Failed、Unhealthy)
  • logs / logs --previous で例外や missing config
  • コンテナの Last State の Reason/Exit Code
  • liveness/readiness の時期と閾値(起動が遅いと殺される)
  • リソース制限で OOM、読み取り専用 FS、権限(runAsNonRoot)

よくある原因

  • 必須環境変数/接続先不足でプロセス即終了
  • マイグレーション失敗で起動フックが落ちる
  • liveness が早すぎて起動中に再起動ループ
  • 依存サービス未就绪(DB/API)でリトライせず終了
  • コマンド/引数の誤り(シェル形式の取り違え)

対処の考え方

  • まずログでアプリ例外を特定し、設定を直す
  • 起動が遅いなら startupProbe や初期遅延を見直す
  • OOM ならメモリ要求/制限とアプリ実使用を合わせる
  • 一時的にコマンドを sleep に変えて中に入るのは最終手段(本番では慎重に)

ざっくりまとめ

  • CrashLoop=起動後に落ちている。logs が本丸
  • 設定・プローブ・OOM・依存を順に疑う
  • ImagePull 系と混ぜない

関連記事