https://kubernetes.io/ko/docs/reference/kubectl/jsonpath/
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 |