쿠버네티스 모니터링 (feat. Prometheus)

2025. 11. 24. 16:14·개발 공부/k8s

Prometheus란?

  • Prometheus는 모니터링 시스템 이면서 시계열 데이터 베이스이다.
  • 넓게 보면 NoSQL이라고 말할 수 있지만 자세히 보면 범용적인 데이터를 저장할 수 있는 구조는 아니기에 일상적으로 말하는 데이터 베이스와는 거리가 있을 수 있음.
    • 그렇기에 Prometheus는 모니터링 시스템이며, 실시간 처리에 최적화된 데이터를 가지고 있다. 라고 말하는 것이 더 정확할 수 있음

kube-prometheus-stack 구성 및 설치

  • Helm으로 설치 시에 KubeStateMetrics, NodeExporter, Grafana, Operator가 설치가 됨.
    • 앞에 kube가 붙어있는 것이 아닌 그냥 Prometheus인 패키지라면 operator는 없으니 주의 바람
  • NodeExporter는 DaemonSet으로 설치되어 각 노드의 정보를 노출하는 데 사용이 됨.
  • KubeStateMetrics는 Deployment로 설치되어 kube-apiserver와 통신하여 리소스 정보를 노출 시킴 ex) pod의 개수
  • Operator는 CRD를 보고 Prometheus, AlertManager를 만들어 줌.
  • 또한 ServiceMonitor의 정보를 보고 Prometheus의 Secret 정보를 만들어줌 -> 그걸 보고 Prometheus가 연결해 줌
  • Grafana는 Deployment이기에 PVC를 통해 PV를 만들고 Prometheus는 기본적으로 DB 이기 때문에 StatefulSet으로 만들어야 하기에 PV를 만들어서 연결해줌
  • Prometheus는 단일 서버 용으로 만들어져있기에 여러 개를 만들기가 힘듦
    • Thanos가 이를 해결해줌

새로운 리소스가 추가될 때 해당 리소스의 매트릭을 수집하는 방법

  • 위 그림에서 Nginx가 새로이 만들어진다면 다음과 같은 절차를 거침.
  • Nginx가 배포가 됨 -> ServiceMonitor(Nginx)를 만듦 -> Operator가 이를 보고 Secret을 업데이트 함 -> Prometheus의 ConfigReloader가 이를 감지하여 Nginx의 매트릭을 수집함
    • 위와 같은 단계 덕분에 재기동을 시키지 않아도 됨.

리소스 (CPU, Memory)

  • 다른 자원들도 많이 있지만 CPU와 Memory가 가장 중요하기 때문에 일단 둘만 설명함.
  • node에 자원을 적절히 배치하기 위해 requests와 limits라는 속성이 존재함
    • requests는 Node의 Pod 배치의 기준이 되며 requests를 기준으로 매트릭이 표시가 됨
      • 예를 들어 requests가 1이고 노드에 최대 값이 2라면 2개만 설치가 됨.
      • 또한 requests가 1이고 pod가 사용량이 2까지 올라간다면 매트릭 표시 값은 200%가 됨.
    • limits는 pod의 최대 사용량 기준이 됨.
      • limits에 값을 넘긴다면 새로운 pod가 만들어짐
  • requests와 limits의 비율에 따라 쿠버네티스의 노드를 인식할 때 3가지 종류가 있음.
    • Guaranteed
      • requests와 limits를 같게 만드는 것으로 기준치 밖에 못쓰기에 노드 자원이 비효율적이나 서비스의 안정성을 보장됨.
    • BestEffort
      • requests와 limits를 아얘 설정하지 않는 것으로 자유롭게 사용이 되기 때문에 노드의 자원을 효율적으로 사용하나 만약 노드의 자원이 떨어져도 Pod를 새로 생성하고 하나의 Pod에서 많은 양의 자원이 사용이 될 수 있기에 서비스의 안정성은 보장하지 않음
    • Burstable
      • Guaranteed와 BestEffort에 해당되지 않는 나머지로 필요에 따라 requests와 limits를 조정시키는 것
      • 가장 많이 사용됨.
  • Node의 자원 부족시 BestEffort > Burstable 순으로 Pod를 삭제 시킴. Guaranteed는 유지
  • 초기 값의 경우 memory는 부족하면 Pod가 생성이 안될 수 있기에 우선 requests와 limits를 같게하여 생성을 보장시키고 모니터링하며 조정하는 것이 좋음. CPU는 부족해도 쓰로틀링이 걸릴 뿐 memory 처럼 바로 터지진 않기에 일단 requests와 limits 비율을 1:2로 설정한 후 모니터링을 하며 조정하는 것이 좋음

Grafana Dashboard

  • 많은 대시보드가 존재하며 목적에 따라 원하는 매트릭이 다르기 때문에 일단 목적을 정한 후 이에 맞는 대시보드를 찾아 복사한 후 수정하는 것이 좋음

PromQL 조인 쿼리

  • PromQL은 Prometheus에서 사용하는 쿼리를 뜻하는데 여러 문법들이 존재하지만 이를 모두 외우는 건 힘들기에 일단 대시보드에서 복사한 후 사용하는 것이 좋음
  • 하지만 조인 쿼리의 경우 여러 곳에서 사용하기 좋기에 기억하는 것이 좋음
  • 간단히 설명하자면 on은 해당 필드를 기준으로 매칭이 되는 것이며 group_left나 group_right의 경우 일을 기준으로 다의 데이터를 확장 시킬 때 사용함. (일과 다의 의미는 바로 위의 그림 참고)

 

출처: https://inf.run/wLXM7

저작자표시 (새창열림)

'개발 공부 > k8s' 카테고리의 다른 글

쿠버네티스 로깅  (0) 2025.12.04
쿠버네티스 업그레이드  (0) 2025.11.08
쿠버네티스의 패턴  (0) 2025.11.05
쿠버네티스의 PVC, PV  (0) 2025.11.01
쿠버네티스의 Ingress  (0) 2025.10.30
'개발 공부/k8s' 카테고리의 다른 글
  • 쿠버네티스 로깅
  • 쿠버네티스 업그레이드
  • 쿠버네티스의 패턴
  • 쿠버네티스의 PVC, PV
Jamey
Jamey
  • Jamey
    컴공 대학생의 이야기
    Jamey
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 개발 공부 (33)
        • k8s (24)
        • kafka (8)
        • AI (1)
      • 개발기 (2)
      • 프로젝트 홍보 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    topic
    langchain
    카프카
    Producer
    llm최적화
    Kafka
    cloudflare workers
    serialDB
    Linux
    Jenkins
    AI
    sql자동화
    consumer
    Graphana
    K8S
    Rag
    조인 쿼리
    Kubernetes
    current offset
    토픽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Jamey
쿠버네티스 모니터링 (feat. Prometheus)
상단으로

티스토리툴바