본문 바로가기
Kubernetes

[prometheus&grafana] Memory limit이 설정보다 2배로 보여요

by study4me 2025. 2. 27.
반응형

Monitoring을 위해서 kube-prometheus-stack을 배포해서 사용 중이었다.

성능 테스트를 위해 Pod Memory 그래프를 살펴보니 분명 limit을 300Mi로 설정했는데 600Mi로 나왔다.

Limit을 뚫고 Memory가 올라간다..? 뭔가 이상해서 알아보니 다음과 같은 문제가 있었다.

 

[버그] kube-prometheus-stack helm uninstall 시 kubelet service 삭제되지 않음.

kube-prometheus-stack을 배포하면 kube-system Namespace에 다음 Service가 생성된다.

<helm release name>-<kube-prometheus-stack>-coredns
<helm release name>-<kube-prometheus-stack>-kube-controller-manager
<helm release name>-<kube-prometheus-stack>-kube-etcd
<helm release name>-<kube-prometheus-stack>-kube-proxy
<helm release name>-<kube-prometheus-stack>-kube-scheduler
<helm release name>-<kube-prometheus-stack>-kubelet

참고로 helm release name 길이에 따라서 뒤에 오는 kube-prometheus-stack 부분이 잘리는 것 같다.

relese name을 my로 생성해보면 잘림 없이 service name에 다 포함되었다.

암튼 총 6개의 Service가 생성된다.

 

근데 빨간 박스 위에 kube-prometheus-stack-kubelet이 보이는가?

빨간 박스의 서비스와 다른 날짜에 생성된 거다.

 

history를 설명하자면 19일 전에 kube-prometheus-stack을 배포하고 그 다음날 helm uninstall 후 사용했던 namespace 삭제 후 다시 배포했다. 그래서 당연히 생성된 리소스 다 삭제된 줄 알았는데 kube-system namespace의 kubelet service는 삭제되지 않고 남아있었다. 실제 테스트를 해보니 저것만 계속 남아있었다. 인터넷을 찾아보니 직접 삭제해주라고 하더라.

참고

 

그래서 직접 kubectl delete service <서비스명> -n kube-system 명령어를 실행해서 삭제해줬다.

삭제 후 Metric은 제대로 쌓였다.

이미 쌓인 Metric은 여전히 2배로 나왔다.

 

 

 

문제 해결 과정

1. Grafana에서 그래프가 이상하게 나옴.

2. Grafana DataSource인 Prometheus에 날리는 쿼리문이 뭔지 살펴봄.

3. Query result를 살펴봄

# 기존 쿼리문: sum(container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", cluster="", namespace="kubeflow-user-example-com", pod="test-0", container!="", image!=""}) by (container)
# 기존 쿼리분에서 sum과 by 제거
container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", cluster="", namespace="kubeflow-user-example-com", pod="test-0", container!="", image!=""}


# Result 중 하나 예시
container_memory_working_set_bytes{container="istio-proxy", endpoint="https-metrics", id="/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod68786c4c_3413_4157_8dcd_5038f649eead.slice/cri-containerd-d5abb152920a6fd26806dd1fb4834285120e20fa2e1d064b9cd555c86d471458.scope", image="docker.io/istio/proxyv2:1.22.1", instance="10.0.4.183:10250", job="kubelet", metrics_path="/metrics/cadvisor", name="d5abb152920a6fd26806dd1fb4834285120e20fa2e1d064b9cd555c86d471458", namespace="kubeflow-user-example-com", node="ip-10-0-4-183.ap-northeast-2.compute.internal", pod="test-0", service="kube-prometheus-stack-kubelet"}

4. service만 다르고 동일한 metric이 존재함. 중복으로 쌓이는 것을 감지.

5. 원인 파악 완료

반응형