【Kubernetes】個人的Podデバッグ方法まとめ

スポンサーリンク

はじめに

KubernetesのPodがうまく動かない時の個人的なデバッグ方法についてまとめます。

これ以外にも思いついたら追記していきたいと思います。

kubectl get pod

Podの状態を確認します。

kubectl get pod

特に確認するのは下記の項目です。

  • STATUS: ステータスはどうなっているか
  • READY: コンテナは全て起動しているか
  • RESTART: 再起動はしているか

kubectl describe pod

より詳しいPodの状態を確認します。

kubectl describe pod {pod name}

特に確認するのは下記の項目です。

  • State: どんなステータスか
  • Last State: 前回はどんなステータスだったか
    • Reason: 前回はなぜコンテナが終了したのか
    • Exit Code: 終了した時のexit codeは何だったか
  • Restart Count: コンテナは何回再起動したか
  • Events: Podでどんなことが起きたか

Exit Codeは下記を参考にしてください。

Exit Codes in Containers & Kubernetes | Complete Guide | Komodor
Everything you`ll need to know about exit codes used by container engines to indicate reasons for container termination.

kubectl logs {pod name}

Podのログを確認します。

kubectl logs {pod name}

標準出力のログであればこれで確認できます。

kubectl logs -p {pod name}

前回終了したPodのログを確認します。

kubectl logs -p {pod name}

Podが再起動した場合に、前回起動していたPodのログを確認できます。

kubectl logs {pod nama} -c {container name}

Pod内にコンテナが複数ある場合に特定のコンテナのログを確認します。

kubectl logs {pod name} -c {container name}

メインとなるコンテナ以外にもコンテナを実行している場合は何か情報が得られるかも知れません。例えば、istio-proxyを入れている場合はトラフィックのログを確認できます。

また、-pオプションと組み合わせて、前回のPodの特定のコンテナのログも確認できます。

kubectl logs -p {pod name} -c {container name}

kubectl exec {pod name} -- {command}

Podのコンテナでコマンドを実行してみます。

kubectl exec {pod name} -- {command}

特定のディレクトリを確認したり、標準出力に出していないログのファイルを確認したりと、コンテナ内の状態が想定通りか確認します。

また、下記のようにシェルを実行すれば、コンテナ内で自由にコマンドを実行できます。

kubectl exec {pod name} -- /bin/bash

kubectl describe quota

リソースクォータを設定している場合はリソースが足りない場合があるので、確認します。

kubectl describe quota

probeを外す

readinessProbelivenessProbeを設定している場合は、外すことでPodが起動し、何が起きているか調査できるようになることもあります。

参考

タイトルとURLをコピーしました