콤퓨우터/필기: KodeKloud CKA 강의

263. JSON Path

파란화면 2024. 5. 17. 00:55
반응형
{
  "asdf": "bsdf",
  "csdf": [
    {
      "dsdf": "esdf",
      "fsdf": "gsdf"
    }, 
    {
      "hsdf": "isdf",
      "jsdf": "ksdf"
    }
  ]
}

여기에서 "gsdf"를 추출하는 JSON Path: $.csdf[0].fsdf

Criteria

[1, 2, 10, 476, 388, 3287]
  • 에서 40 이상인 수만 추출하기: $[?(@ >= 40)]
    • $: root element. root element상의 list이므로 거기에 []
    • ?(): check if
    • @: each element
  • 에서 40, 476이 아닌 수만 추출하기: $[?( @ nin [40, 476])]

Wildcard

Lists

["Apple", "Google", "Coca-Cola", "Samsung", "Amazon"]
  • 에서 ["Apple", "Coca-Cola"] 출력하기: $[0, 2]
  • 에서 ["Apple", "Google", "Coca-Cola"] 출력하기: $[0:3]
    • 3이라는 데 주의
    • for(int i=0; i<3; i++) 같은 것
  • 에서 ["Apple", "Coca-Cola", "Amazon"] 출력하기: $[0:6:2]
    • 뒤의 2는 Step by 2 (2칸씩 뛰어넘기)
    • for(int i=0; i<6; i+=2) 같은 것
  • 에서 ["Amazon"] 출력하기: $[-1]
    • 일부 implementation에서는 $[-1:]으로 해야 작동하는 경우가 있음

Kubectl에서 사용하는 JSON Path

kubectl은 대량의 데이터를 탐색할 때 JSON Path를 사용할 수 있는 옵션을 제공한다.

  • 애초에 kubectl이 kube-apiserver에서 받아 오는 반환값 자체가 JSON 형식이다
  1. 사용할 kubectl 명령어 확보 (예를 들어 kubectl get pods)
  2. 해당 kubectl 명령어를 JSON으로 출력 (`kubectl get pods -o json)
  3. 필요한 정보를 뽑아낼 JSON Path 쿼리 작성
  4. kubectl에 JSON Path과 함께 명령 (`kubectl get pods -o=jsonpath='{.items[0].spec.containers[0].image})
  • 여러 JSON Path 쿼리를 함께 사용할 수 있다
    • kubectl get nodes -o=jsonpath='{.items[*].metadata.name}{items[*].status.capacity.cpu}'
      • master node01 4 4
  • {"\n"}이나 {"\t"} 등을 넣어 출력을 예쁘게 만들 수 있다
  • # kubectl get nodes -o=jsonpath='{.items[*].metadata.name}{"\n"}{items[*].status.capacity.cpu}'

master node01
4 4

  • --sort-by=.status.capcity.cpu 같이 JSON Path를 이용해 결과물을 소팅하는 것이 가능하다

심화: JSON Path와 Range 사용

(CKA 자격 수준에서는 필요한 내용은 아니다)

대충 이런 pseudocode를 생각해보자


foreach N in nodes {  
print (N.metadata.name + "\\t" + N.status.capaicty.cpu + "\\n";  
}  
/\* 출력결과:  
master 4  
node01 4  
\*/

이것은 kubectl의 JSON Path 표현으로는 이렇게 나타낼 수 있다


'{range .items\[\*\]}  
{.metadata.name}{"\\t"}{.status.capcity.cpu}{"\\n"}  
{end}'

심화: Custom Column 옵션

-o=custom-columns=NODE:.metadata.name,CPU:.status.capacity.cpu


NODE CPU  
master 4  
node01 4  
반응형

'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글

252-261. Troubleshooting  (0) 2024.05.17
241. etcd in HA  (0) 2024.05.17
230. Ingress  (0) 2024.05.17
226-227. DNS and CoreDNS in Kubernetes  (1) 2024.05.17
223. Service Networking  (0) 2024.05.17