関連記事

HelmでローカルにSonarQubeを構築してみる

【Kubernetes】Podを作成された順で取得する

【Kubernetes】Pod内のコンテナを一覧表示する





KubernetesのPodがうまく動かない時の個人的なデバッグ方法についてまとめます。
これ以外にも思いついたら追記していきたいと思います。
Podの状態を確認します。
1kubectl get pod特に確認するのは下記の項目です。
STATUS: ステータスはどうなっているかREADY: コンテナは全て起動しているかRESTART: 再起動はしているかより詳しいPodの状態を確認します。
1kubectl describe pod {pod name}特に確認するのは下記の項目です。
State: どんなステータスかLast State: 前回はどんなステータスだったか
Reason: 前回はなぜコンテナが終了したのかExit Code: 終了した時のexit codeは何だったかRestart Count: コンテナは何回再起動したかEvents: Podでどんなことが起きたかExit Codeは下記を参考にしてください。

Kubernetes Exit Codes (137, 143, 139) + Docker Exit Codes (125–127)
Container crashing with no clear reason? Learn what container Exit Codes actually mean and how to fix the most common ones fast.
{pod name}Podのログを確認します。
1kubectl logs {pod name}標準出力のログであればこれで確認できます。
{pod name}前回終了したPodのログを確認します。
1kubectl logs -p {pod name}Podが再起動した場合に、前回起動していたPodのログを確認できます。
{pod nama} -c {container name}Pod内にコンテナが複数ある場合に特定のコンテナのログを確認します。
1kubectl logs {pod name} -c {container name}メインとなるコンテナ以外にもコンテナを実行している場合は何か情報が得られるかも知れません。例えば、istio-proxyを入れている場合はトラフィックのログを確認できます。
また、-pオプションと組み合わせて、前回のPodの特定のコンテナのログも確認できます。
1kubectl logs -p {pod name} -c {container name}{pod name} -- {command}Podのコンテナでコマンドを実行してみます。
1kubectl exec {pod name} -- {command}特定のディレクトリを確認したり、標準出力に出していないログのファイルを確認したりと、コンテナ内の状態が想定通りか確認します。
また、下記のようにシェルを実行すれば、コンテナ内で自由にコマンドを実行できます。
1kubectl exec {pod name} -- /bin/bashリソースクォータを設定している場合はリソースが足りない場合があるので、確認します。
1kubectl describe quotareadinessProbeやlivenessProbeを設定している場合は、外すことでPodが起動し、何が起きているか調査できるようになることもあります。