ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • victoria-metrics-k8s-stack vs victoria-metrics-single
    실제 경험과 인사이트를 AI와 함께 정리한 글 2025. 10. 21. 20:52

    VictoriaMetrics Helm Charts 비교

    victoria-metrics-k8s-stack vs victoria-metrics-single

    개요

    현재 설치된 victoria-metrics-k8s-stackvictoria-metrics-single의 기능적 차이를 분석합니다.

    📦 포함된 컴포넌트 비교

    victoria-metrics-k8s-stack (현재 설치됨)

    올인원 쿠버네티스 모니터링 솔루션

    컴포넌트 설명 현재 상태
    VictoriaMetrics Operator CRD 관리, VMAgent/VMSingle 등 운영 ✅ 설치됨
    VMSingle 메트릭 스토리지 (단일 노드) ✅ 설치됨
    VMAgent 메트릭 수집 에이전트 ✅ 설치됨
    VMAlert 알림 규칙 엔진 ❌ 비활성화 (리소스 절약)
    VMAlertmanager 알림 관리자 ❌ 비활성화 (리소스 절약)
    Grafana 시각화 대시보드 ✅ 설치됨
    Prometheus Node Exporter 노드 메트릭 수집 ✅ 설치됨 (DaemonSet)
    Kube-State-Metrics K8s 리소스 메트릭 ❌ 비활성화 (리소스 절약)
    기본 알림 규칙 Kubernetes 관련 PrometheusRules ✅ 포함 (일부 비활성화)
    기본 대시보드 Grafana 대시보드 템플릿 ✅ 포함

    총 리소스 사용량 (최소 설정):

    • CPU: ~18m (requests: 250m, limits: 1150m)
    • Memory: ~404Mi (requests: 912Mi, limits: 1.8Gi)
    • 스토리지: 12Gi (VMSingle 10Gi + Grafana 2Gi)

    victoria-metrics-single

    VMSingle만 설치하는 미니멀 차트

    컴포넌트 설명 포함 여부
    VMSingle 메트릭 스토리지 (StatefulSet) ✅ 포함
    Scrape 설정 수동으로 -promscrape.config 설정 필요 ⚠️ 수동 설정
    기타 모든 컴포넌트 Operator, Agent, Grafana 등 ❌ 미포함

    예상 리소스 사용량:

    • CPU: ~5-10m (단일 Pod)
    • Memory: ~50-100Mi (기본 설정)
    • 스토리지: 설정에 따라 (기본 8Gi)

    🎯 기능적 차이

    1. 메트릭 수집 방식

    k8s-stack (현재)

    메트릭 소스 → Node Exporter (DaemonSet)
                        ↓
                  VMAgent (자동 발견)
                        ↓
                  VMSingle (저장)
                        ↓
                  Grafana (시각화)

    장점:

    • ✅ ServiceMonitor/PodMonitor 자동 발견
    • ✅ Kubernetes 네이티브 (Operator 패턴)
    • ✅ 설정 변경 시 자동 재로드

    단점:

    • ❌ 리소스 사용량 높음 (Operator + Agent)
    • ❌ 복잡한 아키텍처

    victoria-metrics-single

    메트릭 소스 → VMSingle (내장 scraper)
                        ↓
                  직접 저장

    장점:

    • ✅ 극도로 단순한 아키텍처
    • ✅ 최소 리소스 사용
    • ✅ VMSingle 내장 scraper 사용 가능

    단점:

    • ❌ ServiceMonitor 자동 발견 없음
    • ❌ 수동으로 scrape 설정 필요 (-promscrape.config)
    • ❌ Grafana 별도 설치 필요
    • ❌ Node Exporter 별도 설치 필요

    2. 설정 관리

    k8s-stack (현재)

    # VMServiceScrape CRD로 자동 관리
    apiVersion: operator.victoriametrics.com/v1beta1
    kind: VMServiceScrape
    metadata:
      name: my-app
    spec:
      selector:
        matchLabels:
          app: my-app
      endpoints:
        - port: metrics

    자동으로 VMAgent 설정이 업데이트됨

    victoria-metrics-single

    # VMSingle StatefulSet의 args에 직접 추가
    server:
      extraArgs:
        promscrape.config: |
          scrape_configs:
            - job_name: 'my-app'
              static_configs:
                - targets: ['my-app:8080']

    Helm values 수정 후 재배포 필요

    3. 고가용성 (HA)

    기능 k8s-stack victoria-metrics-single
    VMSingle HA VMCluster로 업그레이드 가능 VMCluster 차트로 마이그레이션 필요
    VMAgent HA 레플리카 증가 가능 지원 안함 (VMSingle 내장 scraper)
    데이터 복제 VMCluster 사용 시 가능 단일 노드 (복제 없음)

    4. 확장성

    k8s-stack (현재)

    수평 확장:

    • VMAgent 레플리카 증가 (자동 샤딩)
    • VMSingle → VMCluster 마이그레이션 (데이터 샤딩)

    수직 확장:

    • VMSingle 리소스만 증가

    victoria-metrics-single

    수평 확장:

    • 불가능 (단일 StatefulSet)
    • VMCluster로 완전 재구축 필요

    수직 확장:

    • VMSingle 리소스 증가 (유일한 방법)

    🔄 마이그레이션 시나리오

    k8s-stack → victoria-metrics-single

    적합한 경우:

    • 권장하지 않음! 기능 손실이 너무 큼

    손실되는 기능:

    1. ❌ ServiceMonitor/PodMonitor 자동 발견
    2. ❌ Grafana (별도 설치 필요)
    3. ❌ Node Exporter (별도 설치 필요)
    4. ❌ Operator 기반 선언적 관리
    5. ❌ 기본 대시보드 & 알림 규칙

    절약되는 리소스:

    • CPU: ~250m → ~10m (약 25배 절감)
    • Memory: ~900Mi → ~100Mi (약 9배 절감)

    victoria-metrics-single → k8s-stack

    적합한 경우:

    • ✅ Kubernetes 네이티브 모니터링 필요
    • ✅ 자동 메트릭 수집 원함
    • ✅ Grafana 통합 필요
    • ✅ ServiceMonitor 사용 원함

    추가되는 기능:

    1. ✅ Operator 기반 자동화
    2. ✅ Grafana + 기본 대시보드
    3. ✅ VMAgent 자동 발견
    4. ✅ 알림 규칙 관리 (VMAlert)

    💡 권장사항

    현재 상태 유지 (k8s-stack) 권장

    이유:

    1. ✅ 이미 최소 설정으로 최적화됨
    2. ✅ ServiceMonitor 자동 발견 필수 (imprun-server 메트릭 수집)
    3. ✅ Grafana 통합으로 즉시 시각화 가능
    4. ✅ 향후 확장 용이 (VMCluster로 업그레이드)

    victoria-metrics-single로 변경하면 안 되는 이유

    항목 k8s-stack victoria-metrics-single 영향
    imprun-server 메트릭 VMServiceScrape로 자동 수집 수동 설정 필요 (복잡) ⚠️ 메트릭 수집 중단 위험
    Grafana 포함됨 별도 설치 필요 ⚠️ 추가 작업 필요
    Node Exporter 포함됨 (DaemonSet) 별도 설치 필요 ⚠️ 노드 메트릭 손실
    설정 변경 CRD 업데이트 (자동 반영) Helm values 수정 (재배포) ⚠️ 운영 복잡도 증가
    리소스 절약 250m CPU, 900Mi Mem 10m CPU, 100Mi Mem ✅ 약 90% 절감

    결론: 리소스 절약은 크지만, 운영 복잡도 증가기능 손실이 훨씬 큼!

    📊 실제 사용 사례 비교

    시나리오 1: imprun.dev 플랫폼 모니터링 (현재)

    요구사항:

    • imprun-server, imprun-console 메트릭 수집
    • 노드 리소스 모니터링
    • Grafana 대시보드로 시각화

    적합한 차트: ✅ victoria-metrics-k8s-stack (현재 설치)

    이유:

    • ServiceMonitor로 자동 메트릭 수집
    • Grafana 통합
    • Node Exporter 포함

    시나리오 2: 단순 메트릭 저장소 (Prometheus Remote Write만)

    요구사항:

    • 외부 Prometheus에서 메트릭 전송
    • 장기 보존만 필요
    • 시각화는 외부 Grafana 사용

    적합한 차트: ✅ victoria-metrics-single

    이유:

    • VMSingle의 /api/v1/write 엔드포인트만 필요
    • 최소 리소스
    • 단순 아키텍처

    시나리오 3: 대규모 클러스터 (1000+ Pods)

    요구사항:

    • 대량 메트릭 수집
    • 고가용성 필요
    • 샤딩 필요

    적합한 차트: ✅ victoria-metrics-cluster

    이유:

    • 수평 확장 가능
    • 데이터 샤딩
    • HA 구성

    🔧 마이그레이션 가이드 (참고용)

    k8s-stack → victoria-metrics-single로 변경 시 (권장하지 않음!)

    # 1. 데이터 백업
    kubectl exec -n monitoring vmsingle-vm-victoria-metrics-k8s-stack-xxx -- \
      /victoria-metrics-prod -snapshotCreateURL=http://localhost:8428/snapshot/create
    
    # 2. 기존 스택 제거
    helm uninstall vm -n monitoring
    
    # 3. victoria-metrics-single 설치
    helm install vmsingle vm/victoria-metrics-single \
      -n monitoring \
      -f vmsingle-values.yaml
    
    # 4. Grafana 별도 설치
    helm install grafana grafana/grafana -n monitoring
    
    # 5. Node Exporter 별도 설치
    helm install node-exporter prometheus-community/prometheus-node-exporter -n monitoring
    
    # 6. scrape 설정 수동 추가 (vmsingle-values.yaml)
    server:
      extraArgs:
        promscrape.config: |
          scrape_configs:
            - job_name: 'node-exporter'
              static_configs:
                - targets: ['node-exporter:9100']
            - job_name: 'imprun-server'
              static_configs:
                - targets: ['imprun-server.imprun-system:3000']

    복잡도: ⚠️⚠️⚠️ 매우 높음!

    결론

    ❌ victoria-metrics-single로 변경하지 마세요!

    현재 k8s-stack이 더 나은 이유:

    1. ✅ 자동화된 메트릭 수집
    2. ✅ Grafana 통합
    3. ✅ ServiceMonitor 지원
    4. ✅ 향후 확장 용이
    5. ✅ 이미 최소 설정으로 최적화됨

    리소스가 정말 부족하다면:

    • k8s-stack 유지하되 추가 최적화 (VMAlert, Alertmanager 비활성화 - 이미 완료)
    • 메트릭 보존 기간 단축 (3개월 → 1개월 - 이미 완료)
    • 스크래핑 간격 증가 (30s → 60s - 이미 완료)

    현재 상태가 최적입니다! 🎯

Designed by Tistory.