[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으로 구조를 확인한 뒤 식을 작성합니다.