🚀 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 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!