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 를 눌러 주었다. 그러자 연동이 잘 된 것을 확인 할 수 있다.
이제 대시보드를 꾸며 줄 것이다.
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)
Helm 3 설치 & 기본 사용방법 - 호롤리한 하루 (gruuuuu.github.io)
Prometheus & Grafana로 Kubernetes 모니터링하기 (velog.io)
Prometheus 적용기 | by 배선우 | connectfit | Medium
'[Kubernetes]' 카테고리의 다른 글
sample devops end to end project v1- devops project | ci/cd declarative pipeline using devops tools (0) | 2023.07.22 |
---|---|
[마이크로 서비스] 사용하지 않는 경우!! (0) | 2023.07.11 |
[k8s] Deployments란 무엇인가? & Update 방식 (0) | 2022.11.23 |
[k8s] YAML 기본 문법 및 k8s yaml 작성방법 (0) | 2022.11.23 |
[k8s] kubernetes의 Service가 무엇인가? (0) | 2022.11.22 |
[k8s] 파드란 무엇인가, 파드 만들기(명령어로 생성 및 yaml로 생성) (0) | 2022.11.21 |
[K8s] 쿠버네티스란 무엇인가? (0) | 2022.11.16 |
[k8s] 프로메테우스란 무엇인가? (개념 및 아키텍쳐) (0) | 2022.11.15 |
댓글