DevOps/k8s

[K8s] JSONPATH 활용하여 원하는 데이터 확인하기

Sophie소피 2023. 11. 16. 14:09

JSONPath란?

JSONPath는 JSON 데이터 구조 내에서 원하는 데이터를 식별하기 위한 경로 표현 방법입니다.

주로 Kubernetes나 다양한 API 응답에서 원하는 데이터를 추출하거나 쿼리하는 데 사용됩니다.

JSONPath 패턴

  1. $.store.book[0].title
    • JSON 데이터 구조에서 store 객체 안의 book 배열의 첫 번째 요소의 title 값에 대한 경로
  2. $..author
    • 모든 author 키에 해당하는 값 반환
  3. $.store.*
    • store 객체 안의 모든 키와 값 반환
  4. $.store..price
    • store 객체 내부의 모든 price 키에 해당하는 값 반환
  5. $.store.book[?(@.price < 10)] :
    • **price**가 10 미만인 책에 해당하는 값들을 반환합니다.

이를 통해 JSON 데이터를 쉽게 쿼리하고 원하는 데이터를 추출할 수 있습니다.

kubectl 명령어와 jsonpath를 이용하여 보고싶은 쿠버네티스 데이터 확인하기

각 노드의 이름과 노드의 CPU 수 출력

controlplane ~ ➜  kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"\\t"}{.status.capacity.cpu}{"\\n"}{end}'

 

 

서비스 이름과 해당 서비스의 노출된 포트 출력

controlplane ~ ➜  kubectl get services -o=jsonpath='{range .items[*]}{"Service Name: "}{.metadata.name}{"\\t"}{"Ports: "}{range .spec.ports[*]}{.port}{" "}{end}{"\\n"}{end}'

 

 

서비스 이름과 해당 서비스의 클러스터 IP 출력

controlplane ~ ➜  kubectl get services -o=jsonpath='{range .items[*]}{"Service Name: "}{.metadata.name}{"\\t"}{"Cluster IP: "}{.spec.clusterIP}{"\\n"}{end}'

 

 

모든 네임스페이스의 이름과 해당 네임스페이스의 상태 출력

controlplane ~ ➜  kubectl get namespaces -o=jsonpath='{range .items[*]}{"Namespace Name: "}{.metadata.name}{"\\t"}{"Phase: "}{.status.phase}{"\\n"}{end}'