Udemy CKA course 13. Other Topics: JSON Path

jihyelee·2024년 2월 14일
0

kubernetes

목록 보기
15/15

Certified Kubernetes Administrator (CKA) with Practice Tests (강의 링크, 레퍼런스 노트)

  • 평소 강의 할인도 많이 하고, 연습문제도 풀어볼 수 있으니 실제 강의 수강을 추천
  • 아래는 강의 내용 번역 및 정리본 (문제 시 댓글로 알려주세요)

JSON Path Test (선행학습)

Yaml

  • 데이터를 표현하는 방식 중 하나
  • 키: 값의 쌍으로 표현 가능
    • :와 값 사이 띄어쓰기 필요
    • 예시
      • Fruit: Apple
  • 배열 혹은 리스트 표현 가능
    • 리스트는 순서가 있는 구조
    • -로 요소 구분
    • 예시
      • Fruits:
      • -Orange
      • -Apple
  • 딕셔너리 혹은 맵 표현 가능
    • 딕셔너리는 순서가 없는 데이터 구조
    • 들여쓰기 공간에 따라 속성의 계층구조 결정됨
    • 예시
      • Banana:
        • Calories: 105
        • Fat: 0.4g

JSON Path

YAML vs JSON

  • 데이터 정리(organization) 방식
    • YAML: 띄어쓰기(indentation) 사용
    • JSON: 괄호({}) 사용
  • 들여쓰기의 의미
    • YAML: 딕셔너리 표현방식
    • JSON: 괄호 내 모든 속성에 대해 들여쓰기 사용
  • 리스트 표현 방식
    • YAML: - 사용
    • JSON: [] 사용, [] 내 요소들은 쉼표로 구분

JSON PATH

  • JSON 형식으로 표현된 데이터를 쿼리(query)할 수 있음
    • e.g. "car": {"color": "blue", "price": "20000"}, ..로 표현된 JSON 데이터에서 car이라는 쿼리를 날리면 차에 대한 자세한 정보(색, 가격)를 얻을 수 있음
  • 딕셔너리의 키를 활용해 쿼리를 날릴 때
    • car, car.color 처럼 쿼리 가능
    • root 요소를 표현할 때 $ 사용 가능 (e.g. $.car)
    • 쿼리의 결과는 []로 감싸져서 나옴 (배열 형태)
  • 리스트에 쿼리를 날릴 때
    • 인덱스를 활용해 $.[0]과 같은 형식으로 사용
    • 여러 개를 조회할 때, '$.[0, 3]'처럼 사용
  • 딕셔너리와 리스트를 함께 사용할 때
    • e.g. $.car.wheels[1].model
  • 기준을 사용해 조회할 때
    • e.g. $[?(@>40)]
      • 리스트일 경우 [] 사용
      • ?()는 기준으로 조회할 때 사용
      • @는 리스트 내 각 아이템(요소)을 의미
      • 비교 시 ==, !=, in [요소들], nin [요소들] 사용 가능
    • e.g. $.car.wheels[?(@.location=="rear-right")].model
      • 리스트의 인덱스가 아니라 조회조건 사용할 수 있음

JSON PATH 와일드카드

  • 모든 항목을 조회하고 싶을 때 * (별표) 사용
    • e.g. $.*.color
    • e.g. $[*].model
    • e.g. $.*.wheels[*].model

JSON PATH 리스트

  • 여러 개의 요소를 연속적으로 조회하고 싶을 때 : 사용 (마지막 인덱스는 미포함)
    • e.g. $[0:3] (start:end)
  • 특정 스텝 간격으로 조회하고 싶을 때 step 사용
    • e.g. $[0:3:2] (start:end:step)
  • 마지막 리스트 조회
    • e.g. $[-1:]

Advanced Kubectl Commands

  • kubectl 명령어
    • json 형태로 정보를 전달하는 kube-apiserver와 통신
    • json path를 활용해 원하는 형식으로 데이터를 조회할 수 있음
  • kubectl에서 json path 사용하기
      1. kubectl 명령어 확인
      • e.g. kubectl get pods
      1. json 결과물에 익숙해지기
      • e.g. kubectl get pods -o json
      1. json path 쿼리 만들기
      • e.g. .items[0].spec.containers[0].image
      • $ 표시 생략 가능 (쿠버네티스가 붙여줌)
      1. json path 쿼리를 kubectl 명령어와 함께 사용
      • e.g. kubectl get pods -o=jsonpath='{.items[0].spec.containers[0].image}'
      • -o=jsonpath='{}{}' 처럼 여러 개 한 번에 조회 가능
      • -o=jsonpath='{}{"\n"}{}' 처럼 줄 나눔, 탭 삽입 가능

Loops - Range

  • kubectl get nodes -o=jsonpath='{.items[*].metadata.name}{"\n"}{.items[*].status.capacity.cpu}'
    • 아래와 같은 출력 형식으로 나온다고 가정
      • master node01
      • 4 4
  • kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.cpu}{"\n"}{end}'
    • 아래와 같은 출력 형식으로 나올 수 있음
      • master 4
      • node01 4
    • range가 for loop 역할을 함
  • kubectl get nodes -o=custom-columns=[컬럼명]:[JSON PATH] 사용할 수도 있음
    • e.g. kubectl get nodes -o=custom-columns=NODE:.metadata.name,CPU:.status.capacity.cpu
    • 위와 다른 점은 컬럼명이 추가된다는 것 (NODE, CPU)
  • --sort-by=옵션을 사용하면 해당 기준에 따라 정렬 이루어짐
    • e.g. --sort-by=.spec.capacity.storage
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab

0개의 댓글