Kubernetes障害対応ランブック実践編:15分で切り分け、60分で復旧するための現場手順
Kubernetes で障害が起きたとき、技術力より先に問われるのは「順序」です。順序が崩れると、正しいコマンドを打っていても復旧が遅れます。逆に、判断フレームが決まっていれば、難しい障害でも被害を最小化できます。
本記事では、実運用で使える障害対応ランブックを、初動 15 分・復旧 60 分を目安に具体化します。対象は EKS/GKE/AKS を含む一般的な Kubernetes 本番環境です。
1. 最初の5分:人と情報の交通整理
まずやるべきは技術調査ではなく、交通整理です。
- インシデントの指揮者(IC)を1人決める
- ログ担当、メトリクス担当、アプリ担当を分ける
- Slack/Discord の専用チャンネルを作る
- 5分ごとの時系列ログ(タイムライン)を残す
この段階で「誰が何を見ているか」が曖昧だと、同じ調査を3人で繰り返し、誰も復旧判断をしない状態になります。ICは手を動かさず、意思決定に集中するのが基本です。
2. 5〜15分:影響範囲の特定
次に「どのユーザーに、どの機能で、何%の影響があるか」を確定します。
2-1. まず全体の健康状態
|
|
見るポイント:
- Node が
NotReadyになっていないか - 特定 namespace だけで
CrashLoopBackOffが増えていないか - 直近イベントに
FailedSchedulingやBack-off restarting failed containerがないか
2-2. SLO/SLIから影響を数値化
「遅い気がする」ではなく、以下を数値で押さえます。
- エラー率(5xx / total)
- p95 / p99 レイテンシ
- リクエスト成功率
- 影響時間(何時何分から)
復旧優先順位は「売上影響」「決済影響」「ログイン影響」で並べると迷いにくいです。
3. 典型障害ごとの切り分けテンプレート
3-1. Podが再起動ループする
|
|
判断軸:
- アプリ起因(例: マイグレーション失敗、環境変数不足)
- リソース起因(OOMKill, CPU スロットリング)
- 依存先起因(DB接続失敗、外部APIタイムアウト)
OOMKill が見えたら、即座に requests/limits の見直し候補です。緊急回避として replicas を増やすより、まずメモリリークや一時的負荷スパイクの切り分けを優先します。
3-2. Podは生きているのに503が増える
|
|
よくある原因:
- readinessProbe が厳しすぎて endpoint から外れ続ける
- 依存先劣化で app は起動しているが実処理が詰まる
- HPA は増えているが、DB 接続プールが上限で飽和
このケースでは「Pod数が多いのにエラーが減らない」ので、アプリ外(DB、キュー、外部API)を疑うのが早いです。
3-3. 特定ノードでのみ障害
|
|
ノード隔離が必要なら、以下で新規スケジュールを止めます。
|
|
drain は影響が大きい操作なので、IC の明示承認を挟むのが安全です。
4. 復旧アクションの優先順位(実務向け)
障害中は「恒久対策」を始めないこと。順番は固定します。
- 被害抑制: feature flag で重い機能を止める
- 暫定復旧: 直前の安定リビジョンへロールバック
- 性能確保: replicas/HPA 一時調整、キュー消化速度調整
- 恒久対策: 根本修正は障害収束後にPRで実施
4-1. ロールバックの型を決めておく
|
|
ポイントは「戻す判断に迷わない基準」を事前に定義しておくことです。
- 5分間で 5xx > 2% 継続
- p95 が通常比 2倍超を 10分継続
- ログイン/決済失敗が監視閾値超え
基準がないと、誰も責任を取りたくなくて引き延ばしになります。
5. 事後対応(Postmortem)で必ず残すべきもの
障害対応の価値は、復旧速度だけではありません。再発率を下げて初めて完了です。
最低限残す項目:
- 発生時刻、検知時刻、復旧時刻
- ユーザー影響(件数、売上影響)
- 技術的原因(直接原因 / 背景要因)
- うまくいった対応、失敗した判断
- 再発防止のアクション(担当者・期限付き)
5-1. アクションを「監視」に落とす
「次は気をつける」は効果ゼロです。必ず機械化します。
例:
CrashLoopBackOff > N件を5分継続で即アラート- DB接続待ち時間の p95 をダッシュボード化
- リリース直後30分は自動で高感度監視モード
6. そのまま使える障害対応チェックリスト
初動チェック(0〜15分)
- IC決定、連絡チャンネル作成
- 影響範囲(機能・ユーザー・売上)を数値化
- Node / Pod / Event の全体確認
- 直近デプロイ有無の確認
復旧チェック(15〜60分)
- 被害抑制(feature flag / トラフィック制御)
- ロールバック判断基準を満たすか確認
- 復旧後 15 分の再監視(再発確認)
- ユーザー向けステータス更新
事後チェック(24時間以内)
- Postmortem 作成
- 再発防止チケット発行
- 監視ルール・Runbook 更新
まとめ
Kubernetes 障害対応は、個人技で勝つゲームではありません。誰でも同じ順序で動ける運用設計が最も効きます。特に「初動の交通整理」「ロールバック基準の明文化」「事後の監視自動化」の3点は、復旧時間と再発率を同時に改善します。
次の障害が来たときに迷わないよう、今日のうちにこのランブックを自チーム用に1ページ化しておくことを強くおすすめします。
7. 障害を早く終わらせるための役割分担テンプレート
実際の現場では、技術調査よりコミュニケーションで詰まることが多いです。そこで、あらかじめ役割を固定しておくと復旧が速くなります。
- IC(Incident Commander): 優先順位決定、Go/No-Go判断、対外連絡承認
- Ops Lead: クラスタ状態確認、ロールバック実行、インフラ変更の安全確認
- App Lead: アプリログ解析、機能フラグ切り替え、暫定パッチ判断
- Comms: 社内・顧客向けステータス更新、問い合わせ窓口統一
この分担があると、「調査担当が勝手に危険操作を実施する」「連絡が多重化して混乱する」といった二次被害を防げます。
8. よくあるアンチパターンと回避策
アンチパターン1: まず再デプロイしてしまう
原因が不明なまま再デプロイすると、証拠ログを失い再現不能になります。最低限 events と previous logs を保存してから操作します。
アンチパターン2: 「たぶん直った」でクローズする
復旧後 15 分の監視を省くと、同じ障害が波状的に再発します。復旧宣言は「指標が閾値内で安定した」ことを条件にします。
アンチパターン3: 障害後の改善が担当者依存
改善をドキュメント化せず担当者の記憶に任せると、同じ夜間障害を繰り返します。Runbook への反映までをインシデント完了条件に含めるべきです。