- 【Kubernetes】監視・状態確認に便利なkubectlコマンド一覧!Pod・Node・CPU・メモリの確認方法
- Kubernetesの監視・状態確認に便利なコマンド一覧
- Podの状態を確認するコマンド
- Nodeの状態を確認するコマンド
- CPU・メモリの使用量を確認するコマンド
- ログを確認するコマンド
- Kubernetesのイベントを確認するコマンド
- Deployment・Serviceの状態を確認するコマンド
- Kubernetesのリソースをまとめて確認するコマンド
- Kubernetesの障害調査に便利なコマンド
- 監視・状態確認で覚えておきたい便利なオプション
- Kubernetesの監視におすすめのツール
- まとめ
【Kubernetes】監視・状態確認に便利なkubectlコマンド一覧!Pod・Node・CPU・メモリの確認方法
Kubernetesでは、PodやNodeの稼働状況、CPU・メモリの使用量、アプリケーションのログなど、さまざまな情報を確認できます。
しかし、確認したい情報によって使用するkubectlコマンドが異なるため、どのコマンドを使えばよいか迷うこともあるのではないでしょうか。
本記事では、Kubernetesの監視・状態確認に便利なkubectlコマンドを紹介します。
PodやNodeの状態確認から、CPU・メモリの使用量、ログ、イベントの確認まで、実務で役立つコマンドをまとめています。
Kubernetesの監視・状態確認に便利なコマンド一覧
まずは、Kubernetesの監視や状態確認でよく使用するkubectlコマンドを一覧で紹介します。
| コマンド | 用途 |
|---|---|
kubectl get pods | Podの状態確認 |
kubectl get pods -A | 全NamespaceのPod確認 |
kubectl get nodes | Nodeの状態確認 |
kubectl describe pod | Podの詳細情報確認 |
kubectl top pods | PodのCPU・メモリ使用量確認 |
kubectl top nodes | NodeのCPU・メモリ使用量確認 |
kubectl logs | コンテナのログ確認 |
kubectl get events | Kubernetesのイベント確認 |
kubectl get deployments | Deploymentの状態確認 |
kubectl get services | Serviceの状態確認 |
kubectl get all | 主要リソースの一覧確認 |
kubectl get pods -w | Podの状態をリアルタイム監視 |
以降では、それぞれのコマンドの使い方を解説します。
Podの状態を確認するコマンド
PodはKubernetesでコンテナを実行する最小単位です。
アプリケーションが正常に動作しているか確認するときは、まずPodの状態を確認します。
1. Podの一覧を確認する
kubectl get pods
実行すると、現在のNamespaceに存在するPodの一覧を確認できます。
実行結果の例です。
NAME READY STATUS RESTARTS AGE
nginx-7d8b49557c-abcde 1/1 Running 0 10m
nginx-7d8b49557c-fghij 1/1 Running 0 10m
主な項目は以下のとおりです。
| 項目 | 説明 |
|---|---|
| NAME | Podの名前 |
| READY | 起動しているコンテナ数 |
| STATUS | Podの状態 |
| RESTARTS | コンテナの再起動回数 |
| AGE | Podが作成されてからの経過時間 |
特に確認したいのはSTATUSとRESTARTSです。
STATUSがRunningであればPodは実行中です。また、RESTARTSが増加している場合は、コンテナが繰り返し再起動していないか調査する必要があります。
2. すべてのNamespaceのPodを確認する
kubectl get pods -A
-Aを指定すると、すべてのNamespaceに存在するPodを確認できます。
特定のNamespaceだけでなく、Kubernetesクラスター全体のPodを確認したい場合に便利です。
3. PodのIPアドレスやNodeを確認する
kubectl get pods -o wide
-o wideを指定すると、通常の一覧に加えて、PodのIPアドレスや配置されているNodeなどの情報を確認できます。
特定のPodがどのNodeで実行されているか調べたい場合に便利です。
すべてのNamespaceを対象にする場合は、以下のように実行します。
kubectl get pods -A -o wide
4. Podの状態をリアルタイムで監視する
kubectl get pods -w
-wは--watchの省略形です。
Podの状態に変化があった場合に、画面上に更新内容が表示されます。
例えば、Podの作成や削除、再起動などの変化を確認できます。
コマンドを終了する場合はCtrl + Cを押します。
5. Podの詳細情報を確認する
kubectl describe pod nginx-7d8b49557c-abcde
describeを使用すると、指定したPodの詳細情報を確認できます。
主に以下の情報を確認できます。
- Podの状態
- コンテナの状態
- コンテナの再起動回数
- 使用しているイメージ
- PodのIPアドレス
- 配置されているNode
- Events(イベント情報)
Podが正常に起動しない場合や、CrashLoopBackOffなどのエラーが発生した場合に便利なコマンドです。
なお、Pod名は実際に存在する名前に置き換えてください。
Nodeの状態を確認するコマンド
Nodeは、KubernetesのPodを実行するためのサーバーです。
クラスター内のNodeが正常に稼働しているか確認するときは、以下のコマンドを使用します。
1. Nodeの一覧を確認する
kubectl get nodes
実行結果の例です。
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 30d v1.32.0
k8s-worker-1 Ready <none> 30d v1.32.0
k8s-worker-2 Ready <none> 30d v1.32.0
主な項目は以下のとおりです。
| 項目 | 説明 |
|---|---|
| NAME | Nodeの名前 |
| STATUS | Nodeの状態 |
| ROLES | Nodeの役割 |
| AGE | 作成からの経過時間 |
| VERSION | Kubernetesのバージョン |
STATUSがReadyであれば、NodeはPodを実行できる状態です。
一方、NotReadyの場合は、Nodeの障害やネットワークの問題などが発生している可能性があります。
2. Nodeの詳細情報を確認する
kubectl describe node k8s-worker-1
指定したNodeの詳細情報を確認できます。
主に以下の情報が表示されます。
- Nodeの状態
- CPU・メモリなどのリソース情報
- Nodeに割り当てられているPod
- NodeのIPアドレス
- Conditions
- Events
NodeがNotReadyになった場合や、Podが正常に配置されない場合の調査に便利です。
3. NodeのIPアドレスを確認する
kubectl get nodes -o wide
-o wideを指定すると、Nodeの内部IPアドレスやOSイメージなどの情報を確認できます。
Node間のネットワーク接続を調査するときにも役立ちます。
CPU・メモリの使用量を確認するコマンド
Kubernetesでは、PodやNodeごとのCPU・メモリの使用量を確認できます。
リソース不足によるパフォーマンス低下や、メモリ不足の調査などに便利です。
1. PodのCPU・メモリ使用量を確認する
kubectl top pods
実行結果の例です。
NAME CPU(cores) MEMORY(bytes)
nginx-7d8b49557c-abcde 25m 128Mi
nginx-7d8b49557c-fghij 40m 150Mi
主な項目は以下のとおりです。
| 項目 | 説明 |
|---|---|
| NAME | Podの名前 |
| CPU(cores) | CPUの使用量 |
| MEMORY(bytes) | メモリの使用量 |
CPUの25mは、CPUコアの0.025個分を意味します。
メモリの128Miは、128メビバイトです。
CPUやメモリを大量に使用しているPodを特定したい場合に便利です。
2. すべてのNamespaceのPodの使用量を確認する
kubectl top pods -A
すべてのNamespaceに存在するPodのCPU・メモリ使用量を確認できます。
特定のNamespaceだけでなく、クラスター全体でリソースを大量に使用しているPodを探したい場合に便利です。
3. NodeのCPU・メモリ使用量を確認する
kubectl top nodes
実行結果の例です。
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 250m 12% 1024Mi 25%
k8s-worker-1 800m 40% 2048Mi 50%
k8s-worker-2 500m 25% 1536Mi 38%
NodeごとのCPU・メモリ使用量を確認できます。
特定のNodeに負荷が集中していないか確認したい場合に便利です。
4. コンテナごとのCPU・メモリ使用量を確認する
kubectl top pods --containers
Pod単位ではなく、Pod内のコンテナごとのリソース使用量を確認できます。
複数のコンテナを実行しているPodで、どのコンテナがCPUやメモリを多く使用しているか調べる場合に便利です。
注意:kubectl topを使用するための条件
kubectl topを使用するには、Metrics Serverがクラスターに導入されている必要があります。
導入されていない場合、以下のようなエラーが発生することがあります。
error: Metrics API not available
その場合は、Metrics Serverの導入状況を確認してください。
kubectl get deployment metrics-server -n kube-system
なお、kubectl topで確認できるのは現在のリソース使用量です。長期間の使用量の推移やグラフによる監視には、PrometheusやGrafanaなどの監視ツールが適しています。
ログを確認するコマンド
Pod内のアプリケーションでエラーが発生した場合は、ログを確認することで原因を調査できます。
1. Podのログを確認する
kubectl logs nginx-7d8b49557c-abcde
指定したPodのコンテナログを確認できます。
アプリケーションのエラーや例外が発生していないか調査するときに便利です。
2. ログをリアルタイムで確認する
kubectl logs -f nginx-7d8b49557c-abcde
-fは--followの省略形です。
ログが追加されるたびに画面に表示されるため、アプリケーションの動作をリアルタイムで確認できます。
終了する場合はCtrl + Cを押します。
3. 最新の100行だけ確認する
kubectl logs --tail=100 nginx-7d8b49557c-abcde
--tail=100を指定すると、最新の100行だけを表示できます。
ログが大量に出力されるアプリケーションで、直近のエラーを確認したい場合に便利です。
4. コンテナの再起動前のログを確認する
kubectl logs --previous nginx-7d8b49557c-abcde
--previousを指定すると、現在のコンテナではなく、直前に終了したコンテナのログを確認できます。
コンテナが再起動してしまい、再起動前に発生していたエラーを調査したい場合に便利です。
5. Namespaceを指定してログを確認する
kubectl logs -n default nginx-7d8b49557c-abcde
-nを指定すると、対象のNamespaceを指定できます。
デフォルト以外のNamespaceで動作しているPodのログを確認するときに使用します。
Kubernetesのイベントを確認するコマンド
Kubernetesでは、PodやNodeなどのリソースに関するイベントが記録されます。
Podの起動失敗やイメージの取得失敗など、トラブルの原因を調査するときに便利です。
1. イベントの一覧を確認する
kubectl get events
現在のNamespaceに記録されているイベントを確認できます。
実行結果の例です。
LAST SEEN TYPE REASON OBJECT MESSAGE
2m Normal Scheduled pod/nginx Successfully assigned
1m Normal Pulling pod/nginx Pulling image
1m Normal Pulled pod/nginx Successfully pulled image
主な項目は以下のとおりです。
| 項目 | 説明 |
|---|---|
| LAST SEEN | 最後に発生してからの経過時間 |
| TYPE | イベントの種類 |
| REASON | イベントの理由 |
| OBJECT | 対象のリソース |
| MESSAGE | イベントの詳細 |
TYPEには主に以下の種類があります。
Normal:正常な処理に関するイベントWarning:警告や問題に関するイベント
特にWarningが記録されている場合は、内容を確認して原因を調査しましょう。
2. すべてのNamespaceのイベントを確認する
kubectl get events -A
すべてのNamespaceに記録されているイベントを確認できます。
クラスター全体で発生している問題を調査するときに便利です。
3. イベントを発生時刻順に並べる
kubectl get events --sort-by=.metadata.creationTimestamp
イベントを作成時刻順に並べて表示できます。
問題が発生した前後のイベントを時系列で確認したい場合に便利です。
4. Warningイベントだけを確認する
kubectl get events --field-selector type=Warning
--field-selectorを指定すると、条件に一致するイベントだけを取得できます。
このコマンドでは、Warningイベントに絞り込んで確認できます。
Deployment・Serviceの状態を確認するコマンド
Podだけでなく、DeploymentやServiceなどのリソースも定期的に確認しておくと、Kubernetesの状態を把握しやすくなります。
1. Deploymentの状態を確認する
kubectl get deployments
Deploymentの一覧を確認できます。
実行結果の例です。
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 2/2 2 2 10m
主な項目は以下のとおりです。
| 項目 | 説明 |
|---|---|
| NAME | Deploymentの名前 |
| READY | 利用可能なPod数 / 希望するPod数 |
| UP-TO-DATE | 最新の設定が反映されたPod数 |
| AVAILABLE | 利用可能なPod数 |
| AGE | 作成からの経過時間 |
例えば、READYが2/2であれば、希望する2つのPodが準備できている状態です。
2. Deploymentの詳細情報を確認する
kubectl describe deployment nginx
Deploymentの詳細情報を確認できます。
レプリカ数やPodの状態、イベントなどを確認したい場合に便利です。
3. Deploymentの更新状況を確認する
kubectl rollout status deployment/nginx
Deploymentの更新処理が完了しているか確認できます。
ローリングアップデート中に、Podの入れ替えが正常に完了しているか確認したい場合に便利です。
4. Serviceの一覧を確認する
kubectl get services
Serviceの一覧を確認できます。
実行結果の例です。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 30d
nginx ClusterIP 10.96.10.20 <none> 80/TCP 10m
Serviceの名前や種類、IPアドレス、公開ポートなどを確認できます。
5. Serviceの詳細情報を確認する
kubectl describe service nginx
指定したServiceの詳細情報を確認できます。
接続先のPodやポート、Selectorなどを調査したい場合に便利です。
Kubernetesのリソースをまとめて確認するコマンド
1. 主要リソースの一覧を確認する
kubectl get all
現在のNamespaceに存在する主要なリソースをまとめて確認できます。
Pod、Service、Deployment、ReplicaSetなどを一覧で確認したい場合に便利です。
すべてのNamespaceを対象にする場合は、以下のように実行します。
kubectl get all -A
ただし、get allはKubernetesに存在するすべてのリソースを取得するコマンドではありません。
ConfigMapやSecret、PersistentVolumeなどは含まれないため、必要に応じて個別に確認してください。
2. 特定のNamespaceのリソースを確認する
kubectl get all -n default
-nでNamespaceを指定すると、そのNamespace内の主要リソースを確認できます。
3. リソースの一覧をJSON形式で確認する
kubectl get pods -o json
Podの情報をJSON形式で取得できます。
スクリプトによる情報の加工や、リソースの詳細な設定内容を確認したい場合に便利です。
YAML形式で確認したい場合は、以下のように実行します。
kubectl get pods -o yaml
Kubernetesの障害調査に便利なコマンド
KubernetesでPodが正常に起動しない場合は、Podの状態やログ、イベントを確認することで原因を特定しやすくなります。
ここでは、障害調査で特に役立つコマンドを紹介します。
1. Running以外のPodを確認する
kubectl get pods --field-selector=status.phase!=Running
Podの状態がRunning以外のものを抽出できます。
例えば、以下のような状態のPodを調査するときに便利です。
| STATUS | 説明 |
|---|---|
| Pending | Podの配置や起動を待っている状態 |
| Succeeded | Podの処理が正常終了した状態 |
| Failed | Podの処理が失敗した状態 |
| Unknown | Podの状態を確認できない状態 |
なお、CrashLoopBackOffなどはPodのphaseではなくコンテナの状態を表すため、このコマンドだけでは抽出できません。
2. CrashLoopBackOffの原因を調査する
kubectl get pods
STATUSがCrashLoopBackOffになっているPodを確認します。
続いて、以下のコマンドを実行します。
kubectl describe pod nginx-7d8b49557c-abcde
Podの詳細情報やEventsを確認できます。
さらに、再起動前のログを確認します。
kubectl logs --previous nginx-7d8b49557c-abcde
このように、describeとlogs --previousを組み合わせることで、コンテナが繰り返し再起動する原因を調査できます。
3. Pending状態のPodを調査する
kubectl describe pod nginx-7d8b49557c-abcde
PodがPendingになっている場合は、Eventsを確認します。
例えば、以下のような原因が考えられます。
- NodeのCPUやメモリが不足している
- PersistentVolumeが確保できていない
- Podの配置条件を満たすNodeが存在しない
- スケジューリングに問題が発生している
特にEventsに記録されたWarningを確認すると、原因を特定する手掛かりになります。
4. ImagePullBackOffの原因を調査する
kubectl describe pod nginx-7d8b49557c-abcde
ImagePullBackOffは、コンテナイメージを取得できず、Podの起動に失敗している状態です。
主な原因は以下のとおりです。
- イメージ名やタグが間違っている
- コンテナレジストリにイメージが存在しない
- 認証情報が正しく設定されていない
- レジストリに接続できない
describeで表示されるEventsの内容を確認して、原因を調査しましょう。
監視・状態確認で覚えておきたい便利なオプション
kubectlには、状態確認を効率化するための便利なオプションが用意されています。
| オプション | 説明 |
|---|---|
-A | すべてのNamespaceを対象にする |
-n | Namespaceを指定する |
-o wide | 詳細な情報を表示する |
-o yaml | YAML形式で表示する |
-o json | JSON形式で表示する |
-w | リソースの変更を監視する |
--watch | リソースの変更を監視する |
--sort-by | 指定した項目で並び替える |
--field-selector | 条件に一致するリソースを取得する |
--tail | ログの末尾から指定行数を取得する |
-f | ログをリアルタイムで表示する |
これらのオプションを組み合わせることで、必要な情報を効率よく確認できます。
Kubernetesの監視におすすめのツール
ここまで紹介したkubectlコマンドは、Kubernetesの状態を確認するときに便利です。
ただし、kubectlによる確認だけでは、長期間のリソース使用量の推移や、障害発生時の自動通知などには対応できません。
本格的な監視環境を構築したい場合は、以下のツールもおすすめです。
Prometheus
Prometheusは、システムのメトリクスを収集・保存する監視ツールです。
KubernetesのCPUやメモリ、Podの稼働状況などを収集し、一定の条件を満たした場合にアラートを発生させることもできます。
Grafana
Grafanaは、収集したメトリクスなどをグラフやダッシュボードで可視化するツールです。
Prometheusと組み合わせることで、KubernetesのCPU・メモリ使用量や稼働状況を視覚的に確認できます。
まとめ
本記事では、Kubernetesの監視・状態確認に便利なkubectlコマンドを紹介しました。
特に覚えておきたいコマンドは以下のとおりです。
| 確認したい内容 | コマンド |
|---|---|
| Podの状態 | kubectl get pods -A |
| Nodeの状態 | kubectl get nodes |
| Podの詳細情報 | kubectl describe pod |
| CPU・メモリ使用量 | kubectl top pods |
| Nodeのリソース使用量 | kubectl top nodes |
| アプリケーションのログ | kubectl logs |
| 再起動前のログ | kubectl logs --previous |
| イベント情報 | kubectl get events -A |
| Deploymentの状態 | kubectl get deployments |
| Podのリアルタイム監視 | kubectl get pods -w |
Kubernetesでは、PodやNodeの状態、CPU・メモリの使用量、ログ、イベントなどを確認することで、障害の早期発見や原因調査に役立てることができます。
今回紹介したコマンドは、日常的なKubernetesの運用やトラブルシューティングでも使用できるため、ぜひ活用してみてください。
