1. Helm 설치
먼저 Helm이 설치되어 있지 않다면 Helm을 설치합니다.
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
2. Helm 리포지토리 추가
Prometheus와 Grafana 설치를 위한 Helm 차트 리포지토리를 추가합니다.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
3. 네임스페이스 생성
Prometheus와 Grafana가 배포될 monitoring 네임스페이스를 생성합니다.
kubectl create namespace monitoring
4. Prometheus 및 Grafana 설치
Prometheus 및 Grafana를 설치합니다.
Prometheus 설치
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring
Grafana 별도 설치
kube-prometheus-stack에 Grafana가 포함되어 있지만, 별도로 설치하여 최신 버전을 사용하거나 독립적으로 관리하고 싶다면 다음 명령어를 사용합니다.
helm install grafana grafana/grafana --namespace monitoring
5. NodePort로 Prometheus 및 Grafana 노출
Prometheus와 Grafana에 외부에서 접근할 수 있도록 NodePort로 서비스를 노출합니다.
Grafana 서비스 노출
kubectl patch svc grafana -n monitoring -p '{"spec": {"type": "NodePort"}}'
Prometheus 서비스 노출
kubectl patch svc prometheus-kube-prometheus-prometheus -n monitoring -p '{"spec": {"type": "NodePort"}}'
또는 직접 포트 수정방법
kubectl edit svc grafana -n monitoring
###
service:
type: NodePort
nodePort: 31001
6. NodePort 확인
노출된 서비스를 확인하여 할당된 NodePort를 확인합니다.
kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana NodePort 10.109.12.235 <none> 80:32376/TCP 5m
prometheus-kube-prometheus-prometheus NodePort 10.106.159.77 <none> 9090:32415/TCP 5m
...
여기서 Grafana의 NodePort는 32376, Prometheus의 NodePort는 32415입니다.
7. Grafana 관리자 비밀번호 확인
Grafana의 기본 관리자 계정 (admin)의 비밀번호를 확인합니다.
kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
출력된 비밀번호를 기록해둡니다.
8. Grafana 및 Prometheus 접속
외부에서 Grafana와 Prometheus에 접속하기 위해 노드의 외부 IP와 NodePort를 사용합니다.
- Grafana 접속
http://<노드의 외부 IP>:<Grafana NodePort>
예: http://192.168.0.100:32376
- Prometheus 접속
http://<노드의 외부 IP>:<Prometheus NodePort>
예: http://192.168.0.100:32415
브라우저에서 해당 주소로 접속하여 Grafana에 로그인합니다.
9. auw-ai 네임스페이스 모니터링 설정 (PodMonitor 사용)
auw-ai 네임스페이스의 모든 Pod를 자동으로 모니터링하기 위해 PodMonitor를 설정합니다.
PodMonitor 설정 파일 (podmonitor_auwai.yaml)
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: auw-ai-podmonitor
namespace: monitoring
labels:
release: prometheus
spec:
namespaceSelector:
matchNames:
- auw-ai
selector:
matchLabels:
monitoring: enabled
podMetricsEndpoints:
- port: http
path: /metrics
interval: 15s
적용 방법
kubectl apply -f podmonitor_auwai.yaml
10. Pod에 라벨 추가
auw-ai 네임스페이스의 Deployment 템플릿에 monitoring: enabled 라벨을 추가하여 새로운 Pod가 생성될 때 자동으로 모니터링되도록 합니다.
Deployment 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
namespace: auw-ai
spec:
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
monitoring: enabled
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 8080
name: http
이렇게 하면 해당 Deployment에서 생성된 Pod에 monitoring: enabled 라벨이 추가되고, PodMonitor에 의해 자동으로 메트릭이 수집됩니다.
11. Grafana에서 데이터 소스 추가
Grafana에서 Prometheus를 데이터 소스로 추가합니다.
- Grafana 로그인: 브라우저에서 Grafana에 접속하고, 앞서 확인한 관리자 비밀번호로 로그인합니다.
- 데이터 소스 추가:
- 왼쪽 사이드바에서 **"설정" (톱니바퀴 아이콘) → "Data Sources"**를 클릭합니다.
- "Add data source" 버튼을 클릭합니다.
- **"Prometheus"**를 선택합니다.
- URL에 Prometheus의 클러스터 내부 주소를 입력합니다:
- "Save & Test" 버튼을 클릭하여 연결이 성공적으로 이루어졌는지 확인합니다.
12. 예시 대시보드 추가
Grafana에서 사전 정의된 대시보드를 임포트하여 모니터링을 시작할 수 있습니다.
1. 기본적인 Kubernetes 대시보드 추가
- Kubernetes 클러스터 모니터링 (ID: 6417)
- 왼쪽 사이드바에서 **"+" → "Import"**를 클릭합니다.
- **"Import via grafana.com"**에서 Dashboard ID에 6417을 입력하고 **"Load"**를 클릭합니다.
- Prometheus 데이터 소스를 선택하고 **"Import"**를 클릭합니다.
2. auw-ai 네임스페이스 전용 대시보드 추가
- 기존 대시보드에서 auw-ai 네임스페이스만 표시하도록 필터링하거나, 새로운 대시보드를 생성합니다.
대시보드 필터 설정 방법
- 대시보드 상단의 변수(Variables) 중 **"Namespace"**를 찾습니다.
- 드롭다운 메뉴에서 auw-ai 네임스페이스를 선택합니다.
- 대시보드의 모든 패널이 auw-ai 네임스페이스의 메트릭만 표시하도록 업데이트됩니다.
새로운 대시보드 생성 방법
- 왼쪽 사이드바에서 **"+" → "Dashboard"**를 클릭합니다.
- **"Add new panel"**을 클릭하여 새로운 패널을 추가합니다.
- "Query" 섹션에서 다음과 같이 auw-ai 네임스페이스의 메트릭을 조회하는 Prometheus 쿼리를 입력합니다.
- CPU 사용량
sum(rate(container_cpu_usage_seconds_total{namespace="auw-ai"}[5m])) by (pod)
- 메모리 사용량
sum(container_memory_usage_bytes{namespace="auw-ai"}) by (pod)
- CPU 사용량
- 원하는 시각화 유형을 선택하고 **"Apply"**를 클릭합니다.
- 필요한 만큼 패널을 추가하여 대시보드를 구성합니다.
- 완료되면 "Save" 버튼을 클릭하여 대시보드를 저장합니다.
13. 요약
- Helm으로 Prometheus 및 Grafana 설치: Helm을 사용하여 Prometheus 및 Grafana를 설치합니다.
- NodePort로 서비스 노출: Prometheus와 Grafana 서비스를 NodePort로 노출하여 외부에서 접근할 수 있도록 설정합니다.
- Grafana 관리자 비밀번호 확인: Grafana의 관리자 비밀번호를 확인하여 로그인 준비를 합니다.
- PodMonitor 설정으로 auw-ai 네임스페이스 모니터링: PodMonitor를 설정하여 해당 네임스페이스의 모든 Pod를 자동으로 모니터링합니다.
- Deployment에 라벨 추가: Pod에 monitoring: enabled 라벨을 자동으로 추가하여 모니터링을 활성화합니다.
- Grafana에서 데이터 소스 및 대시보드 설정: Grafana에서 Prometheus를 데이터 소스로 추가하고, 예시 대시보드를 임포트하거나 생성하여 모니터링을 시작합니다.
이 과정을 따라 설정하면 Prometheus와 Grafana를 통해 Kubernetes 클러스터 및 auw-ai 네임스페이스의 리소스를 효과적으로 모니터링할 수 있습니다.
'Come on IT > DevOps' 카테고리의 다른 글
K8s namespace가 deleted 안될 때 (feat. monitoring) (0) | 2024.10.14 |
---|---|
worker node에서 명령어 실행이 안될 때 해결방법 (0) | 2024.10.06 |
쿠버네티스 GPU 연결 방법 (feat. gpu-operater) (3) | 2024.10.06 |
Kubernetes kubeadm init 오류 및 해결 방법 (0) | 2024.10.02 |
쿠버네티스(K8s) 명령어 정리 (1) | 2024.10.01 |