관리 메뉴

피터의 개발이야기

[kubernetes] JSONPath 사용법 본문

Kubernetes/CKA&CKAD

[kubernetes] JSONPath 사용법

기록하는 백앤드개발자 2024. 1. 27. 20:22
반응형

[kubernetes] 쿠버네티스 관련 글 목차

 

ㅁ 들어가는 말

 ㅇ kubernetes의 오브젝트들을 조회하고 그 결과를 JSON 형태로 받을 수 있다.

 ㅇ JSONPath를 이용하여 원하는 결과물로 가공할 수 있다.

 ㅇ kubernetes 자격 시험은 CKA를 공부하면서 사용법을 남겨보았다.

ㅁ 관련 글

kube doc - JSONPath 지원

[shell] JSON 깔끔히 볼 수 있는 jq 명령어

 

ㅁ  JSONPath 표현식

# 기본 json 출력
$ kubectl get nodes -o json

# json 최상위 객체
$  kubectl get pods -o=jsonpath='{@}'
{"apiVersion":"v1","items":[],"kind":"List","metadata":{"resourceVersion":""}}

# list의 첫번째
$ kubectl get pods -o=jsonpath='{.items[0]}'
{"apiVersion":"v1","kind":"Pod", ...... "startTime":"2024-01-27T11:32:44Z"}}

# name만 추출
$ kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
nginx

# name과 namespace 추출
$ kubectl get pods -o=jsonpath="{.items[*]['metadata.name', 'metadata.namespace']}"
nginx default


# 출력 데이터 리폼: 탭키 추가
$ kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
nginx   2024-01-27T11:32:44Z

 

ㅁ JSON PATH query

$ kubectl config view --kubeconfig=my-kube-config -o jsonpath="{.contexts[?(@.context.user=='aws-user')].name}"
aws-user@kubernetes-on-aws

 

ㅁ node의 osImage 정보가져오기

# 개괄적 object 찾기 - jq
$ k get no -o json | jq .items[0].status.nodeInfo
{
  "architecture": "amd64",
  "bootID": "87af5391-da30-41b3-864a-54bf31866700",
  "containerRuntimeVersion": "containerd://1.6.6",
  "kernelVersion": "5.4.0-1106-gcp",
  "kubeProxyVersion": "v1.27.0",
  "kubeletVersion": "v1.27.0",
  "machineID": "73d7539cb95c4ef09a8ddd274b5251bc",
  "operatingSystem": "linux",
  "osImage": "Ubuntu 20.04.6 LTS",
  "systemUUID": "bfd9a690-6d7f-6100-518e-d1a252898ed3"
}

# jq는 array 형태를 가져오기 어렵다. '*'가 안먹음.
$ k get no -o json | jq .items[0].status.nodeInfo.osImage
"Ubuntu 20.04.6 LTS"

#JSONPATH
$ kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.osImage}' 
Ubuntu 20.04.6 LTS Ubuntu 20.04.5 LTS

 

ㅁ kubeconfig(yaml) to users.name 추출

$ k config view --kubeconfig /root/my-kube-config -o=jsonpath='{.users[*].name}'
aws-user dev-user test-user

 

ㅁ Sort by

 ㅇ pv 정보 중에서 storage 용량에 따가 정렬할 수 있다.

$ kubectl get pv --sort-by=.spec.capacity.storage
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-log-4   40Mi       RWX            Retain           Available                                   33m
pv-log-1   100Mi      RWX            Retain           Available                                   33m
pv-log-2   200Mi      RWX            Retain           Available                                   33m
pv-log-3   300Mi      RWX            Retain           Available                                   33m

 

ㅁ Sort by, custom-columns

$ 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

 

ㅁ 시험 샘플들

$ kubectl get nodes -o json > /opt/outputs/nodes.json

$ kubectl get node node01 -o json > /opt/outputs/node01.json

$ kubectl get nodes -o=jsonpath='{.items[*].metadata.name}' > /opt/outputs/node_names.txt

$ kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.osImage}' > /opt/outputs/nodes_os.txt

$ kubectl config view --kubeconfig=my-kube-config  -o jsonpath="{.users[*].name}" > /opt/outputs/users.txt

$ kubectl get pv --sort-by=.spec.capacity.storage > /opt/outputs/storage-capacity-sorted.txt

$ kubectl get pv --sort-by=.spec.capacity.storage -o=custom-columns=NAME:.metadata.name,CAPACITY:.spec.capacity.storage > /opt/outputs/pv-and-capacity-sorted.txt

$ kubectl config view --kubeconfig=my-kube-config -o jsonpath="{.contexts[?(@.context.user=='aws-user')].name}" > /opt/outputs/aws-context-name
반응형
Comments