はじめに
kubectl get コマンドでリソースの情報取得を定期実行する3つの方法をまとめました。
- kubectlコマンドの --watch オプションを利用する方法
- watchコマンド を利用する方法
- シェルのループ を利用する方法
方法
1. kubectlコマンドの --watch オプションを利用する
確認した kubectl のバージョンは v1.22.4 です。
1-1. 定期実行の開始
kubectlコマンドに --watch オプションを付与して実行します。
% kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 63s
-o wide にも対応しています。
% kubectl get pods -o wide --watch
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod 1/1 Running 0 5m11s 10.244.1.26 kindcluster-worker2 <none> <none>
--watchオプションを指定できるリソースの種類は1種類のみで、複数指定しようとすると以下の通りエラーが表示されてしまいます。allに対しても利用できません。
# 複数リソースを指定
% kubectl get pods,services --watch
error: you may only specify a single resource type
# allを指定
% kubectl get all --watch
error: you may only specify a single resource type
複数リソースの監視を行いたい場合は watchコマンド か シェルのループ を利用します。
--watchオプションは --output-watch-events オプションを併用し、変更イベントを合わせて表示することができます。
% kubectl get pods --watch --output-watch-events
EVENT NAME READY STATUS RESTARTS AGE
ADDED sample-pod 1/1 Running 0 28m
MODIFIED sample-pod 1/1 Terminating 0 29m #裏でkubectl delete podを実行
MODIFIED sample-pod 0/1 Terminating 0 29m
MODIFIED sample-pod 0/1 Terminating 0 29m
DELETED sample-pod 0/1 Terminating 0 29m
1-2. 終了
--watchオプションの実行を終了する場合は 「Ctrl」+「C」 を入力します。
2. watchコマンドを利用する
Unix/Linux、Mac環境で利用可能なwatchコマンドを利用する方法です。
環境によってはwatchコマンドがインストールされていない場合もありますので必要に応じてインストールを行います。
watchコマンドの使い方は以下の記事がわかりやすいです。
2-1. 定期実行の開始
# 構文
% watch <コマンド>
# kubectl get all -o wide を定期実行
% watch kubectl get all -o wide
watchコマンドを実行すると定期的に実行結果がリフレッシュされます。
Every 2.0s: kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/sample-pod 1/1 Running 0 14m 10.244.1.26 kindcluster-worker2 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h <none>
watchコマンドの規定の間隔は 2秒 ですが、任意の時間に変更することも可能です。
2-2. 終了
watchコマンドを終了する場合は 「Ctrl」+「C」 を入力します。
3. シェルのループを利用する
while文の条件に true を指定することで実行を繰り返すことができます。
3-1. 定期実行の開始
# 構文
% while true; do <コマンド>; sleep <実行間隔[秒]>; done
# kubectl get pods を 1秒間隔 で実行
% while true; do kubectl get pods; sleep 1; done
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 7s
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 8s
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 9s
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 10s
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 11s
必ず sleep 秒数 で実行間隔を指定してください。
指定しないとCPUの限り高速で実行を繰り返してしまいます。
画面をリフレッシュさせたい場合はclearを追加します。
# 構文
% while true; do <コマンド>; sleep <実行間隔[秒]>; clear; done
3-2. 終了
whileを終了する場合は 「Ctrl」+「C」 を入力します。
おわりに
watchコマンドが利用できる場合はwatchコマンドの利用がおすすめです。
シェルのループ(while true)はUnix/Linux環境であれば追加インストール無しで利用できるので覚えておくと便利です。