🚀 Prometheus Monitoring
쿠버네티스 모니터링의 역사
Heapster → metrics-server → Prometheus
Prometheus는 기본적으로 모니터링에 목적이 있다.
CPU, Memoty, Network IO, Disk IO 등을 모니터링 할 수 있다.
오로지 쿠버네티스만이 아닌 BM, VM, Docker 등 시스템을 위해 구성되는 것이며 metric값을 수집해서 시각적으로 확인할 수 있도록 한다.
📌 프로메테우스 아키텍처

주황색 아웃라인이 그려진 것들이 프로메테우스의 구성요소이다. 각 구성요소들이 파드로 실행된다.
가장 중요한 것은 중앙의 Prometheus server이다. 그 중 Retrieval은 회수/수집의 의미를 가진다.
Prometheus targets - 프로메테우스가 측정할 대상, VM, 컨트롤 플레인, 워커 노드의 호스트, 파드 등의 CPU, Memory 정보가 될 수 있다.
Jobs/exporters - Job은 프로세스나 App이 될 수 있다.
Short-lived jobs이 metrix을 수집해서 가져온다. (Pull metrics)metric이란 수집 가능한 요소(: CPU, Memoty, Network IO, Disk IO)들을 수집한 것이다.
Short-lived jobs(금방 생성되고 금방 삭제되는 것)들은 제대로 측정을 하지 못하는 경우가 생긴다.
생명주기가 짧은 애들은 미쳐 가져오기도 전에 생명주기가 끝나서 모니터링을 할 수 없다.
Pushgateway - 생명주기가 짧은 것들은 Pushgateway가 대신해서 생명주기가 끝나기 전에 메트릭을 미리 받아둔다.
즉, Retrieval이 Pushgateway 또는 해당되는 타겟의 해당되는 메트릭을 pulling하여 데이터를 수집한다.
중요한 것은 타겟을 어떻게 정하느냐 ?이다.
반드시 쿠버네티스만이 대상이 되는 것이 아니므로 VM이나 특정 App이 대상이 될 수도 있다.
Service discovery
따라서 프로메테우스에서 타겟을 찾기위한 서비스 디스커버리를 해야한다. 즉, 대상이 누구인지를 파악할 수 있어야 한다.
쿠버네티스를 대상으로 하면 간단하게 apiserver에 질의함으로써 서비스 디스커버리를 할 수 있다.
쿠버네티스와 상호작용해서 프로메테우스 서버가 수집대상을 가지고 온다.
file\_sd - 타겟이되는 서버를 직접 파일로 정할 수 있다.
TSDB - Time Series DB 시계열 데이터베이스
시계열 DB란 ? CPU, Memory의 값들의 사용량은 시간순으로 바뀐다.
이것을 DB에 시간대별로 저장하기 좋게 만들어 놓은 DB를 시계열 DB라고 한다.
TSDB를 통해 데이터를 로컬에 저장한다. 쿠버네티스의 경우 pv, pvc를 사용한다.
HTTP server + Dashboard - 그래픽 기반의 웹
Data visualization - 데이터 시각화, 사람이 눈으로 측정값들을 보기 좋게 그래프같은 것으로 만들어주는 형태를 대시보드라고 한다.
Prometheus web UI를 통해서 HTTP server에 접속해서 값들을 볼 수 있다. 개발용, 테스트용으로 사용한다.
PromQL - 시계열 DB에 저장되어 있는 여러가지 측정값들을 검색할 수 있는 Query Language
PromQL을 통해 시각화 데이터를 볼 수 있다.
Alertmanager - 알람, 특정 CPU, Memoty, Network IO, Disk IO를 모니터링 하다가 설정한 기준치를 넘으면 알림을 보낼 수 있다.
pagerduty - 별도의 SaaS 서비스, alert들을 통합해서 전송해주고 관리해주는 서비스
Prometheus web UI로는 사실상 모니터링이 불가하므로 별개의 오픈소스인 Grafana를 사용한다.
Grafana는 쿠버네티스 뿐만 아니라 다양한 소스로부터 데이터를 가지고와서 시각화해주는 도구이다.
📌 Prometheus helm chart repository
https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
kube-prometheus-stack : Prometheus의 모든 컴포넌트를 한번에 설치할 수 있음
kube-prometheus-stack은 Prometheus Operator에 의해 만들어졌다.
Operator란 무엇인가 ?
🚀 kubernetes operator
오퍼레이터(operator) 패턴 | Kubernetes
오퍼레이터를 정의하기 위해서 사용자 정의 리소스(CRD)를 사용한다.
❯ kubectl api-resources | grep crd
customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration
bgppeers crd.projectcalico.org/v1 false BGPPeer
blockaffinities crd.projectcalico.org/v1 false BlockAffinity
clusterinformations crd.projectcalico.org/v1 false ClusterInformation
felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration
globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy
globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet
hostendpoints crd.projectcalico.org/v1 false HostEndpoint
ipamblocks crd.projectcalico.org/v1 false IPAMBlock
ipamconfigs crd.projectcalico.org/v1 false IPAMConfig
ipamhandles crd.projectcalico.org/v1 false IPAMHandle
ippools crd.projectcalico.org/v1 false IPPool
kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration
networkpolicies crd.projectcalico.org/v1 true NetworkPolicy
networksets crd.projectcalico.org/v1 true NetworkSet
Calico를 설치할 때 crd라는 리소스를 통해서 사용자 정의 리소스를 만들 수 있다.
사용자만의 리소스를 정의할 수 있다. 그것을 정의하는 리소스가 crd라는 리소스이다.
📌 operator flamework
Welcome to Operator framework
operator와 crd를 합쳐서 나만의 리소스를 만들 수 있고 리소스의 생성 순서도 정의할 수 있다.
kube-prometheus-stack에는 Prometheus rules가 있다.
프로메테우스 서버가 있고 exporter가 프로메테우스 서버를 가리켜야 한다.
alert는 서버랑 어떻게 연동 시킬 것인지 ? 등을 세세하게 세팅해야 하는데 이런 세팅까지도 모두 포함되어 있다.
따라서 매우 쉽게 쿠버네티스 클러스터의 모니터링을 제공할 수 있다.
🚀 Prometheus & Grafana 설치
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
prom-values.yaml
grafana:
service:
type: LoadBalancer
❯ kubectl create ns monitor
namespace/monitor created
default 네임스페이스가 아닌 별도의 네임스페이스를 생성해서 분리시키는 것이 좋다.
helm install prom prometheus-community/kube-prometheus-stack -f prom-values.yaml -n monitor
❯ helm list -n monitor
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
prom monitor 1 2022-05-28 05:56:22.319291077 +0000 UTC deployed kube-prometheus-stack-35.4.2 0.56.2
❯ kubens monitor
Context "kubernetes-admin@cluster.local" modified.
Active namespace is "monitor".
❯ kubectl get all



홈 화면에서 왼쪽 상단의 General / Home 을 클릭하면 미리 만들어져 있는 대시보드의 리스트를 볼 수 있다.

Kubernetes / Compute Resources / Cluster 를 클릭하면 리소스 사용량을 네임스페이스별로 파악할 수 있다.
'DevOps > Kubernetes' 카테고리의 다른 글
| [Kubernetes] 쿠버네티스 로깅 - EFK란? 설치 및 사용법 (0) | 2022.06.10 |
|---|---|
| [Kubernetes] kubectx, kubens, powerlevel10k (쿠버네티스 유용한 플러그인) (0) | 2022.06.09 |
| [Kubernetes] Helm의 개요, 설치 및 사용법 (0) | 2022.06.08 |
| [Kubernetes] RBAC (Role-Based Access Control, 역할 기반 접근 제어) (1) | 2022.06.07 |
| [Kubernetes] Authenticate (인증) (0) | 2022.06.07 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!