[kubernetes] Helm Prometheus Stack 설치

728x90

HELM

 

공식 문서: https://helm.sh/docs/

쿠버네티스 패키지 매니저

용어

  • Helm Charts: 차트, 패키지
  • Repository: 차트 저장소
  • Release: 쿠버네티스 오브젝트 리소스 (패키지 → 클러스터에 생성한 인스턴스)

Helm 저장소는 다양하게 존재한다.

gRPC 로 클라이언트와 서버가 통신한다.

Tiller 에 의해 다운받은 패키지를 API server 를 통해 설치를 한다.

v3 에서 Tiller 를 없앴다. 보안상 문제가 생길 수도 있기 때문, 그래서 v3 에서는 클라이언트가 바론 API server 에 직접 접근하는 방식을 사용한다.

helm 설치(debian/ubuntu 계열)

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all
sudo apt-get update
sudo apt-get install helm main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

Helm Chart 검색 사이트: https://artifacthub.io/

차트 구조

<Chart Name>/
	chart.yml
	values.yml
	templates/
  • chart.yml: 차트의 메타데이터
  • values.yml: 패키지를 커스터마이즈/사용자화(value)
  • templates: YAML 오브젝트 파일

helm 사용법

artifacthub 검색

helm search hub <PATTERN>

저장소 추가

helm repo add <저장소> <레포지토리_주소>

helm repo add wordpress https://charts.bitnami.com/bitnami

저장소 검색

helm search repo <저장소>/<PATTERN>

차트 설치

helm install <릴리즈_이름> <저장소>/<차트_이름>

릴리즈 확인

helm list

릴리즈 제거

helm uninstall <릴리즈_이름>

차트 정보 확인

helm show readme <저장소>/<차트>
helm show chart <저장소>/<차트>
helm show values <저장소>/<차트>

차트 사용자화

helm install mywp bitnami/wordpress --set replicaCount=2
helm install mywp bitnami/wordpress --set replicaCount=2 --set service.type=NodePort

릴리즈 업그레이드

helm show value <저장소>/<차트> > wp-value.yml
vi wp-value.yml
helm upgrade <릴리즈_이름> <저장소>/<차트> -f wp-value.yml

릴리즈 업그레이드 히스토리 확인

helm history <릴리즈_이름>

릴리즈 롤백

helm rollback <릴리즈_이름> <REVISION>

Monitoring & Logging

Prometheus Monitoring

https://prometheus.io/docs/introduction/overview/

프로메테우스 아키텍쳐

Prometheus targets(Jobs/exporters): 앱, 프로세스 등 모니터링하려는 대상의 데이터를 exporters 파드에서 수집한다.

Pushgateway: 생명주기가 짧은 녀석들의 데이터들은 여기서 보관한다.

discover targets: target 을 찾기 위해 프로메테우스 서버에서 대상을 특정할 수 있어야 한다.(api-server 에 질의 한다.-pod 목록, node 목록, svc 목록 등…)

TSDB(Time Series DB): 시계열 DB, 관계형 데이터베이스가 아니라 시간대별로 데이터를 저장하기 좋게 만든 DB 를 시계열 DB 라고 한다.

HTTP server: 대시보드. UI, UX 가 엄청 끔찍해서 거의 사용하지는 않는다.

PromQL: SQL 같은 전용 언어를 만들었다. TSDB 에서 데이터를 검색할 수 있는 전용 언어이다.

AlertManager: 리소스를 모니터링 하다가 특정 임계값을 넘으면 슬랙, 이메일 등으로 알림을 보낸다.

Grafana: TSDB 의 시계열 데이터 PromQL 을 통해 쿼리하여 프로덕션 레벨에서 모니터링하는 도구

Helm kube-prometheus-stack 차트 설치

깃허브: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

prom-values.yml

grafana:
  service:
    type: LoadBalancer
kubectl create ns monitor
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-27 05:49:29.781975505 +0000 UTC deployed        prometheus-15.9.0       2.34.0
kubectl get all -n monitor
NAME                                                READY   STATUS    RESTARTS   AGE
pod/prom-kube-state-metrics-7b78c9f88-mf84w         1/1     Running   0          84s
pod/prom-prometheus-alertmanager-55b97bcd64-rwpct   2/2     Running   0          84s
pod/prom-prometheus-node-exporter-28t5x             1/1     Running   0          85s
pod/prom-prometheus-node-exporter-72sbt             1/1     Running   0          85s
pod/prom-prometheus-node-exporter-rkcx5             1/1     Running   0          85s
pod/prom-prometheus-pushgateway-67f89c46f7-4psh9    1/1     Running   0          85s
pod/prom-prometheus-server-c5cbb7c66-x76b6          2/2     Running   0          84s

NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/prom-kube-state-metrics         ClusterIP   10.233.17.58    <none>        8080/TCP   85s
service/prom-prometheus-alertmanager    ClusterIP   10.233.35.47    <none>        80/TCP     85s
service/prom-prometheus-node-exporter   ClusterIP   10.233.3.31     <none>        9100/TCP   85s
service/prom-prometheus-pushgateway     ClusterIP   10.233.47.169   <none>        9091/TCP   85s
service/prom-prometheus-server          ClusterIP   10.233.55.155   <none>        80/TCP     85s

NAME                                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/prom-prometheus-node-exporter   3         3         3       3            3           <none>          85s

NAME                                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prom-kube-state-metrics        1/1     1            1           85s
deployment.apps/prom-prometheus-alertmanager   1/1     1            1           85s
deployment.apps/prom-prometheus-pushgateway    1/1     1            1           85s
deployment.apps/prom-prometheus-server         1/1     1            1           85s

NAME                                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/prom-kube-state-metrics-7b78c9f88         1         1         1       85s
replicaset.apps/prom-prometheus-alertmanager-55b97bcd64   1         1         1       85s
replicaset.apps/prom-prometheus-pushgateway-67f89c46f7    1         1         1       85s
replicaset.apps/prom-prometheus-server-c5cbb7c66          1         1         1       85s

prom-grafana 로드밸런서의 EXTERNAL-IP로 접속하면 다음과 같은 화면을 확인할 수 있다.

 

패스워드는 values.yaml에서 확인할 수 있다.

  • ID: admin
  • PWD: prom-operator

 

로그인 후 다음과 같이 클러스터의 CPU 사용량 등을 확인할 수 있다.

 

 

또한 다음과 같이 네임스페이스를 선택해서 확인하는 것도 가능하다.

 

 

728x90