프로젝트 소개

kube-state-metrics(KSM)는 Kubernetes API 서버를 수신 대기하고 디플로이먼트, 노드, 파드와 같은 클러스터 객체의 상태에 대한 메트릭을 생성하는 서비스입니다. 개별 Kubernetes 구성 요소의 상태를 모니터링하는 대신 클러스터 내부의 객체를 보고합니다. 메트릭은 HTTP 엔드포인트 /metrics(기본 포트 8080)에 일반 텍스트로 노출되며 Prometheus 또는 호환되는 스크레이퍼를 대상으로 합니다. 엔드포인트는 현재 클러스터 상태를 반영하므로 삭제된 객체는 사라집니다. 설계 철학: KSM은 Kubernetes API 객체를 수정 없이 사용하여 메트릭을 생성하므로 해당 기능의 안정성 등급은 기반 API 객체와 동일합니다. kubectl 스타일의 휴리스틱을 적용하지 않고 원시 데이터를 수정 없이 노출하며 해석은 사용자에게 맡깁니다. 알파 API 기반 메트릭은 안정성 보장에서 제외됩니다. README에 설명된 주요 기능: - docs 디렉터리의 메트릭 문서와 커스텀 리소스 상태 메트릭(resource-state-metrics를 위해 기능 동결됨). - 라벨 처리: Kubernetes 라벨 이름은 Prometheus 호환 이름으로 변환됩니다(예: app.kubernetes.io/name은 label_app_kubernetes_io_name이 됨). 변환 충돌 시 자동으로 _conflictN 접미사가 붙습니다. - 허용/거부 목록은 전방탐색/후방탐색을 포함한 ECMAScript 정규식을 지원하며 평가 시간은 1분으로 제한됩니다. - 별도의 텔레메트리 호스트/포트(기본 8081)에서 제공되는 자체 메트릭: list/watch 성공 및 오류 카운터, HTTP 요청 지속 시간 히스토그램, 빌드 정보, 샤드 순번/전체 샤드 수, 설정 파일 해시 및 리로드 상태. - 확장 지침: 일반적으로 약 250MiB 메모리와 0.1코어가 기준입니다. 낮은 CPU 제한은 큐 적체와 더 높은 메모리 사용을 유발할 수 있습니다. 100노드 확장 테스트의 지연 시간 수치가 제공됩니다(Perc50 ~260ms, Perc90 ~475ms, Perc99 ~907ms). - --shard 및 --total-shards를 통한 수평 샤딩: 객체 UID의 md5를 전체 샤드 수로 나눈 나머지를 사용합니다. --pod 및 --pod-namespace를 사용한 StatefulSet 자동 샤딩(실험적), 명시적 샤드 인덱스를 사용한 디플로이먼트 기반 샤딩, --node를 사용한 파드 메트릭용 데몬셋 샤딩, 할당되지 않은 파드를 위한 --track-unscheduled-pods. - resources 및 exclude_resources 쿼리 매개변수를 사용한 /metrics 리소스 필터링. exclude가 우선합니다. - 상태 확인 엔드포인트: 메인 포트의 /healthz 및 /livez, 텔레메트리 포트의 /readyz. 설정 및 사용: go get k8s.io/kube-state-metrics/v2로 설치하고 make container로 컨테이너를 빌드한 다음 kubectl apply -f examples/standard로 배포합니다. kube-prometheus 스택에는 이미 KSM이 구성 요소로 포함되어 있습니다. GKE 사용자는 엄격한 역할 권한 때문에 cluster-admin 바인딩이 필요할 수 있습니다. README는 KSM과 metrics-server도 비교합니다. metrics-server는 Metrics API를 통해 Kubelet에서 집계된 리소스 메트릭을 제공하는 반면, KSM은 객체 상태에서 새 메트릭을 생성하고 메모리에 스냅샷을 보관합니다. 둘 다 자체적으로 메트릭을 타사 대상으로 내보내지는 않습니다.