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でフィルター
別記事を作成しました