본문 바로가기
[Kubernetes]

[k8s] Helm을 통해 Prometheus, Grafana 적용하기

by METAVERSE STORY 2022. 11. 22.
반응형

 

 

 

1. Helm 다운로드

 

helm은 쿠버네티스의 package managing tool이다. 크게 세가지 컨셉을 가지는데

Chart: Helm package이다. app을 실행시키기 위한 모든 리소스가 정의되어 있다.

Repository: chart 들이 공유되는 공간이다. docker hub를 생각하면 된다.

Release: 쿠버네티스 클러스터에서 돌아가는 app들은 모두 고유의 release 버전을 가진다. 

 

 

먼저 curl 명령어를 통해서 helm3 버전을 다운받아 get_helm.sh 라는 파일로 만들어 준다.

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh

 

 

 

 

그 후 모드를 변경해주고 helm을 install 해준다.

chmod 700 get_heml.sh
./get_helm.sh

 

 

 

그 뒤 helm 버전을 확인 해 준다. 

helm version

 

 

2. Prometheus 설치

 

설치에 앞서 먼저 namespace를 정해준다. 

위 다이어그램에서도 확인 할 수 있듯이 NameSpace는 논리적으로 나누는 클러스터 내의 분리 단위이다. 

위에서 보는것처럼 예를 들면 하나의 클러스터에 개발/운영/테스트 환경이 있다. 

그렇다면 네임스페이스를 지정해서 3개의 팀이 하나의 물리적인 클러스터를 이용할 수 있다. 

하나의 클러스터 환경에서 세 환경을 운영하기 너무 복잡하고 혼란이 생길 수 있기 때문에 네임스페이스를 사용해서 각각 환경마다 논리적인 분리를 하며, 각자의 환경을 구분한다. 

또한 ResourceQuota를 사용해 각 네임스페이스마다 CPU, Memory 등 개별적 리소스 할당이 가능하다. 

 

 

 

가장 먼저 kubectl의 네임 스페이스를 만들어 준다.

kubectl create namespace monitoring

 

 

 

 

 helm repository에 prometheus-community라는 이름으로 repo URL을 추가한다.

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

 

 

 

 

prometheus를 설치한다. 

helm install prometheus prometheus-community/prometheus

 

 

 

 

kubectl get pod 명령어를 통해 pod를 확인해 보면 다음과 같은 pod들이 있다. 

  • alertmanager
    • 앞서 말씀드렸던 alerts을 관리하는 파드이다.
  • kube-state-metrics
    • Kubernetes Cluster 내부의 자원(CPU, 메모리, 디스크 및 각 컨테이너가 사용하고 있는 리소스 현황, 네트워크 I/O, 정상 컨테이너, 비정상 컨테이너 개수 등)에 대한 매트릭을 수집해주는 exporter이다.
  • node-exporter
    • 서버 노드의 자원에 대한 매트릭을 수집해주는 exporter이다.
  • pushgateway
    • 매트릭을 푸시할 수 있는 중간 서비스이다.
  • server
    • Prometheus WEB UI를 띄울 수 있는 서버이다.

 

위의 서비스를 보면 alertmanager와 server 이 두개는 계속 Pending 상태임을 확인할 수 있다.

이는 k8s 클러스터에 Storage Class가 정의되어 있지 않기 때문이다. 

그래서 일단 pv 옵션을 false로 변경해줘서 EmptyDir을 사용할 수 있게 해야한다. 

 

 

 

 

 

먼저 문제가 되는 차트를 살펴보자 

helm inspect values prometheus-community/prometheus

 

 

 

 

persistentVolume.enabled가 True이다. 이렇게 표기되어 있는 부분이 총 세군데가 있다. 

이를 수정 할 부분만 따로 파일을 만들어 주면 된다. 

 

 

 

 

vi 편집키를 통해서 volumeF.yaml 이라는 yaml 형식의 파일을 하나 만들어 준다. 

vi volumeF.yaml

 

 

 

 

 

그 후 우리가 변경할 부분만 수정한 후 저장 해 준다. 

alertmanager:
    persistentVolume:
        enabled: false
server:  
    persistentVolume:
        enabled: false
pushgateway: 
    persistentVolume:
        enabled: false

 

 

 

 

그 후 helm upgrade 명령어를 통해서 방금 생성한 volumeF.yaml 파일을 업그레이드 해 준다. 뒤에는 kubernetes의 네임 스페이스와 helm repo 이름/prometheus를 입력해주면 된다. 

helm upgrade -f volumeF.yaml monitoring prometheus-community/prometheus

 

 

 

 

업그레이드가 완료된 후 kubectl get pods를 입력하면 위처럼 pending 중이었던 alertmanager, server가 Running으로 변경 된 것을 확인 할 수 있다. 

 

 

 

 

kubectl get svc를 통해 현재 서비스 되고 있는 목록을 확인해 보니 prometheus가 서비스 하고 있는 것을 확인할 수 있다.

여기서 Server를 ClusterIP -> NodePort로 변경해서 웹에 띄울 것이다. 

 

 

 

 

kubectl의 edit 명령어를 통해서 prometheus-server의 서비스를 수정해 주자.

kubectl edit svc monitoring-prometheus-server

 

 

 

 

위에 위치한 type이 ClusterIp로 되어있는데 이를 NodePort로 변경한 후 저장해 준다. 

 

 

 

 

그 후 다시 kubectl get svc를 통해서 포트를 확인 해 보면 포트 포워딩이 된 것을 확인할 수 있다. 

 

 

 

 

그리고 프로메테우스 서버가 worker1 노드에 위치한 것을 확인할 수 있다. 

 

 

 

 

그 후 우리는 Nat Network로 Virtual Box를 구성했기 때문에 포트포워딩이 필요하다. 

 

 

 

그 후 127.0.0.1:32215로 접속을 해 보면 프로메테우스 서비스를 확인할 수 있다. 

 

 

kublet_running_pods 라는 명령어를 쳐보니 master Node에 pod가 9개 Worker1,2 노드에 각각 5개씩 pod가 존재하는 것을 확인할 수 있다. 

 

 

 

virtualbox로 돌아온 후 kubectl get pods --all-namespaces를 통해 모든 네임스페이스를 포함해 파드를 검색해 본 결과 총 19개의 파드가 뜨는 것을 확인할 수 있었다. 

kubectl get pods --all-namespaces

 

 

3. Grafana 설치

Helm을 통해서 Prometheus를 손쉽게 설치하였고 동작을 확인하였다.

Grafana 역시 Helm을 통해서 설치할 수 있다. 

 

먼저 helm repo add 명령어를 통해서 helm repository에 grafana라는 repo를 추가해 준다. 

helm repo add grafana https://grafana.github.io/helm-charts

 

helm repo list 명령어를 통해서 현재 프로메테우스와 그라파나 repo를 확인할 수 있다. 

helm repo list

 

 

helm install grafana grafana/grafana를 통해서 grafana를 설치 해 준다. 

1번을 보면 Grafana의 admin 계정의 비밀번호를 확인 할 수 있는 명령어를 입력 해 준다.

helm install grafana grafana/grafana

 

 

 

이를 콘솔에 입력하면 비밀번호가 나온다. 

이 비밀번호를 알아내고 앞에서 설정한 prometheus 처럼 포트포워딩을 통해서 Grafana WEB UI로 접속을 해보자.

kubectl get secret --namespace monitor grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

 

 

 

 

먼저 kubectl edit svc grafana를 통해 grafana의 서비스를 수정해 주자

kubectl edit svc grafana

 

 

 

 

이 역시 Cluster IP를 NodePort로 수정 해 주었다. 

 

그 후 서비스를 다시 확인해 보니 grafana 역시 포트 포워딩이 잘 된 것을 확인 할 수 있다. 

 

그 후 kubectl get pods를 통해서 grafana가 현재 worker1에 있는 것을 확인할 수 있었다. 

 

 

 

그 후 아까 Prometheus 처럼 포트 포워딩을 진행 해 준다. 

 

 

 

 

그렇다면 Welcome to Grafana 라는 그라파나 화면이 나오게 된다.

이제 여기에 아까 생성된 admin 유저와 비밀번호를 입력한다. 

 

 

 

로그인이 성공적으로 된 모습을 확인 할 수 있다. 

 

 

이제 프로메테우스랑 그라파나를 연동시켜야 하므로 Configuration을 클릭한다.

Add data source를 클릭 해 준다.

 

 

 

 

그럼 이런식으로 데이터 소스들이 존재한다. 

prometheus를 선택 해 준다.

 

 

URL에 Prometheus가 위치한 Node의 IP를 적은 후 포트포워딩한 포드를 적어준 후 Save & Test 를 눌러 주었다. 그러자 연동이 잘 된 것을 확인 할 수 있다. 

 

 

이제 대시보드를 꾸며 줄 것이다. 

Dashboards | Grafana Labs

 

Dashboards | Grafana Labs

 

grafana.com

grafana 홈페이지에 들어온 후 Dashboard에 kubernetes라고 검색한 후 마음에 드는 대시보드를 클릭해라. 

 

 

 

원하는 대시보드를 클릭하면 우측 하단에 ID가 존재한다. 이 대시보드의 경우 8588이라는 ID가 존재한다. 

 

 

 

그 후 Grafana로 돌아와서 Dashboards -> Import를 클릭해 Import via grafana.com에 8588을 작성한 후 Load를 누른다. 

 

 

그럼 위와같은 화면이 나오게 된다. 맨 밑을 프로메테우스로 선택해 준 후 Import를 눌러준다. 

 

 

 

그럼 이런식으로 kubernetes에 대한 Dashboard를 확인 할 수 있다. 

 

 

 

 

참조 문서

Kuberntes - Monitoring에 대해 알아보자 (Prometheus, Grafana) [실습환경 minikube] (tistory.com)

 

Kuberntes - Monitoring에 대해 알아보자 (Prometheus, Grafana) [실습환경 minikube]

Kubernetes 환경에서 수많은 클러스터와 파드들이 정상적으로 동작하는지 좀비 프로세스는 없는지 등을 확인하려면 우리는 모니터링 툴의 도움을 받아야 합니다. 수많은 모니터링 툴 중 오늘은 Pro

newbiecs.tistory.com

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

 

Helm 3 설치 & 기본 사용방법

1. Overview 이번 문서에서는 Helm의 사용법에 대해서 알아보겠습니다. 2. Prerequisites 쿠버네티스 클러스터가 깔려있어야 합니다. -> 호롤리한 하루/Install Kubernetes on CentOS/RHEL 참고. helm을 설치할 위치

gruuuuu.github.io

Prometheus & Grafana로 Kubernetes 모니터링하기 (velog.io)

 

Prometheus & Grafana로 Kubernetes 모니터링하기

프로메테우스와 그라파나를 알아보고 설치하여 쿠버네티스 리소스를 모니터링 해보겠습니다.

velog.io

Prometheus 적용기 | by 배선우 | connectfit | Medium

 

반응형

댓글