티스토리 뷰
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 2m
VMSingle 데이터 수집 확인
# VMSingle이 메트릭을 수집하는지 확인
kubectl port-forward -n monitoring svc/vmsingle-vm-victoria-metrics-k8s-stack 8428:8428
# 브라우저에서 열기: http://localhost:8428/vmui
# 쿼리 예시: up
Grafana 접속
방법 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="/"})) * 100
Kubernetes 메트릭
# 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 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- claude code
- SHACL
- Tax Analysis
- Tailwind CSS
- 개발 도구
- architecture
- Developer Tools
- AI Development
- Rag
- Ontology
- troubleshooting
- workflow
- security
- ai 개발 도구
- LLM
- LangChain
- Next.js
- Go
- Kubernetes
- frontend
- knowledge graph
- PYTHON
- react
- Claude
- AI
- backend
- api gateway
- authentication
- AI agent
- 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 |
글 보관함