기타/kubernetes

[k3s] Prometheus를 사용하여 리소스 수집하기

닉네임없음ㅎ 2024. 11. 18. 21:11

 

 

 

https://anjelaaaaaaaa.tistory.com/41

 

[kubernetes] Helm으로 프로메테우스, 그라파나 설치

[kubernetes] Helm으로 프로메테우스, 그라파나 설치  Helm이란? -> Kubernetes에서 사용하는 패키지 매니저 노드에는 npm, 리눅스에는 apt가 있듯이 쿠버네티스에는 Helm이 있다  helm은 패키지를 

anjelaaaaaaaa.tistory.com

 

 

 

k3s로 서버를 배포했다
서버를 모니터링하기 위해서 Prometheus를 사용해보고자 한다.

* Prometheus란?
Prometheus를 사용하면 쿠버네티스 환경에서 Pod, Deployment, Node, Service 등의 리소스 상태를 모니터링할 수 있다.
-> K3s 클러스터에서 실행되는 모든 Pod와 컨테이너의 메트릭을 수집하여 CPU, 메모리 사용량, 네트워크 트래픽 등을 추적가능하며 
Node의 상태를 모니터링하여 리소스 사용률이나 장애 징후를 감지할 수 있음. 

그리고 Grafana와 통합하여 Prometheus의 데이터를 시각화하여 대시보드를 만들 수 있다.


일단 프로메테우스부터 적용해보자 ! 

1. 프로메테우스 메트릭 저장할 폴더경로를 생성했다.

/home/user/prometheus 

 

2. pv와 pvc 생성.

<prometheus-pv.yaml>
apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-path  # 사용하려는 StorageClass 이름
  hostPath:
    path: /home/user/prometheus  # 호스트 경로 설정
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus-pvc
  namespace: monitoring
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-path  #사용하려는 StorageClass 이름

 

kubectl apply -f prometheus-pv.yaml

pv와 pvc  생성하기



3. values 파일 생성
<prometheus-values.yaml>
server:
  persistentVolume:
    existingClaim: prometheus-pvc

 

=> 이 values 파일을 적용하여 프로메테우스 배포할것임 


4. 프로메테우스 설치 

helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace -f prometheus-values.yaml


(prometheus-values.yaml 파일이 있는 경로에서 실행해야함)

이렇게 설치하고나면 안내문구가 주르르르륵 뜬다 
<문구 내용들.. > 
1. The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.monitoring.svc.cluster.local
-> 프로메테우스 서버가 쿠버네티스 클러스터 내에서 접근할 수 있는 DNS 이름, 포트 80을 통해 접속할 수 있음. 
클러스터 내의 다른 서비스에서 프로메테우스 서버에 접근할 때 사용할 수 있음. 

2. export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=prometheus" -o jsonpath="{.items[0].metadata.name}")
sudo kubectl --namespace monitoring port-forward $POD_NAME 9090
-> 프로메테우스 서버에 로컬에서 접근할 수 있는 url을 설정하기 위한 것.

‘export POD_NAME’ : 프로메테우스 서버의 POD이름을 환경변수로 설정. 
‘kubectl port-forward’ : 프로메테우스 서버의 9090포트를 로컬 머신으로 포트 포워딩 함 
이 명령을 실행하면 로컬 머신의 localhost:9090 에서 프로메테우스 ui에 접근할 수 있음. 

=> 2번 명령어 실행시  
Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode or --write-kubeconfig-group to modify kube config permissions error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
이렇게 권한이 없다는 에러가 뜰 수 있음.  
이 경우 현재 사용자 계정이 `/etc/rancher/k3s/k3s.yaml` 파일에 접근할 권한이 없기 때문임.
이 파일은 ‘k3s’ 클러스터에 접근할 수 있는 ‘kubeconfig’ 파일로, 클러스터에 대한 접근권한을 정의하고 있음. 
파일 권한 수정하면 됨. 

‘k3s.yaml’파일에 접근할 수 있도록 현재 사용자에게 읽기 권한을 부여함. 

sudo chmod 644 /etc/rancher/k3s/k3s.yaml


=> 나는 NodePort를 사용하여 prometheus를 노출할 계획이므로  port-forward 명령어나 prometheus-server.monitoring.svc.cluster.local과 같은 클러스터 내부 DNS는 필요가 없음. 

 

5. 프로메테우스 서비스 연결 (NodePort)
<prometheus-service.yaml>
apiVersion: v1
kind: Service
metadata:
  name: prometheus-server
  namespace: monitor
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 9090
      nodePort: 32001
  selector:
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/instance: prometheus

kubectl apply -f prometheus-service.yaml

서비스 yaml 적용하기 -> 그라파나에서 접근할때 노드포트 사용하기위해서 nodePort를 노출시키는 서비스 적용함. 

 

그리고 서비스를 조회해보면 

kubectl get svc -n monitoring

이렇게 prometheus-server가 NodePort로 노출되어 있는것을 확인할 수 있음. 

 

Pod확인

kubectl get po -n monitoring

prometheus를 설치하면 기본적으로 생성되는 pod들의 목록임. 

1. prometheus-alertmanager
-> prometheus에서 생성된 경고를 처리하고 관리하는 역할
2. prometheus-kube-state-metrics
-> 쿠버네티스 클러스터 상태에 대한 메트릭을 노출하는 서비스
3. prometheus-prometheus-node-exporter
-> 각 노드의 메트릭을 수집하여 프로메테우스가 스크래핑할 수 있도록 하는 서비스
4. prometheus-prometheus-pushgateway
-> prometheus가 직접 스크래핑할 수 없는 짧은 수명의 작업(job)에서 메트릭을 푸시할 수 있도록 함 
5. prometheus-server
-> 클러스터의 중심이 되는 모니터링 시스템. 

prometheus-server를 보면 Running 2/2가 되어있음. 
두개의 컨테이너가 구동되고 있다는 건데 

kubectl describe pod prometheus-server -n monitoring


명령어를 통해 Containers 항목을 살펴보면 
1. prometheus-server
2. prometheus-server-configmap-reload 

두개의 컨테이너가 있다.
prometheus-server는 Prometheus의 메인 서버 컨테이너로, 매트릭 수집과 모니터링 기능을 수행하고
prometheus-server-configmap-reload는 Configmap 변경을 감지하고 Prometheus 서버의 설정을 자동으로 리로드하여 가동 중단없이 새로운 설정을 적용할 수 있도록 돕는 사이드카 컨테이너임.

프로메테우스 설치 끝 !

 

다음 글은 수집한 메트릭으로 그라파나에서 시각화하는 방법을 들고오겠습니다...