KubernetesのYAMLファイルと kubectl describe の出力を照合し,設定ミスを特定するPythonスクリプトである.
- OS:Ubuntu 24.04.2 LTS
- Python:3.12.3
| ファイル名 | 説明 |
|---|---|
exam.yaml |
CronJobのYAML定義.Prometheusのバックアップジョブを1分ごとに実行. |
kubectl_describe.txt |
kubectl describe の出力例.コンテナ起動失敗やBackOffエラーを含む. |
rules.json |
エラーパターンと対応する検出ルールを定義したJSONファイル. |
k8s_rule_checker3.py |
YAMLとdescribe出力を照合し,ルールに基づいて問題箇所を抽出するPythonスクリプト. |
python3 k8s_rule_checker3.py <yamlファイル> <kubectl-describe出力ファイル> [rules.json]▼使用例▼
python3 k8s_rule_checker3.py exam.yaml kubectl_describe.txt| ID | 名前 | 説明 |
|---|---|---|
missing_file |
ファイルが見つからない | no such file or directory エラーに一致し,YAML内の該当パスを特定する. |
exec_failed |
実行ファイルの実行に失敗 | exec: エラーに一致し,実行対象のスクリプトパスを特定する. |
backoff |
コンテナの再起動失敗 | Back-off や CrashLoopBackOff に一致し,再起動ループの原因を推定する. |
- k8s_rule_checker3.py スクリプトを用いて,Kubernetesの設定ファイル exam.yaml と kubectl_describe.txt を検証した結果は,YAMLファイルの16行目に記述された args のスクリプトパスがエラーの原因箇所であることを表している.
- Pod内のファイル構成と一致していないまたは実行権限がない理由により,コンテナ起動時にスクリプトを実行できない.
▼16行目の正しい記述▼
16 - "/prometheus-backup.sh"
コンテナ内のルートディレクトリに配置されたスクリプトを指定する形式が正しいため,Dockerfileやイメージ構成に応じて正しいパスを指定する必要がある.
rules.jsonに定義された正規表現でkubectl describeの出力を解析.- 該当するパスやキーワードを
exam.yamlから検索し,エラーの原因箇所とされる前後2行の行番号とコンテキストを表示. - 直接的な原因(
missing_file,exec_failed)が見つかった場合は,backoffのような副次的なエラーは除外して表示.