-
VictoriaMetrics 운영 환경 업그레이드 가이드실제 경험과 인사이트를 AI와 함께 정리한 글 2025. 10. 21. 20:50
VictoriaMetrics 운영 환경 업그레이드 가이드
최소 설정 → 운영 환경 설정으로 업그레이드
📋 변경 사항 요약
컴포넌트 현재 (MVP) 변경 후 (운영) 이유 Kube-State-Metrics ❌ 비활성화 ✅ 활성화 Pod 상태 모니터링 필수 VMAlert ❌ 비활성화 ✅ 활성화 장애 알림 필요 Alertmanager ❌ 비활성화 ✅ 활성화 알림 관리 필요 VMSingle 보관 기간 1개월 3개월 트렌드 분석 VMSingle 스토리지 10GB 20GB 3개월 보관 VMSingle 메모리 512Mi-1Gi 1-2Gi 안정성 총 리소스 (requests) 250m CPU, 912Mi 650m CPU, 1.8Gi +160% 🔧 업그레이드 방법
옵션 A: 다운타임 없는 업그레이드 (권장)
기존 CRD를 수정하여 점진적으로 컴포넌트 추가
# 1. Kube-State-Metrics 설치 helm install kube-state-metrics prometheus-community/kube-state-metrics \ --namespace monitoring \ --set resources.requests.cpu=50m \ --set resources.requests.memory=128Mi \ --set resources.limits.cpu=200m \ --set resources.limits.memory=256Mi # 2. VMSingle 업그레이드 (보관 기간 & 스토리지) kubectl edit vmsingle vm-victoria-metrics-k8s-stack -n monitoring # spec.retentionPeriod: "1" → "90" # spec.resources.limits.memory: 1Gi → 2Gi # spec.resources.requests.memory: 512Mi → 1Gi # spec.storage.resources.requests.storage: 10Gi → 20Gi # 3. VMAlert 추가 kubectl apply -f - <<EOF apiVersion: operator.victoriametrics.com/v1beta1 kind: VMAlert metadata: name: vm-victoria-metrics-k8s-stack namespace: monitoring spec: evaluationInterval: 30s datasource: url: http://vmsingle-vm-victoria-metrics-k8s-stack.monitoring.svc:8428 notifier: url: http://vmalertmanager-vm-victoria-metrics-k8s-stack.monitoring.svc:9093 resources: requests: cpu: 50m memory: 128Mi limits: cpu: 200m memory: 256Mi replicaCount: 1 EOF # 4. Alertmanager 추가 kubectl apply -f - <<EOF apiVersion: operator.victoriametrics.com/v1beta1 kind: VMAlertmanager metadata: name: vm-victoria-metrics-k8s-stack namespace: monitoring spec: replicaCount: 1 retention: 120h resources: requests: cpu: 25m memory: 64Mi limits: cpu: 100m memory: 128Mi storage: volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi EOF # 5. VMServiceScrape 추가 (Kube-State-Metrics 수집) kubectl apply -f - <<EOF apiVersion: operator.victoriametrics.com/v1beta1 kind: VMServiceScrape metadata: name: kube-state-metrics namespace: monitoring spec: selector: matchLabels: app.kubernetes.io/name: kube-state-metrics endpoints: - port: http interval: 60s EOF # 6. 상태 확인 kubectl get pods -n monitoring kubectl top pods -n monitoring옵션 B: Helm 차트 재설치 (다운타임 있음)
기존 설정을 완전히 삭제하고 Helm으로 재설치
# 1. 기존 리소스 백업 (Optional - 데이터 보존하려면) kubectl get vmsingle,vmagent,vmservicescrape -n monitoring -o yaml > backup.yaml # 2. 기존 리소스 삭제 kubectl delete vmsingle,vmagent -n monitoring --all # ⚠️ VMSingle PVC는 보존됨 (데이터 유지) # 3. Helm 저장소 추가 helm repo add vm https://victoriametrics.github.io/helm-charts/ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update # 4. Helm으로 재설치 helm install victoria-metrics vm/victoria-metrics-k8s-stack \ --namespace monitoring \ --values victoriametrics-values-production.yaml \ --timeout 10m # 5. 상태 확인 kubectl get pods -n monitoring -w📊 업그레이드 후 확인 사항
1. Pod 상태 확인
kubectl get pods -n monitoring # 예상 Pod: # - vmsingle-vm-victoria-metrics-k8s-stack # - vmagent-vm-victoria-metrics-k8s-stack # - vmalert-vm-victoria-metrics-k8s-stack (신규) # - vmalertmanager-vm-victoria-metrics-k8s-stack (신규) # - vm-grafana # - vm-prometheus-node-exporter (4개) # - kube-state-metrics (신규) # - vm-victoria-metrics-operator2. 리소스 사용량 확인
kubectl top pods -n monitoring # 예상 사용량: # VMSingle: ~400-600Mi (이전 398Mi에서 증가 예상) # VMAlert: ~50-100Mi (신규) # Alertmanager: ~30-50Mi (신규) # Kube-State-Metrics: ~80-150Mi (신규)3. Kube-State-Metrics 메트릭 수집 확인
# VMSingle에 kube_pod_status_phase 메트릭이 있는지 확인 kubectl port-forward -n monitoring svc/vmsingle-vm-victoria-metrics-k8s-stack 8428:8428 & curl -s 'http://localhost:8428/api/v1/query?query=kube_pod_status_phase' | jq # 결과에 데이터가 있어야 함4. VMAlert 상태 확인
kubectl get vmalert -n monitoring # STATUS: operational # VMAlert가 규칙을 로드했는지 확인 kubectl logs -n monitoring -l app.kubernetes.io/name=vmalert | grep "rules loaded"5. Alertmanager 설정 확인
kubectl get vmalertmanager -n monitoring # STATUS: operational # Alertmanager UI 접속 (port-forward) kubectl port-forward -n monitoring svc/vmalertmanager-vm-victoria-metrics-k8s-stack 9093:9093 & # http://localhost:90936. Grafana 대시보드 확인
# Grafana에서 kube-state-metrics 대시보드 확인 # https://grafana.imprun.dev # 1. Dashboards → Browse # 2. Kubernetes / Pods 대시보드 열기 # 3. imprun-system 네임스페이스 선택 # 4. Pod 상태가 표시되는지 확인🐛 트러블슈팅
문제 1: VMSingle PVC 확장 실패
증상:
Failed to modify PVC: spec is immutable해결:
# StorageClass가 volume expansion을 지원하는지 확인 kubectl get sc -o json | jq '.items[] | {name: .metadata.name, allowVolumeExpansion: .allowVolumeExpansion}' # 지원하지 않는 경우: 새 PVC 생성 후 데이터 마이그레이션 필요 # 1. VMSingle Pod 중지 kubectl scale deploy vmsingle-vm-victoria-metrics-k8s-stack --replicas=0 -n monitoring # 2. 새 PVC 생성 (20GB) kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: vmsingle-new-pvc namespace: monitoring spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi EOF # 3. 임시 Pod로 데이터 복사 # (복잡하므로 별도 문서 참조)문제 2: Kube-State-Metrics 메트릭이 수집되지 않음
증상:
curl 'http://localhost:8428/api/v1/query?query=kube_pod_status_phase' # {"data":{"result":[]}} # 결과 없음확인:
# 1. Kube-State-Metrics Pod가 Running인지 kubectl get pods -n monitoring -l app.kubernetes.io/name=kube-state-metrics # 2. VMAgent가 Kube-State-Metrics를 발견했는지 kubectl logs -n monitoring -l app.kubernetes.io/name=vmagent | grep kube-state-metrics # 3. VMServiceScrape가 생성되었는지 kubectl get vmservicescrape -n monitoring kube-state-metrics해결:
# VMServiceScrape 재생성 kubectl delete vmservicescrape kube-state-metrics -n monitoring kubectl apply -f - <<EOF apiVersion: operator.victoriametrics.com/v1beta1 kind: VMServiceScrape metadata: name: kube-state-metrics namespace: monitoring spec: selector: matchLabels: app.kubernetes.io/name: kube-state-metrics endpoints: - port: http interval: 60s EOF # VMAgent Pod 재시작 kubectl delete pod -n monitoring -l app.kubernetes.io/name=vmagent문제 3: VMAlert가 Alertmanager를 찾지 못함
증상:
kubectl logs -n monitoring -l app.kubernetes.io/name=vmalert # ERROR: failed to send alerts to alertmanager: connection refused확인:
# Alertmanager Service 존재 여부 kubectl get svc -n monitoring | grep alertmanager # VMAlert 설정 확인 kubectl get vmalert vm-victoria-metrics-k8s-stack -n monitoring -o yaml | grep notifier -A5해결:
# VMAlert 설정 수정 kubectl edit vmalert vm-victoria-metrics-k8s-stack -n monitoring # spec.notifier.url을 올바른 Service 이름으로 수정 # url: "http://vmalertmanager-vm-victoria-metrics-k8s-stack.monitoring.svc:9093"📈 성능 모니터링
리소스 사용량 추이
# 1시간 후 리소스 사용량 확인 kubectl top pods -n monitoring # 예상 증가량: # - 총 메모리: 835Mi → 1.5-2Gi (+80-140%) # - 총 CPU: 22m → 60-100m (+170-350%)메트릭 개수 증가
# Kube-State-Metrics 추가 후 시계열 수 확인 curl -s 'http://localhost:8428/api/v1/label/__name__/values' | jq '. | length' # 예상: # - 이전: ~500-1000 시계열 # - 이후: ~2000-3000 시계열 (Kube-State-Metrics가 많은 메트릭 추가)✅ 업그레이드 완료 체크리스트
- Kube-State-Metrics Pod Running
- VMAlert Pod Running
- Alertmanager Pod Running
-
kube_pod_status_phase메트릭 수집 확인 - VMAlert 규칙 로드 확인
- Alertmanager UI 접속 확인
- Grafana 대시보드에서 Pod 상태 표시 확인
- 리소스 사용량이 예상 범위 내 (총 메모리 <3Gi)
- 모든 Pod가 CrashLoopBackOff 없이 안정적 동작
📚 참고 자료
'실제 경험과 인사이트를 AI와 함께 정리한 글' 카테고리의 다른 글
VictoriaMetrics K8s Stack 설치 가이드 (0) 2025.10.21 victoria-metrics-k8s-stack vs victoria-metrics-single (0) 2025.10.21 Prometheus vs VictoriaMetrics 비교 분석 (0) 2025.10.21 Claude Code MCP Serena 완벽 가이드: 토큰 70% 절약하는 무료 AI 코딩 어시스턴트 설치와 활용법 (0) 2025.10.03 MCP + LSP의 시너지 - Serena가 Claude Code를 근본적으로 향상시키는 원리 (0) 2025.10.01