주녁, DevNote
article thumbnail

개요

On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 

 

목표

쿠버네티스 클러스터를 모니터링하고 종류별 상태를 시각화하기 위한 대시보드 설치

  • Node의 하드웨어 상태
  • 각 Namespace 별 리소스 상태
  • Master의 API Server 상태 등

여정

헬름(Helm) 설치

Helm은 쿠버네티스의 패키지 관리를 도와주는 Managing Tool입니다. (공식문서)

Helm은 아래와 같이 크게 세가지 요소을 가지고 있습니다.

  • Chart : yaml 파일을 묶어서 정의한 package로 app을 실행시키기위한 모든 리소스가 정의됨.
  • Repository : 생성된 chart들이 저장, 공유되는 공간입니다. docker hub와 유사함.
  • Release : 쿠버네티스 클러스터에서 동작하고 있는 chart instance의 버전

즉, helm은 chart를 쿠버네티스에 설치하고, 설치할때마다 release버전이 생성되며, 새로운 chart를 찾을때에는 Helm chart repository에서 찾을 수 있습니다.

# 방법1 : 설치 스크립트를 로컬에 받아서 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

# 방법2: 원격 저장소에서 최신버전 설치
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 설치 완료 후 버전 확인
helm version

# stable chart를 받아올 원격 repository 추가
helm repo add stable https://charts.helm.sh/stable

# 저장소 리스트 확인
helm repo list
helm search repo stable

# 현재 있는 저장소의 최신차트로 업데이트
helm repo update
# 여기서부터는 예제이므로
# 따라하지 않아도 됨

# mysql 예제 chart 생성
helm install stable/mysql --generate-name

# chart 생성 확인
helm ls
helm status ${chart_name}

# chart 삭제
# --keep-history : 삭제 이후에도 릴리즈 이력 유지
helm uninstall [--keep-history] ${chart_name}

프로메테우스(Prometheus) 설치 

Prometheus : 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 제공하는 모니터링 오픈소스

Grafana : 시계열 데이터 시각화를 위한 오픈소스 툴킷

Node exporter : 하드웨어의 상태와 커널 관련 메트릭을 수집하는 메트릭 수집기

# helm 저장소 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update

# Dependency를 포함한 설치 (grafana, kube-state-metrics, prometheus-node-exporter)
helm install prometheus -n monitoring --create-namespace prometheus-community/kube-prometheus-stack

# 설치 결과 확인
kubectl get pod -l app.kubernetes.io/instance=prometheus
kubectl get pod -l release=prometheus # grafana 미포함 조회
kubectl get pod -n monitoring

# 삭제
helm uninstall prometheus prometheus-community/kube-prometheus-stack -n monitoring

대시보드 접속 설정

# grafana 포트포워딩
kubectl port-forward --address 0.0.0.0 deployment/prometheus-grafana 3000 &

# 접속 확인 
# username: admin
# password: prom-operator
http://${Master-IP}:3000/login

Configuration > Data Source 에서 Prometheus 항목이 등록되어 있으면 정상이다.

 


Q & A

  • 프로메테우스는 모니터링이 해결되나요? 
더보기

프로메테우스는 만능이 아니다.

프로메테우스를 사용하기에 적합한 일과 적합하지 않은 일이 있다.

설계목적이 비즈니스 측정치와 실적 지표를 나타내기 위한 "메트릭" 모니터링 시스템이기 때문에, 커널 스케줄링이나 데이터 수집 실패 같은 요소로 인해 약간의 부정확성과 레이스 컨디션을 피할 수 없다.

따라서 적합한 일은 아래와 같다.

  • 메트릭 기반의 시계열 데이터 저장를 저장하는 일
  • 동적인 혹은 마이크로 서비스의 인스턴스에 대한 메트릭을 수집하는 일

반면 적합하지 않은 일도 있다. 이런 일은 다른 도구를 사용하여 해결해야 한다.

  • 이벤트 로그나 개별 이벤트를 저장하는 일
  • 이메일 주소/사용자 이름과 같이 카디널리티가 높은 데이터를 저장하는 일
  • 100%의 정확성이 요구되는 일
  • 대시보드 종류를 추가하고 싶어요
더보기

Grafana 대시보드 목록에서 원하는 종류의 대시보드를 찾아서

Dashboard → Import 항목에 ID 혹은 URL로 추가하면 된다.


마무리

이번 시간에는 쿠버네티스 모니터링을 위한 시각화 도구인

Prometheus와 Grafana를 설치해보았다.

 

다음 시간에는 Ingress를 통해

외부에 쿠버네티스 클러스터 내 어플리케이션을 노출시켜보도록 할 것이다.


참고자료

Helm | 퀵스타트 가이드

Helm 설치하기 (tistory.com)

Helm 3 설치 & 기본 사용방법 - 호롤리한 하루 (gruuuuu.github.io)

Prometheus Kubernetes | Kubernetes Monitoring | What is Grafana (k21academy.com)

helm-charts/charts/kube-prometheus-stack at main · prometheus-community/helm-charts (github.com)

profile

주녁, DevNote

@junwork

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!