공부/CKA

[CKA] kubectl JSON Path 사용법

작은소행성 2023. 5. 23. 18:22

JSON이란

JSON 데이터는 객체 {} ,배열 []  형태를 가진다.

 

 

쿠버네티스에서 필요한 정보만 걸러내어 확인할 수 있게 사용한다. 

kubectl get <리소스> -o json
kubectl get pods -o jsonpath='{표현식}'

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

 

 

문법 요소

문법
$  루트노드, JSON Path의 모든 표현식은 이것으로 시작
@ 현재노드
. 하위노드
.. 중첩된 전체 하위 요소들
[] 배열 인덱스
* 모든 요소와 매칭되는 와이들 카드
? (boolean expression) 조건부 필터 표현식

 

 

 

json path 연습문제

 

1. Get all pod names

$[*].metadata.name
[
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "web-pod-1",
      "namespace": "default"
    },
    "spec": {
      "containers": [
        {
          "image": "nginx:alpine",
          "name": "nginx"
        }
      ],
      "nodeName": "node01"
    }
  },
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "web-pod-2",
      "namespace": "default"
    },
    "spec": {
      "containers": [
        {
          "image": "nginx:alpine",
          "name": "nginx"
        }
      ],
      "nodeName": "node02"
    }
  },
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "web-pod-3",
      "namespace": "default"
    },
    "spec": {
      "containers": [
        {
          "image": "nginx:alpine",
          "name": "nginx"
        }
      ],
      "nodeName": "node01"
    }
  },
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "web-pod-4",
      "namespace": "default"
    },
    "spec": {
      "containers": [
        {
          "image": "nginx:alpine",
          "name": "nginx"
        }
      ],
      "nodeName": "node01"
    }
  },
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "db-pod-1",
      "namespace": "default"
    },
    "spec": {
      "containers": [
        {
          "image": "mysql",
          "name": "mysql"
        }
      ],
      "nodeName": "node01"
    }
  }
]
## 출력 결과
[
  "web-pod-1",
  "web-pod-2",
  "web-pod-3",
  "web-pod-4",
  "db-pod-1"
]

 

 

 

 

2. Get container details

$.spec.containers[0]
{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "nginx-pod",
    "namespace": "default"
  },
  "spec": {
    "containers": [
      {
        "image": "nginx:alpine",
        "name": "nginx"
      }
    ],
    "nodeName": "node01"
  }
}

 

## 출력 결과
[
  {
    "image": "nginx:alpine",
    "name": "nginx"
  }
]

 

 

 

 

 

반응형