Ops/Monitoring

[Monitoring] kube_node_labels에 label이 표시 안되는 현상 (kube-state-metrics) (grafana/prometheus)

장그래 2022. 8. 31. 00:00
반응형

개요

Grafana 대시보드 구성을 위해 Node의 lable이 필요한 상황이라 kube_node_label 메트릭(metrics)을 조회해봤다.
하지만, kube_node_label 메트릭에서는 label에 대한 정보가 표시되지 않고 있었다.
이를 해결했던 경험을 작성하려고 한다.  + (kube_pod_label에서도 표시되지 않는 현상도 수정하였다.)


환경

kube-prometheus-stack v 32.2.1
kube-state-metric v2.3.0

원인

kube-state-metrics이 kube_node_label과 kube_pod_label 메트릭을 수집하고 있는데, v2.0.0부터는 label을 따로 표기하지 않게 설정이 되었다고 한다. (많은 label로 인해 에러를 방지하기 위함이라고 한다.) 

참고 URL : https://github.com/kubernetes/kube-state-metrics/issues/1270

그렇다고 label을 볼 수 없는 것은 아니고, CLI를 통해 지정된 label을 볼 수 있도록 되어 있다고 한다.

해결

CLI를 통해 지정된 label을 볼 수 있으므로 관련 내용을 수정해보자.

먼저 kube-state-metrics 파드는 deployment를 통해 배포되고 있으니, deployment가 있는지 조회해본다.

kubectl get deployment -A | grep kube-state-metrics

정상적으로 조회되는 것을 확인했으니, deployment를 수정하자

kubectl edit deployment kube-prometheus-stack-kube-state-metrics -n mmx-monitor

containers의 밑에 항목에 - --metric-labels-allowlist=nodes=[레이블] # 이 부분 추가하면 된다.
POD label을 추가할 것이라면 - --metric-labels-allowlist=pods=[레이블]

ex)  - --metric-labels-allowlist=nodes=[*] // 모든 label  
ex)  - --metric-labels-allowlist=nodes=[test-role] // key가 test-role인 label  
ex)  - --metric-labels-allowlist=pods=[app,k8s-app],nodes=[*] // pods, 와 label 동시에 추가 

    spec:
      containers:
      - args:
        - --port=8080
        - --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpoints,horizontalpodautoscalers,ingresses,jobs,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments
        - --telemetry-port=8081
        - --metric-labels-allowlist=nodes=[mmx-role] # 이 부분 추가


그 결과 label이 정상 표기되는 것을 볼 수 있다.

반응형