티스토리 뷰

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-operator

2. 리소스 사용량 확인

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:9093

6. 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 없이 안정적 동작

📚 참고 자료

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함