Kubernetes Docs - kubernetes.io/ko/docs/reference/kubectl/overview/#custom-columns
kubectl command를 통해 필요한 정보를 출력할 수 있지만 한정적인 정보밖에 받지 못한다. 가장 많이 사용하는 get pod 명령어는 다음과 같이 출력된다.
root@c2:~# kubectl get pods -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-cmv8g 3/3 Running 0 7d23h
csi-cephfsplugin-l25cp 3/3 Running 3 7d23h
csi-cephfsplugin-provisioner-77b469f54f-7n4tm 4/4 Running 11 7d23h
csi-cephfsplugin-provisioner-77b469f54f-cfw48 4/4 Running 2 7d23h
csi-cephfsplugin-szhnl 3/3 Running 0 7d23h
csi-rbdplugin-c2mb4 3/3 Running 3 7d23h
csi-rbdplugin-ddgmr 3/3 Running 0 7d23h
csi-rbdplugin-hpm2j 3/3 Running 0 7d23h
csi-rbdplugin-provisioner-7b4b86d5b7-7zqw5 5/5 Running 1 45h
csi-rbdplugin-provisioner-7b4b86d5b7-qtdrz 5/5 Running 9 7d23h
rook-ceph-mds-myfs-a-7ff4c54657-j64gq 1/1 Running 0 7d23h
rook-ceph-mds-myfs-b-954df59cf-k7pr7 1/1 Running 0 7d23h
rook-ceph-mgr-a-76fc7667-bkhwv 1/1 Running 1 7d23h
rook-ceph-mon-b-6f4c5bd668-fqlhw 1/1 Running 0 7d23h
rook-ceph-mon-c-65b594b4f-btmft 1/1 Running 0 44h
rook-ceph-mon-d-566c85cff-qthsd 1/1 Running 0 7d23h
rook-ceph-operator-858ff7497d-z7d5c 1/1 Running 8 7d23h
rook-ceph-osd-0-7cc4dfb46d-w8gr9 1/1 Running 0 7d23h
rook-ceph-osd-1-7bf7b9769c-lzcjt 1/1 Running 3 44h
rook-ceph-osd-2-669c474586-sblk6 1/1 Running 2 7d23h
rook-ceph-osd-prepare-c1-5-xfccl 0/1 Completed 0 44h
rook-ceph-osd-prepare-c1-8-5j5h7 0/1 Completed 0 44h
rook-ceph-tools-776f7b4dbd-tvz99 1/1 Running 0 7d23h
rook-discover-86vc6 1/1 Running 0 49m
rook-discover-9nxc2 1/1 Running 0 8m27s
rook-discover-ljr56 1/1 Running 0 4h5m
이 정도 정보만으로도 할 수 있는 일이 많지만 다른 정보를 알고 싶을 때가 있다. 그 때마다 Pod를 일일히 조회하거나 정보를 찾아 떠나는 것은 비효율적이다.
custom-columns 옵션을 통해 사용자 정의 열을 정의하고 원하는 세부 정보만 출력이 가능하다. 미리 정의해 둔 설정 파일을 통해서도 가능하다.
#인라인
kubectl get pods [pod-name] -o custom-columns=[option]
#템플릿
kubectl get pods [pod-name] -o custom-columns-file=[template]
한 예로 pod의 uuid를 조회해야 하는 경우를 생각해보자. 나는 여태 멍청하게 이렇게 했다.
root@c2:~# kubectl get pods -n rook-ceph -o yaml | grep uid
uid: ee8acbdd-2434-4af5-b4d8-de248d912fc8
uid: 2e60a0cb-85d3-4a87-9885-72939680bc91
uid: ee8acbdd-2434-4af5-b4d8-de248d912fc8
uid: c395165f-3ec4-4f22-96ec-b14c9b3405bc
uid: 64544a98-7851-4475-92a5-57f243408f6e
uid: e0c0a306-a9ca-45a7-a67e-e6d122882ac8
uid: 64544a98-7851-4475-92a5-57f243408f6e
uid: 48ab070f-36a0-4f7e-bf59-b0ce2a98d812
uid: ee8acbdd-2434-4af5-b4d8-de248d912fc8
uid: 0d54e2d6-57ca-4b8a-95ef-f8d7997dc739
uid: 58879479-f720-42c6-8527-3e8be033ecb7
이 방식의 문제점은 주어를 찾을 수 없다는 점이다. 결국 다시 조회해야한다. 하지만 이렇게 하면!
root@c2:~# kubectl get pods -n rook-ceph -o custom-columns=PodName:.metadata.name,PodUID:.metadata.uid
PodName PodUID
csi-cephfsplugin-cmv8g 2e60a0cb-85d3-4a87-9885-72939680bc91
csi-cephfsplugin-l25cp c395165f-3ec4-4f22-96ec-b14c9b3405bc
csi-cephfsplugin-provisioner-77b469f54f-7n4tm e0c0a306-a9ca-45a7-a67e-e6d122882ac8
csi-cephfsplugin-provisioner-77b469f54f-cfw48 48ab070f-36a0-4f7e-bf59-b0ce2a98d812
csi-cephfsplugin-szhnl 0d54e2d6-57ca-4b8a-95ef-f8d7997dc739
csi-rbdplugin-c2mb4 ddcae271-819b-4097-8697-73e36c78f8f1
csi-rbdplugin-ddgmr 8b8cdf34-6cb3-499b-98b1-22da1236eb12
csi-rbdplugin-hpm2j 90f3ae43-84bf-44e3-ad47-563d636e178d
csi-rbdplugin-provisioner-7b4b86d5b7-7zqw5 b62614de-3a12-47ac-97cf-ffe97a525674
csi-rbdplugin-provisioner-7b4b86d5b7-qtdrz 5735868f-797a-4a30-9f6a-1d4e76aac737
rook-ceph-mds-myfs-a-7ff4c54657-j64gq 16e31ff6-0d3a-4ffc-a61a-eb31e339dbfc
rook-ceph-mds-myfs-b-954df59cf-k7pr7 4a060f3a-e740-4d54-94f9-a3d245ad02ec
rook-ceph-mgr-a-76fc7667-bkhwv 987fd95a-4bb9-475b-b47f-8379286f3cc3
rook-ceph-mon-b-6f4c5bd668-fqlhw d6803666-db14-4c72-99b9-0eeb1874eb4b
rook-ceph-mon-c-65b594b4f-btmft 84439c00-e661-4f9d-adbb-13f43879e142
rook-ceph-mon-d-566c85cff-qthsd eb63c24e-16bc-437a-afac-66c0aad948e7
rook-ceph-operator-858ff7497d-z7d5c ac2d4afd-86f2-4443-b5ca-b340254b2a5b
rook-ceph-osd-0-7cc4dfb46d-w8gr9 633d835c-6f88-46ee-8d9d-af497c538e05
rook-ceph-osd-1-7bf7b9769c-lzcjt bd2ed8a0-52e8-48e6-b69d-d8d1cb3258e2
rook-ceph-osd-2-669c474586-sblk6 3a44e056-ea60-4caf-b5a7-b3f6a2e636a6
rook-ceph-osd-prepare-c1-5-xfccl 56a59260-c97d-46db-8810-a6faa995ba2b
rook-ceph-osd-prepare-c1-8-5j5h7 24611218-5fa1-43ae-90ed-15a8243faf46
rook-ceph-tools-776f7b4dbd-tvz99 6dd2a587-89eb-4c2c-8531-a85a8a34fba5
rook-discover-86vc6 f739a4d8-f9e4-4d5d-9f22-c11f4d172e70
rook-discover-9nxc2 7b336c1e-0287-489a-9382-71ae1b75fa0b
rook-discover-ljr56 3cf623f4-eb34-412b-94a2-f535b59e0e17
너무 깔끔하게 Pod마다의 uid를 출력해준다. custom-columns 의 옵션을 보면 column-name:json-path 형식을 따르고 있는 것을 알 수 있다. 그럼 저 json-path를 어떻게 찾는지 (모르는 사람은 없겠지만) 나를 위해 찾아보자면 이렇다.
root@c2:~# kubectl get pods -n rook-ceph rook-discover-86vc6 -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/podIP: 10.244.190.32/32
cni.projectcalico.org/podIPs: 10.244.190.32/32
creationTimestamp: "2020-07-22T05:05:59Z"
generateName: rook-discover-
labels:
app: rook-discover
controller-revision-hash: 6f94b6b67c
pod-template-generation: "1"
정말 엔지니어에게 적합하지 않은 티스토리... 내가 개멍청하게 쓰는걸수도 있지만 아무튼 들여쓰기를 따라서 조건에 넣으면 된다. pod name, label, image를 뽑아본다고 생각해보자.
root@c1-2:~# kubectl get pods -n metallb-system -o custom-columns=PodName:.metadata.name,PodLabel:.metadata.labels,PodImage:.spec.containers[0].image
PodName PodLabel PodImage
controller-547d466688-7496t map[app:metallb component:controller pod-template-hash:547d466688] metallb/controller:v0.7.3
speaker-hnwgt map[app:metallb component:speaker controller-revision-hash:bf8c4976f pod-template-generation:1] metallb/speaker:v0.7.3
speaker-wlrpz map[app:metallb component:speaker controller-revision-hash:bf8c4976f pod-template-generation:1] metallb/speaker:v0.7.3
speaker-xqtlp map[app:metallb component:speaker controller-revision-hash:bf8c4976f pod-template-generation:1] metallb/speaker:v0.7.3
여러 개의 라벨을 가지고 있어 map 형식으로 가져오는 것을 볼 수 있다. image의 경우 pod 하위의 container에서 선택하여 가져올 수 있다.
이렇게 custom-columns 옵션의 경우 설정 따라 원하는 방식의 조회가 가능하기 때문에 편하게 사용이 가능하다.
- 사용을 위해 추가
1) vm PVC 조회
kubectl get vm -A -o custom-columns=VmName:.metadata.name,VmStatus:.spec.running,VmPvc:.spec.template.spec.volumes[*].persistentVolumeClaim.claimName |
root@c2:~/hs/fail-vm# kubectl get vm -A -o custom-columns=VmNs:.metadata.namespace,VmName:.metadata.name,VmStatus:.spec.running,VmPvc:.spec.template.spec.volumes[1].persistentVolumeClaim.claimName
VmNs VmNam VmStatus VmPvc
5aef865b 47e1d900 false 47e1d900
5aef865b 54d14b04 true 54d14b04
5aef865b 54e2c203 true 54e2c203
72f8435d 725a3b63 true 725a3b63
72f8435d 72674e64 true 72674e64
72f8435d 72990e5e true 72990e5e
72f8435d 72f1065f true 72f1065f
'Cloud > Kubernetes' 카테고리의 다른 글
Ceph Repair 해보기 (0) | 2020.07.28 |
---|---|
Kubernetes Prometheus PVC 붙이기 (0) | 2020.07.27 |
NodePort 통신할 때 TCP-DUMP 분석 (0) | 2020.07.21 |
까먹기전에 하는 단어 정리 (0) | 2020.07.21 |
kubernetes resource가 terminating 상태에서 변하지 않을 때 (0) | 2020.07.21 |