Kubernetes インシデントトリアージ
kubectl を使用して Kubernetes ワークロードと名前空間の読み取り専用トリアージを実行します。
対応:
- 自然言語入力 (ヒューマンモード)
- 構造化 JSON 入力 (オートメーションモード)
このスキルはクラスターの状態を決して変更しません。
ツールの使用
このスキルは、cli_execute ツールで kubectl コマンドのみを使用します。
Kubernetes とのやり取りに http_request や web_search を決して使用しないでください。
すべてのクラスター操作は、cli_execute ツールを介して kubectl 経由で行う必要があります。
ツール: k8s_triage
異常な Kubernetes ワークロード、Pod、または名前空間を診断します。
入力モード
1) ヒューマンモード (自然言語)
入力はプレーンな文字列です。
例:
triage payments-prodtriage deployment payments-api in payments-prodwhy are pods pending in checkout-prod?investigate crashloop in payments-prodtriage pod api-7c9f6d7f86-abcde in payments-prodcheck rollout of deployment payments-api in prod
動作:
- 名前空間、ワークロード、Pod、またはセレクターの意図を解析します。
- 名前空間が省略された場合、
$DEFAULT_NAMESPACEが設定されていればそれを使用します。 - 曖昧な場合は、名前空間レベルのトリアージをデフォルトとします。
- ユーザーに JSON フィールドを覚えさせる必要はありません。
2) オートメーションモード (構造化 JSON)
入力 JSON スキーマ:
{ "namespace": "payments-prod", "workload_kind": "deployment", "workload_name": "payments-api", "pod_name": null, "label_selector": null, "include_logs": true, "logs_tail_lines": 200, "include_previous_logs": true, "events_limit": 50, "include_node_diagnostics": true, "include_metrics": false, "output_format": "markdown" }
ルール:
namespaceは必須です。pod_nameが指定された場合 → Pod レベルのトリアージ。- ワークロードフィールドが指定された場合 → ワークロードレベルのトリアージ。
- それ以外の場合 → 名前空間スキャン。
トリアージプロセス
ステップ 0 — 前提条件
クラスターアクセスを確認:
kubectl version --client kubectl cluster-info
RBAC がアクセスを拒否した場合:
- 許可された操作で続行します。
- 拒否されたコマンドを出力で明示的に報告します。
ステップ 1 — 高速ヘルススナップショット
名前空間スコープ:
kubectl get pods -n -o wide kubectl get deploy,sts,ds,job,cronjob -n
ワークロードスコープ:
kubectl get -n kubectl rollout status / -n --timeout=10s
以下の状態の Pod を選択:
- CrashLoopBackOff
- ImagePullBackOff
- ErrImagePull
- Pending / Unschedulable
- Error
- NotReady
- OOMKilled
- 高い再起動回数
詳細トリアージは $TRIAGE_MAX_PODS (デフォルト 5) に制限します。
ステップ 2 — イベントタイムライン
kubectl get events -n --sort-by=.lastTimestamp | tail -n <events_limit>
以下を探します:
- FailedScheduling
- FailedMount
- Unhealthy (プローブ障害)
- Back-off pulling image
- Evicted
- Node pressure signals
ステップ 3 — Pod とワークロードの記述
選択された各 Pod に対して:
kubectl describe pod -n
以下を取得:
- コンテナの状態と理由
- 再起動回数
- 最後の終了理由
- プローブ障害
- ボリュームマウントの問題
- ノード割り当て
- Taints / tolerations
- Affinity 制約
ワークロードレベルのトリアージの場合:
kubectl describe -n
ステップ 4 — ノード診断 (オプション)
kubectl get nodes -o wide kubectl describe node
以下を確認:
- NotReady
- MemoryPressure
- DiskPressure
- PIDPressure
- Evictions
ステップ 5 — ログ (オプション)
kubectl logs -n --all-containers --tail=
再起動ループがあり、include_previous_logs=true の場合:
kubectl logs -n --previous --all-containers --tail=
ルール:
- CrashLoopBackOff の場合は、前回のログを優先します。
- 明らかな機密パターンを編集します。
- Secret の値を決して出力しません。
ステップ 6 — オプションのメトリクス
有効な場合:
kubectl top pods -n kubectl top node
metrics-server が利用できない場合は、正常にスキップします。
検出ヒューリスティック
検出された問題を以下のカテゴリに分類:
- CrashLoop / Application Crash
- OOMKilled / Resource Limits
- Image Pull Failure
- Scheduling Constraint
- Probe Failure
- PVC / Volume Failure
- Node Pressure / Eviction
- Rollout Stuck
- Unknown / Escalation Needed
各問題に対して以下を提供:
- 仮説
- 証拠
- 信頼度スコア (0.0–1.0)
- 推奨される次のコマンド
出力構造
1) インシデント概要
- 名前空間
- スコープ (Pod/ワークロード/名前空間)
- 影響を受けるリソース数
- タイムスタンプ
2) 主な発見
簡潔な箇条書きの要約。
3) 可能性の高い根本原因 (上位 3 件)
各項目:
- 説明
- 証拠の抜粋
- 信頼度
- 推奨アクション
4) 次のコマンド
コピー&ペースト可能な kubectl コマンド。
5) 証拠の付録
- イベント (最近)
- 記述の抜粋
- ログの抜粋
安全性の制約
このスキルは以下を順守する必要があります:
- 読み取り専用の kubectl 操作のみを実行します。
- 以下を決して実行しない:
- apply
- patch
- delete
- exec
- port-forward
- scale
- rollout restart
- Secret の値を決して出力しません。
- 完全な環境変数のダンプを避けます。
自律互換性
このスキルは、以下によって呼び出されるように設計されています:
- k8s_alert_handler (アラートトリガートリアージ)
- k8s_patrol (スケジュールされたパトロールスキャン)
- 自然言語 CLI を介した人間
以下を満たす必要があります:
- 冪等であること
- 決定論的なフィンガープリントを生成すること
- 過度なクラスター負荷を回避すること
- 詳細トリアージのスコープを制限すること