[CKA] kubectl 출력 필터링과 정렬

JSONPath, custom-columns, sort-by로 Kubernetes 리소스에서 필요한 값만 추출하는 방법을 정리합니다.

kubectl get -o json으로 리소스 구조를 먼저 확인하면 JSONPath를 만들기 쉽습니다. Kubernetes 목록 응답에서는 개별 리소스가 .items[] 아래에 있습니다.

kubectl get nodes -o json
kubectl get pods -o json

JSONPath

# 모든 노드 이름
kubectl get nodes -o=jsonpath='{.items[*].metadata.name}{"\n"}'

# 노드별 이름과 CPU 용량
kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.cpu}{"\n"}{end}'

# InternalIP만 추출
kubectl get nodes -o=jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}{"\n"}'

복잡한 식은 작은따옴표와 중괄호로 감싸면 shell 해석 오류를 줄일 수 있습니다. 결과를 파일에 저장해야 한다면 명령 끝에 redirection을 붙입니다.

kubectl get nodes -o json > /opt/outputs/nodes.json
kubectl get node node01 -o json > /opt/outputs/node01.json

custom-columns와 sort-by

custom-columns는 여러 필드를 읽기 쉬운 표로 만들고, --sort-by는 지정한 필드로 리소스를 정렬합니다.

kubectl get deployments -n <namespace> \
  -o=custom-columns='DEPLOYMENT:.metadata.name,CONTAINER_IMAGE:.spec.template.spec.containers[0].image,READY_REPLICAS:.status.readyReplicas,NAMESPACE:.metadata.namespace' \
  --sort-by=.metadata.name

kubectl get pv --sort-by=.spec.capacity.storage

Ready 상태인 노드를 찾을 때는 condition 배열을 순회할 수 있습니다.

JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{"\n"}{end}'
kubectl get nodes -o jsonpath="$JSONPATH" | grep 'Ready=True'

필드 경로가 확실하지 않으면 추측하지 말고 전체 JSON이나 kubectl explain으로 구조를 확인한 뒤 식을 작성합니다.