Prometheus 배포 도구: Helm (애플리케이션 배포 간편화 도구)
환경: Ubuntu 20.04(Master node1, Worker node2)
Helm 사용해 Bare Metal K8s Cluster 환경에 Prometheus를 배포한다.
프로메테우스는 헬름으로 쉽게 설치 가능하다. 다만, NFS 디렉토리를 만들고, NFS 디렉토리를 쿠버네티스 환경에서 사용할 수 있도록 PV 와 PVC로 구성해야 한다. 또한, 온프레미스 환경이므로 MetalLB 를 구성해야 한다.
export DESIRED_VERSION=v3.2.1 # v3.2.1 으로 다운로드
wget https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/713e8464a0600d275d31897752641b79ea58a75b/ch5/5.2.3/helm-install.sh
여기서는 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 책을 따라 설치를 진행해본다.
helm repo add edu https://iac-source.github.io/helm-charts
helm repo list # 배포 되었는지 확인
helm repo update
helm install metallb edu/metallb --namespace=metallb-system --create-namespace --set controller.tag=v0.8.3 --set speaker.tag=v0.8.3 --set configmap.ipRange=192.168.8.111-192.168.8.130
IP range: 192.168.8.111-192.168.8.130 로 설정
metalLB 가 제대로 배포되었는지 확인
간단하게 디플로이먼트 배포하여 IP 가 정상적으로 할당되었는지 확인.
⚡ root@master ~/prometheus k create deployment echo-ip --image=sysnet4admin/echo-ip
deployment.apps/echo-ip created
⚡ root@master ~/prometheus k expose deployment echo-ip --type=LoadBalancer --port=80
service/echo-ip exposed
⚡ root@master ~/prometheus k get svc echo-ip
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
echo-ip LoadBalancer 10.111.110.176 192.168.8.111 80:31418/TCP 7s
[Master]
apt-get -y install nfs-server
systemctl enable nfs-server
systemctl status nfs-server
[Worker]
apt-get -y install nfs-common
systemctl restart nfs-utils
systemctl enable nfs-utils
[Master]
./nfs-exporter.sh prometheus/server/
k apply -f prometheus-server-volume.yaml
chown 1000:1000 /nfs_shared/prometheus/server
✘ ⚡ root@master ~/prometheus k get pv prometheus-server
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
prometheus-server 10Gi RWX Retain Bound default/prometheus-server 34m
✘ ⚡ root@master ~/prometheus k get pvc prometheus-server
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
prometheus-server Bound prometheus-server 10Gi RWX
wget https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/main/ch6/6.2.1/prometheus-server-preconfig.sh
wget https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/main/ch6/6.2.1/prometheus-install.sh
wget https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/main/ch6/6.2.1/prometheus-server-volume.yaml
wget https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/main/ch6/6.2.1/nfs-exporter.sh
prometheus-server-preconfig.sh 경로 맞게 수정 후 실행
./prometheus-server-preconfig.sh
./prometheus-install.sh
node-exporter 가 여러개인 이유는 각 노드마다 메트릭을 수집하기 위해 데몬셋으로 설치했기 때문이다.
prometheus-server pod가 ContainerCreating 상태로 문제가 생겼다.
원인은 프로메테우스 설치 전 배포해줘야하는 nfs-server를 깜빡해서 mount에 실패했기 때문.
따라서 다음과 같은 작업이 필요하다.
- 생성한 pv, pvc, prometheus-server pod 등을 지운다.
- nfs-server 배포
- prometheus-server-volume.yaml 재 배포
k delete -f prometheus-server-volume.yaml
⚡ root@master ~/prometheus k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
prometheus-server 10Gi RWX Retain Terminating default/prometheus-server 131m
delete 해도 STATUS == Terminating 상태에서 지워지지 않는다.
kubectl delete pv (pv name) --grace-period=0 --force 명령어로도 삭제가 불가능.
쿠버네티스 공식 문서 에 따르면 삭제가 불가능 한 이유는 Finalizer 때문이다. finalizer에 대해 짧게 정리 하였다. 해당 포스팅에서는 해결만 한다.
kubectl edit pv
kubectl edit pvc
위 finalizer를 삭제해준다.
✘ ⚡ root@master ~/prometheus k get pv
No resources found
⚡ root@master ~/prometheus k get pvc
No resources found in default namespace.
삭제 완료
⚡ root@master ~/prometheus k apply -f prometheus-server-volume.yaml
persistentvolume/prometheus-server created
persistentvolumeclaim/prometheus-server created
Pod가 정상적으로 배포 되었다!
⚡ root@master ~ kubectl get svc prometheus-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-server LoadBalancer 10.104.227.46 192.168.8.111 80:31019/TCP 18h
EXTERNAL-IP 로 접속하여 웹 UI 사용
Reference