Kubernetes

JSONPath

사실 나도 모름 2024. 12. 16. 01:46

https://kubernetes.io/ko/docs/reference/kubectl/jsonpath/

 

JSONPath 지원

Kubectl은 JSONPath 템플릿을 지원한다. JSONPath 템플릿은 중괄호 {}로 둘러싸인 JSONPath 표현식으로 구성된다. Kubectl은 JSONPath 표현식을 사용하여 JSON 오브젝트의 특정 필드를 필터링하고 출력 형식을

kubernetes.io

 

JSON

속성-값, 키-값, 배열 자료형, 시리얼화(직렬화) 가능한 값으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트 기반으로 이루어진 표준 포맷이다.

 

 

JSONPath

JSON에서 값을 쿼리하기 위한 쿼리 언어. Kubernetes에서 JSONPath를 사용할 수 있도록 지원한다.

 

 

사용 예시

Kubernetes에서 JSONPath를 활용하여 가지고 오는 예시를 확인한다.

아래는 JSON파일의 내용

{
  "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"}
    }
  ]
}

 

 

아래는 JSONPath의 활용

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

 

 

JSONPath 활용

$ (루트 노드)

최상위레벨의 객체를 가리킴.

위 JSON파일을 기준으로 사용하게 된다면 다음과 같이 사용

$.kind
$.items
$.users

 

. (멤버 접근)

객체의 하위로 내려가 멤버에 접근함.

$.items.kind
$.users.name
$.users.user

 

[] (배열 인덱스 및 필드 필터링)

배열 또는 객체의 특정 요소를 선택.

$.items[0].kind
$.users[0].name

 

* (와일드카드)

객체 하위 대상 레벨에 포함되는 모든 필드 및 배열 요소를 선택.

$.items[0].*	#items 첫번째 배열 하위 모든 필드를 선택 kind, metadata, status
$.users[0].*	#users 첫번째 배열 하위 모든 필드를 선택 name, user

 

@ (현재 노드)

현재 위치에 노드를 참조하여 배열 혹은 필드를 지정할 때 사용

 

[?()] (조건 지정 필터링 연산자)

() 내에 논리연산식을 입력하여 연산과 일치하는 배열 혹은 필드 선택

$.items[?(@.status.capacity.cpu >= 8)]	# cpu기 8이상인 배열 선택

 

.. (재귀 검색)

특정 필드의 이름을 재귀적으로 검색

$..kind		# JSON 내 모든 kind 필드 검색

 

그외 다양한 문법

1. $.items['kind','status'] : 복수 필드 선택

2. length : 배열의 길이 반환

3. [start:end:step] : 배열 슬라이싱(범위 선택)

4. exists : 존재를 확인(?()의 내부에 <, ==, !=, > 등별다른 연산자를 지정하지 않으면 해당 필드의 존재를 확인)

5. substring() : 문자열의 특정 부분을 추출

'Kubernetes' 카테고리의 다른 글

Kubernetes - ETCD backup and restore  (0) 2024.03.04
Kubernetes - Network Policy  (0) 2024.03.04
Kubernetes - Metrics Server, PodAutoScaling  (0) 2024.02.03
Kubernetes 기초 - Helm(3)  (0) 2024.01.30
Kubernetes 기초 - Helm(2)  (0) 2024.01.27