쿠버네티스 모니터링 구축

클러스터를 운영하려면 “지금 리소스를 얼마나 쓰고 있는지” 볼 수 있어야 합니다. 가벼운 kubectl top 부터 본격적인 Prometheus·Grafana 스택까지 정리합니다.

Metrics Server: kubectl top의 전제

kubectl top nodes / kubectl top pods 는 Metrics Server가 있어야 동작합니다.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

kubeadm으로 만든 클러스터에서는 kubelet의 서빙 인증서 문제로 Metrics Server가 노드 메트릭을 못 긁는 경우가 많습니다. 클러스터 내 모든 노드에 아래 옵션을 넣어 인증서 발급을 요청하게 합니다.

echo "serverTLSBootstrap: true" >> /var/lib/kubelet/config.yaml
systemctl restart kubelet

그러면 마스터에서 CSR(인증서 서명 요청)이 올라옵니다. 승인해줍니다.

kubectl get csr
kubectl certificate approve [csr-이름]

CSR이 너무 많이 쌓여 꼬였다면 전부 지우고, 재시작 후 새로 올라온 것만 승인하면 됩니다.

kubectl delete csr --all

정상화되면 이렇게 볼 수 있어요.

kubectl top nodes
kubectl top pods -A --sort-by memory

참고로 Metrics Server가 붙어도 타임아웃이 나면, apiserver 매니페스트(/etc/kubernetes/manifests/kube-apiserver.yaml)에 --enable-aggregator-routing=true 를 추가하면 해결되는 경우가 있습니다. Aggregator Layer를 통해 통신하기 때문이에요.

Prometheus + Grafana 스택

kubectl top 은 순간값만 보여줍니다. 시계열로 쌓아서 대시보드로 보려면 Prometheus·Grafana를 올립니다.

먼저 네임스페이스와 저장소(동적 프로비저닝용 NFS 등)가 필요합니다.

kubectl create ns monitoring

구성 요소는 대략 이렇게 나뉩니다.

  • Prometheus: 메트릭을 수집·저장하는 시계열 DB
  • node-exporter: 각 노드의 시스템 메트릭 수집 (DaemonSet)
  • kube-state-metrics: 쿠버네티스 오브젝트 상태를 메트릭으로 노출
  • Grafana: 수집된 메트릭을 대시보드로 시각화

각 컴포넌트의 ConfigMap·Deployment·Service·PVC 매니페스트를 monitoring 네임스페이스에 apply하면 됩니다. NodePort로 열어두면 예컨대 Prometheus는 30003, Grafana는 30004 포트로 접근하도록 구성할 수 있어요.

kubectl apply -f monitoring/   # prometheus, grafana, node-exporter, kube-state-metrics

Grafana에 접속해 데이터소스로 Prometheus(http://prometheus.monitoring.svc:9090 형태)를 등록하고, 커뮤니티 대시보드를 불러오면 노드·파드 리소스 현황을 한눈에 볼 수 있습니다.

가벼운 상태 점검은 Metrics Server, 추세와 알림이 필요하면 Prometheus·Grafana — 이렇게 두 단계로 생각하면 딱 맞습니다.