티스토리 뷰
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 없이 안정적 동작
📚 참고 자료
'실제 경험과 인사이트를 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 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Developer Tools
- AI
- ai 개발 도구
- architecture
- authentication
- Kubernetes
- troubleshooting
- Tailwind CSS
- Go
- frontend
- Tax Analysis
- knowledge graph
- backend
- claude code
- Ontology
- react
- Claude
- 개발 도구
- Rag
- SHACL
- AI agent
- Next.js
- security
- workflow
- PYTHON
- LLM
- AI Development
- LangChain
- api gateway
- authorization
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함