콘텐츠로 이동

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 패키지 받기:

helm pull oci://registry-1.docker.io/bitnamicharts/kube-prometheus

검증된 오프라인 버전 받기:

docker.io/bitnami/kube-state-metrics:2.13.0-debian-12-r6

다음 명령으로 파일을 압축 해제합니다:

tar xf kube-prometheus-9.6.3.tgz

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와 일치해야 합니다

  • 다음 명령을 실행하여 배포합니다:
cd kube-prometheus

helm upgrade -i -n datakit --create-namespace  datakit . 

배포가 완료되면 다음 명령으로 배포 성공 여부를 확인합니다:

kubectl get pod -n datakit

Datakit 구성

  • datakit.yamlConfigMap 리소스에 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을 재시작합니다
kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml

지표

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

문서 평가

이 페이지가 도움이 되었나요?