はじめに
kubectlコマンドのオプションにて-o custom-columns=HOGE:...
で任意の列を出力することが可能です。
本記事ではjqコマンドと比較しながらcustom-columnsを利用して特定の値を抜き出してみます。
環境情報
- kubectl v1.15.5
想定環境
$ kubectl get pod NAME READY STATUS RESTARTS AGE busybox 0/1 Completed 0 XX nginx-554b9c67f9-vr294 1/1 Running 0 XX
事前準備
以下コマンドで全ての情報が表示されます。
$ kubectl get pod busybox -o=json
例えばspec.containersあたりを抜き出せば以下のようになっているので
"spec": { "containers": [ { "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "busybox", "resources": {}, "stdin": true, "stdinOnce": true, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "tty": true, "volumeMounts": [ { "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "name": "default-token-6jdsx", "readOnly": true } ] } ],
以下のようにjqコマンドで抜き出せば指定した値が確認できます。
$ kubectl get pod busybox -o=json | jq .spec.containers[0].image "busybox"
ちなみにimageは複数持つことができるので[0]
で要素を指定しています。そこを実施しないと以下のようになり値が返ってきません。
$ kubectl get pod busybox -o=json | jq .spec.containers.image assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.6-1.x86_64/src/jq-1.6/src/util.c", line 371, function: jq_util_input_get_position
custom-columnsを利用する
jqコマンドで当たりをつけることができれば構文に従って該当情報を取得できます。
$ kubectl get pod busybox -o custom-columns=IMAGE[0]:spec.containers[0].image IMAGE[0] busybox
全てのPodを一気に確認することも可能で
$ kubectl get pod -o custom-columns=IMAGE[0]:spec.containers[0].image IMAGE[0] busybox nginx
カンマ区切りで値を追加することも可能です。
$ kubectl get pod -o custom-columns=IMAGE[0]:spec.containers[0].image,PODIP:status.podIP IMAGE[0] PODIP busybox 10.1.2.85 nginx 10.1.2.214
終わりに
jqコマンドでもitems[0]やitems[1]と数字を変えることで複数の情報を取得できますが、kubectlのオプションで一気に情報を出力する際は便利です。
以上、ご参考になれば幸いです。