Kubernetesの問題のあるポッドを素早く検出する簡単スクリプト
Kubernetesクラスタ内の問題のあるポッドを簡単に検出できるBashスクリプトを紹介します。このスクリプトは以下の機能を提供します:
- Runningステータスでないポッドの検出
- Ready状態のコンテナ数が0のポッドの検出(0/1, 0/2, 0/3のパターン)
- 特定の名前空間のみをチェックするオプション
- 結果をわかりやすく表形式で表示(ヘッダー行付き)
使用方法
-
下記の内容を
check_pods.sh
として保存する.(ファイル名は自由で構いません.違う名前にした方は今後ファイル名をその名前にするようにしてください.)#!/bin/bash set -eu NAMESPACE="" usage() { echo "使用方法: $0 [-n namespace]" echo " -n: 特定の名前空間のみをチェック" exit 1 } while getopts "n:" opt; do case ${opt} in n ) NAMESPACE=$OPTARG ;; \? ) usage ;; esac done if [ -n "$NAMESPACE" ]; then header="NAMESPACE NAME READY STATUS RESTARTS AGE" result=$(kubectl get pods -n $NAMESPACE | awk -v ns="$NAMESPACE" ' NR==1 {print "NAMESPACE " $0; next} NR>1 && ($3 != "Running" || $2 ~ /0\/[123]/) {printf "%-18s %s\n", ns, $0} ') else result=$(kubectl get pods --all-namespaces | awk ' NR==1 {print; next} NR>1 && ($4 != "Running" || $3 ~ /0\/[123]/) {print} ') fi if [ -n "$result" ]; then echo "問題のあるポッド:" echo "$result" else echo "問題なし" fi
-
実行権限を付与します
chmod +x check_pods.sh
-
スクリプトを実行する
./check_pods.sh
※ネームスペースを指定したい場合
./check_pods.sh [-n namespace]
実行結果
実際に実行してみると下記のような出力になります.
-
ネームスペースを指定しなかった場合
問題のあるポッド: NAMESPACE NAME READY STATUS RESTARTS AGE kube-system helm-install-traefik-mj877 0/1 Completed 1 71d kube-system helm-install-traefik-crd-8z5mx 0/1 Completed 0 71d elastic-system c0118050-logstash-ls-0 0/1 Init:0/1 0 28d c0a21151-test3 pod-pvc-test 0/1 InvalidImageName 0 35d elastic-system fb-filebeat-r65mw 0/1 Running 29 (21d ago) 28d longhorn-system engine-image-ei-5cefaf2b-4cnxq 0/1 Running 4 (21d ago) 63d c0a21151-test4 mongodb-576fdcf9db-q47bp 0/1 Pending 0 10d ingress-nginx ingress-nginx-admission-create-cwwl7 0/1 Completed 0 7d3h ingress-nginx ingress-nginx-admission-patch-9chl4 0/1 Completed 1 7d3h c0a21151-test5 c0a22115f4-ansible-deploy-6fb655f75b-w4zv2 0/1 Pending 0 6d22h c0a21151-test2 redmine-8495664d9b-m8twz 0/1 CrashLoopBackOff 9461 (4m19s ago) 35d c0a21151-test1 nginx-proxy-deployment-6b85fdbc59-9ck4f 0/1 CrashLoopBackOff 2421 (119s ago) 8d
-
ネームスペースを指定した場合
問題のあるポッド: NAMESPACE NAME READY STATUS RESTARTS AGE elastic-system c0118050-logstash-ls-0 0/1 Init:0/1 0 28d elastic-system fb-filebeat-r65mw 0/1 Running 29 (21d ago) 28d
ネームスペースを指定しないとKubernetes環境のすべてのネームスペースの異常のあるPodが出力されます.また,1つのネームスペースに絞って見たい場合はネームスペースを指定すればそのネームスペースの異常のあるPodのみが出力されます.
さいごに
このスクリプトファイルは日頃kubernetesのPodの状態を見る方におすすめですので,興味を持った方は是非使てみてください!