Kubernetes運用における調査コマンド集
最初に
Kubernetes運用において、Issue調査上でよく使うコマンドをまとめていきます。
Kubernetes編
まず、Kubernetes上のアプリケーションが動いているPodのリソース使用量をチェックします。あとは各Node/Podのステータスも確認しておきます。
# Podのリソース使用量を確認 kubectl top pods -n <namespace> # or Nodeのリソース使用量の確認 kubectl top nodes # Nodeのステータスを確認 kubectl get nodes # Podのステータスを確認 kubectl get pods -n <namespace> # 指定のPodの df -f コマンドを実行 kubectl exec -it -n <namespace> <pod name> -- df -h # 複数のコンテナの場合 kubectl exec -it -n <namespace> <pod name> -c <container name> -- df -h
Podステータス上がCrashLoopBackOff
担っている場合は、yaml上のパラメータが誤りであったり、docker repoとの疎通を確認します。NodeがNotReady
であることやkubectl
の応答がない場合は、Master/Worker Nodeが動いているホストに直接ログインして、変なプロセスがメモリを食いつぶしてないか確認します。
上記以外の場合は、以下のコマンドを使ったチェックを進めます。エラーログが確認できる場合、Pod上のアプリケーションに関して問題がある可能性があります。なので、アプリチームとバグがないか確認します。
# Podのログを確認 kubectl logs -n <namespace> <pod name> # 複数のコンテナの場合 kubectl logs -n <namespace> <pod name> -c <container name>
またPodのログは、/var/log/containers
配下でもファイル出力されているので、確認することができます。
Linux編
kubectl
の応答がない場合、OOM Killerが原因でMaster Nodeのkubelet
が落ちている可能性があります。なので、kubelet
が動いていることや他プロセスがメモリを食いつぶしているか確認します。
# 実行中のプロセス確認 top # OOM Killerのログ確認 cat /var/log/messages | grep Kill # kubeletのステータス確認 systemctl status kubelet # kubeletの再起動 systemctl restart kubelet
他プロセスがメモリを食いつぶしているときは、該当するプロセスを停止させるのが一時的な対処になると思います。
所感
今回は、自分がKubernetes運用で問題が起きた場合に確認する主な流とコマンドになります。