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 사용량 등을 확인할 수 있다.
또한 다음과 같이 네임스페이스를 선택해서 확인하는 것도 가능하다.