https://anjelaaaaaaaa.tistory.com/41
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 서버의 설정을 자동으로 리로드하여 가동 중단없이 새로운 설정을 적용할 수 있도록 돕는 사이드카 컨테이너임.
프로메테우스 설치 끝 !
다음 글은 수집한 메트릭으로 그라파나에서 시각화하는 방법을 들고오겠습니다...
'기타 > kubernetes' 카테고리의 다른 글
[k3s] k3s로 서버 배포하기 (0) | 2024.11.14 |
---|---|
[k3s] No files matching import glob pattern 메시지 출력 문제 해결 (0) | 2024.09.23 |
[kubernetes] ubuntu에 k3s 설치하기 (삭제) (1) | 2024.09.14 |
[kubernetes] Helm으로 프로메테우스, 그라파나 설치 (0) | 2024.08.31 |
[kubernetes] Probe (Readiness probe, Liveness probe) (0) | 2024.08.29 |