클라우드/Kubernetes

쿠버네티스 ) Jsonpath / CLI로 정보출력하기

Cloud_Park 2020. 6. 24. 13:55

kubectl을 사용하면서  Jsonpath로 정보를 가져오는 방법에 대해 논해보려고 합니다.

보통 kubectl을 사용하면 

리스트를 뽑을 때   

kubectl get [오브젝트 이름] 을 사용하여 리스트를 출력하고   자세한 출력을 위해 

kubectl get [오브젝트 이름] -o wide  와 같이  사용하게 됩니다.

 

특정 네임스페이스에  파드를 출력은 

kubectl get po -n [네임스페이스] 를 사용하며  해당 파드 또는 오브젝트의  yaml, json 형식으로 보고 싶다면 

kubectl get [object_name] -o [ yaml/json ] 을 이용해보세요.

간단하게 출력하는것을 알아보았는데 json의 정보를 출력을 하면 복잡하게 나와 가독성이 부족하게 됩니다.

 

이번에 jsonpath를 사용하여  필요한 정보만 출력해보겠습니다.

 먼저  jsonpath는 "{ }"괄호로 감싸져야하고 특정 필드를 필터링하고 출력 포맷합니다.

식 내의 텍스트를 인용하려면  "쌍따움표를 사용 해야하고  range,end를 사용하여   반복할 수 있습니다.

 

 

예제 템플릿 (출처: https://kubernetes.io/docs/reference/kubectl/jsonpath/)

{
  "kind": "List",
  "items":[
    {
      "kind":"None",
      "metadata":{"name":"127.0.0.1"},
      "status":{
        "capacity":{"cpu":"4"},
        "addresses":[{"type": "LegacyHostIP", "address":"127.0.0.1"}]
      }
    },
    {
      "kind":"None",
      "metadata":{"name":"127.0.0.2"},
      "status":{
        "capacity":{"cpu":"8"},
        "addresses":[
          {"type": "LegacyHostIP", "address":"127.0.0.2"},
          {"type": "another", "address":"127.0.0.3"}
        ]
      }
    }
  ],
  "users":[
    {
      "name": "myself",
      "user": {}
    },
    {
      "name": "e2e",
      "user": {"username": "admin", "password": "secret"}
    }
  ]
}

 

기능 설명 결과
test 해당글 출력 "Text  {.kind}" test List
@ 현재 오브젝트 {@} 같은 값 입력
.  또는 [] 자식 키 [.kind], {['kind']}  or {['name|.type']} List
.. 해당이름 벨류 출력 {..name} [127.0.0.1 127.0.0.2] myself e2e
* 모든 정보 출력 {.items[*].matadata.name} [127.0.0.1 127.0.0.2]
[start:end:step] subscript operator {.users[0].name} myself
[ , ] 2개 이상 출력 {.items[*]['metadata.name', 'status.capacity']} 127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]
?() 필터 {.users[?(@.name=="e2e")].user.password} secret
range, end 리스트 반복 {range .items[*]}[{.metadata.name}, {.status.capacity}] {end} [127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]
'' 글자 출력 {range .items[*]}{.metadata.name}{'\t'}{end} 127.0.0.1 127.0.0.2

 

아래를  응용하여 사용하세요. 

안 되는 부분이 있으면 댓글 달아주시면  고민해보겠습니다

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}'