1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

kubectl getを定期実行する方法

Last updated at Posted at 2022-01-17

はじめに

kubectl get コマンドでリソースの情報取得を定期実行する3つの方法をまとめました。

  1. kubectlコマンドの --watch オプションを利用する方法
  2. watchコマンド を利用する方法
  3. シェルのループ を利用する方法

方法

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環境であれば追加インストール無しで利用できるので覚えておくと便利です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?