-
클러스터 전체 모니터링을 위한 VictoriaMetrics 설치 및 관리실제 경험과 인사이트를 AI와 함께 정리한 글 2025. 10. 21. 21:35
VictoriaMetrics K8s Stack
클러스터 전체 모니터링을 위한 VictoriaMetrics 설치 및 관리
📊 아키텍처
monitoring 네임스페이스 (Infrastructure Layer) ├── VictoriaMetrics Operator ├── VMSingle (메트릭 스토리지) ├── VMAgent (메트릭 수집 - 모든 네임스페이스) ├── VMAlert (알림 규칙 엔진) ├── Alertmanager (알림 관리) ├── Grafana (시각화) ├── Kube-State-Metrics (K8s 리소스 상태) └── Node Exporter (노드 메트릭)🎯 모니터링 범위
클러스터 전체
- ✅ 모든 네임스페이스의 Pod 메트릭
- ✅ 모든 노드의 시스템 메트릭
- ✅ Kubernetes 리소스 상태 (Deployment, StatefulSet, Service 등)
imprun.dev 앱 모니터링
- ✅ imprun-server, imprun-console (imprun-system 네임스페이스)
- ✅ MongoDB, Redis (KubeBlocks)
- ✅ 사용자 앱 런타임 (동적 생성)
🚀 설치
사전 요구사항
Helm Repository 추가
helm repo add vm https://victoriametrics.github.io/helm-charts/ helm repo updatecert-manager 및 ClusterIssuer (Grafana HTTPS용)
- ClusterIssuer
letsencrypt-cloudflare필요
- ClusterIssuer
설치 방법
cd k8s/victoriametrics # 1. Dry-run으로 검증 helm install vm vm/victoria-metrics-k8s-stack \ --namespace monitoring \ --create-namespace \ --values values-production.yaml \ --dry-run --debug # 2. 실제 설치 helm install vm vm/victoria-metrics-k8s-stack \ --namespace monitoring \ --create-namespace \ --values values-production.yaml \ --timeout 10m📝 설치 확인
Pod 상태 확인
kubectl get pods -n monitoring # 예상 출력: # NAME READY STATUS RESTARTS AGE # vmalertmanager-vm-... 2/2 Running 0 2m # vmalert-vm-... 2/2 Running 0 2m # vm-grafana-... 3/3 Running 0 2m # vm-kube-state-metrics-... 1/1 Running 0 2m # vm-prometheus-node-exporter-... 1/1 Running 0 2m # vm-victoria-metrics-k8s-stack-operator-... 1/1 Running 0 2m # vm-victoria-metrics-operator-... 1/1 Running 0 2m # vmagent-vm-... 2/2 Running 0 2m # vmsingle-vm-... 2/2 Running 0 2mVMSingle 데이터 수집 확인
# VMSingle이 메트릭을 수집하는지 확인 kubectl port-forward -n monitoring svc/vmsingle-vm-victoria-metrics-k8s-stack 8428:8428 # 브라우저에서 열기: http://localhost:8428/vmui # 쿼리 예시: upGrafana 접속
방법 1: Port Forward (로컬)
kubectl port-forward -n monitoring svc/vm-grafana 3000:80 # 브라우저: http://localhost:3000 # 로그인: admin / admin방법 2: HTTPS (프로덕션)
https://grafana.imprun.dev # 로그인: admin / admin (⚠️ 변경 필수!)🔧 업그레이드
cd k8s/victoriametrics # Helm Repository 업데이트 helm repo update # 업그레이드 helm upgrade vm vm/victoria-metrics-k8s-stack \ --namespace monitoring \ --values values-production.yaml \ --timeout 10m🗑️ 삭제
# Helm release 삭제 helm uninstall vm -n monitoring # PVC 삭제 (데이터 완전 삭제 시) kubectl delete pvc -n monitoring -l app.kubernetes.io/instance=vm # Namespace 삭제 kubectl delete namespace monitoring📊 리소스 사용량
운영 환경 (values-production.yaml)
총 요청 (requests): 650m CPU, 1.8Gi Memory 총 제한 (limits): 2.3 CPU, 4.2Gi Memory 스토리지: 23GB (VMSingle 20GB + Grafana 2GB + Alertmanager 1GB)주요 컴포넌트별
컴포넌트 CPU (requests) Memory (requests) Storage VMSingle 200m 1Gi 20Gi VMAgent 50m 128Mi - Grafana 50m 192Mi 2Gi Kube-State-Metrics 50m 128Mi - 🔍 주요 메트릭 쿼리 (PromQL)
시스템 메트릭
# CPU 사용률 (노드별) 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # 메모리 사용률 (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 # 디스크 사용률 (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100Kubernetes 메트릭
# Pod CPU 사용량 sum(rate(container_cpu_usage_seconds_total{namespace="imprun-system"}[5m])) by (pod) # Pod 메모리 사용량 sum(container_memory_working_set_bytes{namespace="imprun-system"}) by (pod) # Pod 재시작 횟수 kube_pod_container_status_restarts_total{namespace="imprun-system"}imprun.dev 앱 메트릭
# 앱별 CPU 사용량 sum(rate(container_cpu_usage_seconds_total{namespace="imprun-system",pod=~".*-runtime-.*"}[5m])) by (pod) # 앱별 메모리 사용량 sum(container_memory_working_set_bytes{namespace="imprun-system",pod=~".*-runtime-.*"}) by (pod)⚙️ 커스터마이징
Grafana 비밀번호 변경
# values-production.yaml grafana: adminPassword: "your-secure-password"데이터 보존 기간 변경
# values-production.yaml vmsingle: spec: retentionPeriod: "180" # 90일 → 180일 (6개월)스크래핑 간격 조정
# values-production.yaml vmagent: spec: scrapeInterval: 30s # 60s → 30s (더 자주 수집)🐛 트러블슈팅
VMAgent가 메트릭을 수집하지 못함
# VMAgent 로그 확인 kubectl logs -n monitoring -l app.kubernetes.io/name=vmagent --tail=100 # 일반적인 원인: # 1. VMSingle URL 오류 → remoteWrite.url 확인 # 2. RBAC 권한 부족 → ServiceAccount 확인 # 3. 네트워크 정책 차단 → NetworkPolicy 확인Grafana에 데이터가 보이지 않음
# Grafana 데이터소스 확인 kubectl exec -n monitoring <grafana-pod> -- curl http://vmsingle-vm-victoria-metrics-k8s-stack.monitoring.svc:8428/api/v1/query?query=up # 정상: {"status":"success","data":...} # 실패: connection refused → VMSingle 상태 확인Certificate 발급 실패
# Certificate 상태 확인 kubectl describe certificate grafana-imprun-dev-tls -n monitoring # cert-manager 로그 kubectl logs -n cert-manager -l app=cert-manager --tail=100📚 참고 문서
💡 팁
1. 대시보드 추천
- Kubernetes / Compute Resources / Cluster: 클러스터 전체 리소스 사용량
- Kubernetes / Compute Resources / Namespace (Pods): 네임스페이스별 Pod 리소스
- Node Exporter Full: 노드 상세 메트릭
2. 알림 설정
Alertmanager를 통해 Slack, Email, PagerDuty 등으로 알림 전송 가능
- values-production.yaml의
alertmanager.config섹션 수정
3. 백업 전략
# VMSingle 데이터 백업 kubectl exec -n monitoring <vmsingle-pod> -- tar czf /tmp/backup.tar.gz /storage kubectl cp monitoring/<vmsingle-pod>:/tmp/backup.tar.gz ./backup.tar.gz🔐 보안 권장사항
- Grafana 비밀번호 변경: 기본 admin/admin 즉시 변경
- Ingress TLS: 프로덕션에서는 반드시 HTTPS 사용
- RBAC 최소 권한: ServiceAccount 권한 최소화
- NetworkPolicy: 필요한 트래픽만 허용
📈 성능 최적화
메모리 부족 시
vmsingle: spec: resources: limits: memory: 4Gi # 2Gi → 4Gi디스크 부족 시
vmsingle: spec: retentionPeriod: "30" # 90일 → 30일 storage: resources: requests: storage: 50Gi # 20Gi → 50Gi'실제 경험과 인사이트를 AI와 함께 정리한 글' 카테고리의 다른 글
Kubernetes 리소스 최적화: ARM64 환경에서 효율적으로 운영하기 (0) 2025.10.22 Helm 차트 관리 Best Practices: Umbrella Chart부터 Secret 관리까지 (0) 2025.10.22 VictoriaMetrics K8s Stack 설치 가이드 (0) 2025.10.21 victoria-metrics-k8s-stack vs victoria-metrics-single (0) 2025.10.21 VictoriaMetrics 운영 환경 업그레이드 가이드 (0) 2025.10.21