Json Path
- '$' 은 expression이 default로 root object로부터 시작하기 때문에 선택사항이다.
- 결과값은 String() function으로 반환된다.
- JSONPath expressions 안에서 text를 인용하려면 " " 를 사용한다.
- Node list 추출
controlplane ~ ➜ kubectl get nodes -o=jsonpath='{.items[*].metadata.name}'
controlplane node01
$ kubectl get nodes -o=jsonpath='{.items[*].metadata.name}{"\n"}{.items[*].status.capacity.cpu}'
controlplane node01
16 16
- os version 추출 (osImage)
controlplane ~ ➜ kubectl get nodes -o=jsonpath='{.items[*].status.nodeInfo.osImage}'
Ubuntu 22.04.5 LTS Ubuntu 22.04.4 LTS
- config에서 user name 가져오기
controlplane ~ ➜ kubectl config view --kubeconfig=/root/my-kube-config
apiVersion: v1
clusters:
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: KUBE_ADDRESS
name: development
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: KUBE_ADDRESS
name: kubernetes-on-aws
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: KUBE_ADDRESS
name: production
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: KUBE_ADDRESS
name: test-cluster-1
contexts:
- context:
cluster: kubernetes-on-aws
user: aws-user
name: aws-user@kubernetes-on-aws
- context:
cluster: test-cluster-1
user: dev-user
name: research
- context:
cluster: development
user: test-user
name: test-user@development
- context:
cluster: production
user: test-user
name: test-user@production
current-context: test-user@development
kind: Config
preferences: {}
users:
- name: aws-user
user:
client-certificate: /etc/kubernetes/pki/users/aws-user/aws-user.crt
client-key: /etc/kubernetes/pki/users/aws-user/aws-user.key
- name: dev-user
user:
client-certificate: /etc/kubernetes/pki/users/dev-user/developer-user.crt
client-key: /etc/kubernetes/pki/users/dev-user/dev-user.key
- name: test-user
user:
client-certificate: /etc/kubernetes/pki/users/test-user/test-user.crt
client-key: /etc/kubernetes/pki/users/test-user/test-user.key
controlplane ~ ➜ kubectl config view --kubeconfig=/root/my-kube-config -o=jsonpath='{.users[*].name}'
aws-user dev-user test-user
controlplane ~ ➜ kubectl get pv --sort-by=.spec.capacity.storage
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pv-log-4 40Mi RWX Retain Available <unset> 38m
pv-log-1 100Mi RWX Retain Available <unset> 38m
pv-log-2 200Mi RWX Retain Available <unset> 38m
pv-log-3 300Mi RWX Retain Available <unset> 38m
- Loops - Range
$ kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name} {"\t"} {.status.capacity.cpu}{"\n"}{end}'
controlplane 16
node01 16
- Custom Columns
- -o=custom-columns=<COLUMN NAME>:<JSON PATH>
- -o=custom-columns=NODE:.metadata.name
$ kubectl get pv --sort-by=.spec.capacity.storage -o=custom-columns=NAME:.metadata.name,CAPACITY:.spec.capacity.storage
NAME CAPACITY
pv-log-4 40Mi
pv-log-1 100Mi
pv-log-2 200Mi
pv-log-3 300Mi
- Function
- ?() : filter
- @: Current object
$ kubectl config view --kubeconfig=my-kube-config -o jsonpath="{.contexts[?(@.context.user=='aws-user')].name}"
aws-user@kubernetes-on-aws
- 더 많은 예시 - 참고: https://kubernetes.io/docs/reference/kubectl/jsonpath/
$ kubectl get pods -o json
$ kubectl get pods -o=jsonpath='{@}'
$ kubectl get pods -o=jsonpath='{.items[0]}'
$ kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
$ kubectl get pods -o=jsonpath="{.items[*]['metadata.name', 'status.capacity']}"
$ kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
$ kubectl get pods -o=jsonpath='{.items[0].metadata.labels.kubernetes\.io/hostname}'
- 좀 json path를 더 쉽게 보려면 (InternalIP 추출 예시)
controlplane ~ ➜ kubectl get nodes -o json | jq | grep -i internalip
"type": "InternalIP"
"type": "InternalIP"
controlplane ~ ➜ kubectl get nodes -o json | jq | grep -i internalip -B 100
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"kind": "Node",
"metadata": {
"annotations": {
"flannel.alpha.coreos.com/backend-data": "{\"VNI\":1,\"VtepMAC\":\"86:f3:d1:c3:2b:c6\"}",
"flannel.alpha.coreos.com/backend-type": "vxlan",
"flannel.alpha.coreos.com/kube-subnet-manager": "true",
"flannel.alpha.coreos.com/public-ip": "192.168.233.130",
"kubeadm.alpha.kubernetes.io/cri-socket": "unix:///var/run/containerd/containerd.sock",
"node.alpha.kubernetes.io/ttl": "0",
"volumes.kubernetes.io/controller-managed-attach-detach": "true"
},
"creationTimestamp": "2025-02-15T04:33:54Z",
"labels": {
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/os": "linux",
"kubernetes.io/arch": "amd64",
"kubernetes.io/hostname": "controlplane",
"kubernetes.io/os": "linux",
"node-role.kubernetes.io/control-plane": "",
"node.kubernetes.io/exclude-from-external-load-balancers": ""
},
"name": "controlplane",
"resourceVersion": "3698",
"uid": "1ea71cea-ab9e-4701-bd37-dd2bb9e664c3"
},
"spec": {
"podCIDR": "172.17.0.0/24",
"podCIDRs": [
"172.17.0.0/24"
]
},
"status": {
"addresses": [
{
"address": "192.168.233.130",
"type": "InternalIP"
controlplane ~ ➜ kubectl get nodes -o json | jq -c 'paths' | grep type
["items",0,"metadata","annotations","flannel.alpha.coreos.com/backend-type"]
["items",0,"status","addresses",0,"type"]
["items",0,"status","addresses",1,"type"]
["items",0,"status","conditions",0,"type"]
["items",0,"status","conditions",1,"type"]
["items",0,"status","conditions",2,"type"]
["items",0,"status","conditions",3,"type"]
["items",0,"status","conditions",4,"type"]
["items",1,"metadata","annotations","flannel.alpha.coreos.com/backend-type"]
["items",1,"status","addresses",0,"type"]
["items",1,"status","addresses",1,"type"]
["items",1,"status","conditions",0,"type"]
["items",1,"status","conditions",1,"type"]
["items",1,"status","conditions",2,"type"]
["items",1,"status","conditions",3,"type"]
["items",1,"status","conditions",4,"type"]
# InternalIP 추출하기
controlplane ~ ➜ kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}'
192.168.233.130
controlplane ~ ➜ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.
type=="InternalIP")].address}'
192.168.233.130 192.168.139.46
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Helm (0) | 2025.02.20 |
---|---|
[K8S] Troubleshoot Network 예제 (0) | 2025.02.12 |
[K8S] Network & CNI (0) | 2025.02.06 |
[K8S] Deploy a Kubernetes Cluster using Kubeadm (0) | 2025.02.06 |
[K8S] Network Policy (0) | 2025.02.04 |