kubernetesにて異常のあるPodを一目でわかるようにしたスクリプト

# Kubernetesの問題のあるポッドを素早く検出する簡単スクリプト

Kubernetesクラスタ内の問題のあるポッドを簡単に検出できるBashスクリプトを紹介します。このスクリプトは以下の機能を提供します：

1. Runningステータスでないポッドの検出
2. Ready状態のコンテナ数が0のポッドの検出（0/1, 0/2, 0/3のパターン）
3. 特定の名前空間のみをチェックするオプション
4. 結果をわかりやすく表形式で表示（ヘッダー行付き）

## 使用方法
1. 下記の内容を`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
    ```

1. 実行権限を付与します
    ```
   chmod +x check_pods.sh 
    ```

1. スクリプトを実行する
    ```
    ./check_pods.sh
    ```
    ※ネームスペースを指定したい場合
    ```
    ./check_pods.sh [-n namespace]
    ```    

## 実行結果
実際に実行してみると下記のような出力になります．
1. ネームスペースを指定しなかった場合
    ```
    問題のあるポッド:
    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
    ```
    
1. ネームスペースを指定した場合
    ```
    問題のあるポッド:
    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の状態を見る方におすすめですので，興味を持った方は是非使てみてください！