쿠버네티스 객체 상태 메트릭
쿠버네티스 객체 상태 메트릭 (Metrics for Kubernetes Object States)
쿠버네티스 API에 있는 쿠버네티스 객체의 상태는 메트릭으로 노출될 수 있어요. kube-state-metrics라는 애드온 에이전트는 쿠버네티스 API 서버에 연결해, 클러스터 안의 개별 객체 상태에서 생성된 메트릭이 담긴 HTTP 엔드포인트를 노출해요.
이는 객체의 라벨·애노테이션, 시작·종료 시간, 현재 객체가 있는 상태(status)나 단계(phase) 같은 다양한 정보를 노출해요. 예를 들어 파드에서 실행되는 컨테이너는 kube_pod_container_info 메트릭을 만들어요. 여기에는 컨테이너 이름, 속한 파드 이름, 파드가 실행되는 네임스페이스, 컨테이너 이미지 이름, 이미지 ID, 컨테이너 스펙의 이미지 이름, 실행 중인 컨테이너 ID, 파드 ID가 라벨로 포함돼요.
kube-state-metrics의 엔드포인트를 스크레이프할 수 있는 외부 컴포넌트(예: Prometheus)를 사용하면 다음 사용 사례를 활성화할 수 있어요.
출처: 문서
본문
예제: kube-state-metrics 메트릭으로 클러스터 상태 조회하기
kube-state-metrics가 생성한 메트릭 시리즈는 쿼리에 사용할 수 있어 클러스터에 대한 더 깊은 통찰을 얻는 데 도움이 돼요.
Prometheus나 같은 쿼리 언어를 사용하는 다른 도구를 쓴다면, 다음 PromQL 쿼리는 준비되지 않은(not ready) 파드 수를 반환해요:
count(kube_pod_status_ready{condition="false"}) by (namespace, pod)
예제: kube-state-metrics 기반 알림
kube-state-metrics에서 생성된 메트릭은 클러스터의 문제에 대한 알림(alerting)도 가능하게 해줘요.
Prometheus나 같은 알림 규칙 언어를 사용하는 유사한 도구를 쓴다면, Terminating 상태로 5분 이상 머문 파드가 있으면 다음 알림이 발생해요:
groups:
- name: Pod state
rules:
- alert: PodsBlockedInTerminatingState
expr: count(kube_pod_deletion_timestamp) by (namespace, pod) * count(kube_pod_status_reason{reason="NodeLost"} == 0) by (namespace, pod) > 0
for: 5m
labels:
severity: page
annotations:
summary: Pod {{$labels.namespace}}/{{$labels.pod}} blocked in Terminating state.