쿠버네티스 객체 상태 메트릭

쿠버네티스 객체 상태 메트릭 (Metrics for Kubernetes Object States)

쿠버네티스 클러스터가 "잘 돌아가고 있는지" 궁금할 때가 많죠. 이때 단순히 CPU나 메모리 사용량만 보는 걸로는 부족해요. 클러스터 안에 어떤 객체(Pod, Service 등)가 어떤 상태인지까지 봐야 전체 그림이 잡힙니다. kube-state-metrics는 바로 그 역할을 해주는 애드온이에요.

출처: 쿠버네티스 공식 문서 — Metrics for Kubernetes Object States

kube-state-metrics란? (What is kube-state-metrics?)

kube-state-metrics는 클러스터 수준의 메트릭을 생성하고 노출하는 애드온 에이전트(add-on agent)입니다. 쿠버네티스 API 안의 객체 상태를 메트릭으로 노출해 줍니다.

이 애드온은 쿠버네티스 API 서버에 연결해서, 클러스터 안의 개별 객체 상태로부터 생성된 메트릭을 HTTP 엔드포인트로 노출해요. 여기에는 라벨과 애노테이션, 시작·종료 시각, 상태(status)나 객체가 현재 어떤 페이즈(phase)에 있는지 같은 다양한 정보가 포함됩니다.

예를 들어, Pod 안에서 실행 중인 컨테이너는 kube_pod_container_info 메트릭을 만들어 냅니다. 이 메트릭에는 컨테이너 이름, 속한 Pod 이름, Pod가 실행 중인 네임스페이스, 컨테이너 이미지 이름, 이미지 ID, 컨테이너 스펙의 이미지 이름, 실행 중인 컨테이너 ID, Pod ID가 라벨로 포함되어 있어요.

kube-state-metrics의 엔드포인트를 스크래핑(scraping)할 수 있는 외부 컴포넌트(예: Prometheus)를 쓰면 아래 같은 유스케이스를 활용할 수 있습니다.

예시: kube-state-metrics 메트릭으로 클러스터 상태 조회하기

kube-state-metrics가 만든 메트릭 시리즈는 클러스터에 대한 더 깊은 인사이트를 얻는 데 유용해요. 쿼리에 활용할 수 있기 때문이죠.

Prometheus나 같은 쿼리 언어를 쓰는 도구를 사용한다면, 아래 PromQL 쿼리는 준비되지 않은(not ready) Pod 수를 반환합니다.

count(kube_pod_status_ready{condition="false"}) by (namespace, pod)

예시: kube-state-metrics 기반 알림(Alerting)

kube-state-metrics가 만든 메트릭은 클러스터의 문제에 대한 알림에도 사용할 수 있어요.

Prometheus나 같은 알림 규칙 언어를 쓰는 도구를 사용한다면, 아래 알림은 Terminating 상태에 5분 넘게 머문 Pod가 있을 때 발생합니다.

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.

이 페이지에 나온 항목들은 쿠버네티스에 필요한 기능을 제공하는 서드파티 제품·프로젝트를 가리킵니다. 쿠버네티스 프로젝트 저자는 그런 서드파티 제품·프로젝트에 대해 책임지지 않아요. 자세한 내용은 CNCF 웹사이트 가이드라인을 참고하세요.

더 알아보기 (Learn more)