본문 바로가기

Container/Kubernetes

[K8S] Kubectl - jsonpath

Json Path 

  • '$' 은 expression이 default로 root object로부터 시작하기 때문에 선택사항이다.
  • 결과값은 String() function으로 반환된다.
  • JSONPath expressions 안에서 text를 인용하려면 " " 를 사용한다.

 

  • Node list 추출

.items[*].metadata.name

 

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

 

$ 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}'
반응형

'Container > Kubernetes' 카테고리의 다른 글

[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
[K8S] Security Context  (0) 2025.02.03
[K8S] Image Security  (0) 2025.02.03