Kube State Metrics
Kube State Metrics를 통해 클러스터 리소스의 실시간 정보를 수집
구성¶
Kube-state-metrics 배포¶
- Helm 설치(온라인 설치 모드)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
- kube-promethues 설치
kube-promethues 설치 패키지는 Bitnami의 Helm chart 방식을 사용하며, Bitnami 공식 주소
커뮤니티를 통해 최신 버전 Chart 패키지 받기:
검증된 오프라인 버전 받기:
다음 명령으로 파일을 압축 해제합니다:
Values 파일 설정 설명:
global:
# 사설 저장소 프로젝트 주소로 수정
imageRegistry: ""
## 예:
## imagePullSecrets:
## - myRegistryKeySecretName
##
# 여기의 private repository secret 이름으로 수정
imagePullSecrets: []
# 여기의 df-nfs-storage를 클러스터에서 사용 가능한 storageClass로 수정
defaultstorageClass: "df-nfs-storage"
# 여기의 df-nfs-storage를 클러스터에서 사용 가능한 storageClass로 수정
storageClass: "df-nfs-storage"
## Compatibility adaptations for Kubernetes platforms
##
compatibility:
## Compatibility adaptations for Openshift
##
openshift:
## @param global.compatibility.openshift.adaptSecurityContext Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation)
##
adaptSecurityContext: auto
## @section Common parameters
....
주의: 배포한 namespace는 datakit 수집기의 설정 namespace와 일치해야 합니다
- 다음 명령을 실행하여 배포합니다:
배포가 완료되면 다음 명령으로 배포 성공 여부를 확인합니다:
Datakit 구성¶
datakit.yaml의ConfigMap리소스에kubernetesprometheus.conf를 추가합니다
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
kubernetesprometheus.conf: |-
[inputs.kubernetesprometheus]
[[inputs.kubernetesprometheus.instances]]
role = "service"
namespaces = ["datakit"]
selector = "app.kubernetes.io/name=kube-state-metrics"
scrape = "true"
scheme = "http"
port = "__kubernetes_service_port_http_port"
path = "/metrics"
params = ""
interval = "15s"
[inputs.kubernetesprometheus.instances.custom]
measurement = "kube-state-metrics"
job_as_measurement = true
[inputs.kubernetesprometheus.instances.custom.tags]
cluster_name_k8s = "promethues-cluster"
job = "kube-state-metrics"
svc_name = "__kubernetes_service_name"
pod_name = "__kubernetes_service_target_name"
pod_namespace = "__kubernetes_service_target_namespace"
[inputs.kubernetesprometheus.instances.auth]
bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
[inputs.kubernetesprometheus.instances.auth.tls_config]
insecure_skip_verify = true
cert = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
kubernetesprometheus.conf마운트datakit.yaml파일의volumeMounts아래에 추가합니다
- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
name: datakit-conf
subPath: kubernetesprometheus.conf
readOnly: true
- 다음 명령을 실행하여 datakit을 재시작합니다
지표¶
kube-state-metrics 메트릭 세트¶
kube-state-metrics에서 수집한 메트릭은 kube-state-metrics 메트릭 세트에 있으며, 여기서는 메트릭 관련 설명을 소개합니다
| 메트릭 | 설명 | 단위 |
|---|---|---|
kube_configmap_created |
ConfigMap 리소스의 생성 시간 |
s |
kube_cronjob_created |
CronJob 리소스의 생성 시간 |
s |
kube_cronjob_next_schedule_time |
CronJob의 다음 예정 실행 시간 |
s |
kube_cronjob_spec_failed_job_history_limit |
CronJob 사양에서 실패한 작업 기록의 제한 수 |
count |
kube_cronjob_spec_successful_job_history_limit |
CronJob 사양에서 성공한 작업 기록의 제한 수 |
count |
kube_cronjob_spec_suspend |
CronJob이 일시 중단되었는지 여부 |
boolean |
kube_cronjob_status_active |
CronJob의 현재 활성 작업 수 |
count |
kube_cronjob_status_last_schedule_time |
CronJob의 마지막 스케줄 시간 |
s |
kube_cronjob_status_last_successful_time |
CronJob의 마지막 성공 실행 시간 |
s |
kube_daemonset_created |
DaemonSet 리소스의 생성 시간 |
s |
kube_daemonset_metadata_generation |
DaemonSet 메타데이터의 버전 번호 |
count |
kube_daemonset_status_current_number_scheduled |
현재 스케줄된 DaemonSet 수 |
count |
kube_daemonset_status_desired_number_scheduled |
기대 스케줄된 DaemonSet 수 |
count |
kube_daemonset_status_number_available |
사용 가능한 DaemonSet 수 |
count |
kube_daemonset_status_number_misscheduled |
스케줄 오류가 발생한 DaemonSet 수 |
count |
kube_daemonset_status_number_ready |
준비된 DaemonSet 수 |
count |
kube_daemonset_status_number_unavailable |
사용 불가능한 DaemonSet 수 |
count |
kube_daemonset_status_observed_generation |
관찰된 DaemonSet 세대 |
count |
kube_daemonset_status_updated_number_scheduled |
업데이트된 DaemonSet 수 |
count |
kube_deployment_created |
Deployment 리소스의 생성 시간 |
s |
kube_deployment_metadata_generation |
Deployment 메타데이터의 버전 번호 |
count |
kube_deployment_spec_paused |
Deployment가 일시 중지되었는지 여부 |
boolean |
kube_deployment_spec_replicas |
Deployment 사양에서 기대하는 복제본 수 |
count |
kube_deployment_spec_strategy_rollingupdate_max_surge |
Deployment 롤링 업데이트 전략의 최대 추가 복제본 수 |
count |
kube_deployment_spec_strategy_rollingupdate_max_unavailable |
Deployment 롤링 업데이트 전략의 최대 사용 불가 복제본 수 |
count |
kube_deployment_status_observed_generation |
관찰된 Deployment 세대 |
count |
kube_deployment_status_replicas |
Deployment의 현재 복제본 수 |
count |
kube_deployment_status_replicas_available |
Deployment의 현재 사용 가능한 복제본 수 |
count |
kube_deployment_status_replicas_ready |
Deployment의 현재 준비된 복제본 수 |
count |
kube_deployment_status_replicas_unavailable |
Deployment의 현재 사용 불가능한 복제본 수 |
count |
kube_deployment_status_replicas_updated |
Deployment의 현재 업데이트된 복제본 수 |
count |
kube_endpoint_address_available |
사용 가능한 Endpoint 주소 수 |
count |
kube_endpoint_address_not_ready |
준비되지 않은 Endpoint 주소 수 |
count |
kube_endpoint_created |
Endpoint 리소스의 생성 시간 |
s |
kube_endpoint_info |
Endpoint 리소스의 상세 정보 |
- |
kube_endpoint_ports |
Endpoint의 포트 정보 |
- |
kube_ingress_created |
Ingress 리소스의 생성 시간 |
s |
kube_ingress_info |
Ingress 리소스의 상세 정보 |
-s |
kube_ingress_metadata_resource_version |
Ingress 리소스의 버전 번호 |
count |
kube_ingress_path |
Ingress의 경로 정보 |
- |
kube_job_complete |
Job이 완료되었는지 여부 |
boolean |
kube_job_created |
Job 리소스의 생성 시간 |
s |
kube_job_info |
Job 리소스의 상세 정보 |
- |
kube_job_spec_completions |
Job 사양에서 완료를 기대하는 작업 수 |
count |
kube_job_spec_parallelism |
Job 사양에서 기대하는 병렬 작업 수 |
count |
kube_job_status_active |
Job의 현재 활성 작업 수 |
count |
kube_job_status_completion_time |
Job의 완료 시간 |
s |
kube_job_status_failed |
Job의 실패한 작업 수 |
count |
kube_job_status_start_time |
Job의 시작 시간 |
s |
kube_job_status_succeeded |
Job의 성공한 작업 수 |
count |
kube_lease_renew_time |
Lease의 갱신 시간 |
s |
kube_namespace_created |
Namespace 리소스의 생성 시간 |
s |
kube_namespace_status_phase |
Namespace의 상태 단계 |
count |
kube_networkpolicy_created |
NetworkPolicy 리소스의 생성 시간 |
s |
kube_networkpolicy_spec_egress_rules |
NetworkPolicy 사양의 egress 규칙 수 |
count |
kube_networkpolicy_spec_ingress_rules |
NetworkPolicy 사양의 ingress 규칙 수 |
count |
kube_node_created |
Node 리소스의 생성 시간 |
s |
kube_node_spec_unschedulable |
Node가 스케줄 불가능한지 여부 |
boolean |
kube_node_status_addresses |
Node의 상태 주소 정보 |
count |
kube_node_status_capacity |
Node의 용량 정보 |
count |
kube_node_status_condition |
Node의 상태 조건 |
count |
kube_persistentvolume_capacity_bytes |
PersistentVolume의 용량 |
byte |
kube_persistentvolume_created |
PersistentVolume 리소스의 생성 시간 |
s |
kube_persistentvolume_info |
PersistentVolume 리소스의 상세 정보 |
count |
kube_persistentvolumeclaim_created |
PersistentVolumeClaim 리소스의 생성 시간 |
s |
kube_persistentvolumeclaim_resource_requests_storage_bytes |
PersistentVolumeClaim이 요청한 저장소 리소스 |
byte |
kube_pod_completion_time |
Pod의 완료 시간 |
s |
kube_pod_container_state_started |
Pod의 컨테이너가 시작되었는지 여부 |
boolean |
kube_pod_container_status_last_terminated_exitcode |
Pod의 컨테이너 마지막 종료 코드 |
count |
kube_pod_container_status_last_terminated_timestamp |
Pod의 컨테이너 마지막 종료 시각 |
s |
kube_pod_container_status_ready |
Pod의 컨테이너가 준비되었는지 여부 |
boolean |
kube_pod_container_status_restarts_total |
Pod의 컨테이너 총 재시작 횟수 |
count |
kube_pod_container_status_running |
Pod의 컨테이너가 실행 중인지 여부 |
boolean |
kube_pod_container_status_terminated |
Pod의 컨테이너가 종료되었는지 여부 |
boolean |
kube_pod_container_status_waiting |
Pod의 컨테이너가 대기 중인지 여부 |
boolean |
kube_pod_created |
Pod 리소스의 생성 시간 |
s |
kube_pod_deletion_timestamp |
Pod 리소스의 삭제 시각 |
s |
kube_pod_init_container_status_ready |
Pod 초기화 컨테이너가 준비되었는지 여부 |
boolean |
kube_pod_init_container_status_restarts_total |
Pod 초기화 컨테이너의 총 재시작 횟수 |
count |
kube_pod_init_container_status_running |
Pod 초기화 컨테이너가 실행 중인지 여부 |
boolean |
kube_pod_init_container_status_terminated |
Pod 초기화 컨테이너가 종료되었는지 여부 |
boolean |
kube_pod_init_container_status_waiting |
Pod 초기화 컨테이너가 대기 중인지 여부 |
boolean |
kube_pod_spec_volumes_persistentvolumeclaims_readonly |
Pod 사양에서 PersistentVolumeClaim이 읽기 전용인지 여부 |
boolean |
kube_pod_start_time |
Pod의 시작 시간 |
s |
kube_pod_status_container_ready_time |
Pod의 컨테이너가 준비된 시간 |
s |
kube_pod_status_initialized_time |
Pod 초기화가 완료된 시간 |
s |
kube_pod_status_ready |
Pod가 준비되었는지 여부 |
boolean |
kube_pod_status_ready_time |
Pod 준비 시간 |
s |
kube_pod_status_scheduled |
Pod가 스케줄되었는지 여부 |
boolean |
kube_poddisruptionbudget_status_current_healthy |
PodDisruptionBudget의 현재 정상 Pod 수 |
count |
kube_poddisruptionbudget_status_desired_healthy |
PodDisruptionBudget이 기대하는 정상 Pod 수 |
count |
kube_poddisruptionbudget_status_expected_pods |
PodDisruptionBudget이 기대하는 Pod 수 |
count |
kube_poddisruptionbudget_status_observed_generation |
PodDisruptionBudget의 관찰된 세대 |
count |
kube_poddisruptionbudget_status_pod_disruptions_allowed |
PodDisruptionBudget이 허용하는 Pod 중단 수 |
count |
kube_replicaset_created |
ReplicaSet 리소스의 생성 시간 |
s |
kube_replicaset_spec_replicas |
ReplicaSet 사양에서 기대하는 복제본 수 |
count |
kube_replicaset_status_fully_labeled_replicas |
ReplicaSet의 모든 라벨이 지정된 복제본 수 |
count |
kube_replicaset_status_observed_generation |
ReplicaSet의 관찰된 세대 |
count |
kube_replicaset_status_ready_replicas |
ReplicaSet의 준비된 복제본 수 |
count |
kube_replicaset_status_replicas |
ReplicaSet의 현재 복제본 수 |
count |
kube_secret_created |
Secret 리소스의 생성 시간 |
s |
kube_service_created |
Service 리소스의 생성 시간 |
s |
kube_statefulset_created |
StatefulSet 리소스의 생성 시간 |
s |
kube_statefulset_replicas |
ReplicaSet의 현재 복제본 수 |
count |
kube_statefulset_status_observed_generation |
StatefulSet의 관찰된 세대 |
count |
kube_statefulset_status_replicas |
StatefulSet의 현재 복제본 수 |
count |
kube_statefulset_status_replicas_available |
StatefulSet의 사용 가능한 복제본 수 |
count |
kube_statefulset_status_replicas_current |
ReplicaSet의 현재 복제본 수 |
count |
kube_statefulset_status_replicas_ready |
StatefulSet의 준비된 복제본 수 |
count |
kube_statefulset_status_replicas_updated |
StatefulSet의 업데이트된 복제본 수 |
count |
kube_storageclass_created |
StorageClass 리소스의 생성 시간 |
s |