凡ジニアのtxt

エンジニアリングができないのが悩みです。

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運用で問題が起きた場合に確認する主な流とコマンドになります。