티스토리 뷰

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)
  • ✅ 사용자 앱 런타임 (동적 생성)

🚀 설치

사전 요구사항

  1. Helm Repository 추가

    helm repo add vm https://victoriametrics.github.io/helm-charts/
    helm repo update
  2. cert-manager 및 ClusterIssuer (Grafana HTTPS용)

    • ClusterIssuer letsencrypt-cloudflare 필요

설치 방법

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

🔐 보안 권장사항

  1. Grafana 비밀번호 변경: 기본 admin/admin 즉시 변경
  2. Ingress TLS: 프로덕션에서는 반드시 HTTPS 사용
  3. RBAC 최소 권한: ServiceAccount 권한 최소화
  4. NetworkPolicy: 필요한 트래픽만 허용

📈 성능 최적화

메모리 부족 시

vmsingle:
  spec:
    resources:
      limits:
        memory: 4Gi  # 2Gi → 4Gi

디스크 부족 시

vmsingle:
  spec:
    retentionPeriod: "30"  # 90일 → 30일
    storage:
      resources:
        requests:
          storage: 50Gi  # 20Gi → 50Gi
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함