grepやawkが便利なのでそれ使うのもいいけど…
確認した環境はOpenShift 3.11(OKD)上で、kubectl使用。ocでも動きは同じ。
custom-columnsを使った例はこちら
ラベル
ラベルはKubernetesリソースに付与された分類情報。
指定することで出力時にフィルタできる。
詳しくはラベル(Labels)とセレクター(Selectors) - Kubernetes
ラベル一覧を表示する
--show-labelsを付与する。
[zaki@okd-master ~]$ kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS javaee-memoapp2-1-build 0/1 Completed 0 17h openshift.io/build.name=javaee-memoapp2-1 javaee-memoapp2-1-nwg62 1/1 Running 0 12m app=javaee-memoapp2,deployment=javaee-memoapp2-1,deploymentconfig=javaee-memoapp2 javaee-memoapp2-1-w9cwt 1/1 Running 0 17h app=javaee-memoapp2,deployment=javaee-memoapp2-1,deploymentconfig=javaee-memoapp2 memoapp-db-1-5ssgg 1/1 Running 0 17h app=mysql-ephemeral,deployment=memoapp-db-1,deploymentconfig=memoapp-db,name=memoapp-db
app=javaee-memoapp2やapp=mysql-ephemeralなどのラベルが付与されているのが確認できる。
podの設定としてはこのmetadataの部分
[zaki@okd-master ~]$ kubectl get pod memoapp-db-1-5ssgg -o yaml apiVersion: v1 kind: Pod metadata: annotations: openshift.io/deployment-config.latest-version: "1" openshift.io/deployment-config.name: memoapp-db openshift.io/deployment.name: memoapp-db-1 openshift.io/generated-by: OpenShiftNewApp openshift.io/scc: restricted creationTimestamp: 2019-12-29T06:47:39Z generateName: memoapp-db-1- labels: app: mysql-ephemeral deployment: memoapp-db-1 deploymentconfig: memoapp-db name: memoapp-db name: memoapp-db-1-5ssgg : :
指定ラベルを出力カラムの一つとして表示する
-Lでラベルのキー名を指定する。複数可。
[zaki@okd-master ~]$ kubectl get pod -L app,deployment NAME READY STATUS RESTARTS AGE APP DEPLOYMENT javaee-memoapp2-1-build 0/1 Completed 0 17h javaee-memoapp2-1-nwg62 1/1 Running 0 13m javaee-memoapp2 javaee-memoapp2-1 javaee-memoapp2-1-w9cwt 1/1 Running 0 17h javaee-memoapp2 javaee-memoapp2-1 memoapp-db-1-5ssgg 1/1 Running 0 17h mysql-ephemeral memoapp-db-1
指定ラベルを持つリソース(今回はpod)のみ表示する
-lでキー=値を指定する。複数可。
[zaki@okd-master ~]$ kubectl get pod -l app=javaee-memoapp2 NAME READY STATUS RESTARTS AGE javaee-memoapp2-1-nwg62 1/1 Running 0 13m javaee-memoapp2-1-w9cwt 1/1 Running 0 17h
jsonpath
-o yamlで全量を出力するかわりに、JSON形式のパス情報を指定することで特定項目のみを出力できる。
kubectl get ***の整形でなく、-o jsonの中から任意のものをピックアップできるので自由度が高い。
(というよりは、kubectl getがRESTの応答から既定の値のみをピックアップ・表示してるだけという話なんだけど)
詳しくはJSONPath Support - Kubernetes
特定リソースの指定項目を表示
[zaki@okd-master ~]$ kubectl get pod javaee-memoapp2-1-nwg62 -o jsonpath='{.metadata.uid}{"\n"}'
c19df08a-2a95-11ea-89f0-000c29f44d7c
podのIPアドレスとデプロイしているノード名
[zaki@okd-master ~]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
javaee-memoapp2-1-build 0/1 Completed 0 17h 10.130.0.50 okd-node2.esxi.jp-z.jp <none>
javaee-memoapp2-1-nwg62 1/1 Running 0 57m 10.129.0.51 okd-node1.esxi.jp-z.jp <none>
javaee-memoapp2-1-w9cwt 1/1 Running 0 17h 10.130.0.51 okd-node2.esxi.jp-z.jp <none>
memoapp-db-1-5ssgg 1/1 Running 0 17h 10.130.0.49 okd-node2.esxi.jp-z.jp <none>
[zaki@okd-master ~]$
[zaki@okd-master ~]$ kubectl get pod javaee-memoapp2-1-nwg62 -o jsonpath='{.status.podIP}{"\t"}{.spec.nodeName}{"\n"}'
10.129.0.51 okd-node1.esxi.jp-z.jp
ラベルにヒットした全リソースの指定項目
[zaki@okd-master ~]$ kubectl get pod -l app=javaee-memoapp2 -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
javaee-memoapp2-1-nwg62
javaee-memoapp2-1-w9cwt
複数の項目
pod名と1つ目のコンテナのレジストリパスをtab区切りで。
[zaki@okd-master ~]$ kubectl get pod -l app=javaee-memoapp2 -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}'
javaee-memoapp2-1-nwg62 docker-registry.default.svc:5000/sampleapp/javaee-memoapp2@sha256:018f927757e9faade7432091c61772afa176e08b902ac6aae58d0e8fd766421f
javaee-memoapp2-1-w9cwt docker-registry.default.svc:5000/sampleapp/javaee-memoapp2@sha256:018f927757e9faade7432091c61772afa176e08b902ac6aae58d0e8fd766421f
コンテナ一覧
[zaki@okd-master ~]$ kubectl get pod -n openshift-monitoring prometheus-k8s-1 -o jsonpath='{.spec.containers[*].name}{"\n"}'
prometheus prometheus-config-reloader prometheus-proxy rules-configmap-reloader
rangeを使って改行付き
[zaki@okd-master ~]$ kubectl get pod -n openshift-monitoring prometheus-k8s-1 -o jsonpath='{range .spec.containers[*]}{.name}{"\n"}{end}'
prometheus
prometheus-config-reloader
prometheus-proxy
rules-configmap-reloader
jsonpathでフィルター
別記事を作成しました