# VictoriaMetrics 스택 ArgoCD ApplicationSet VM 옵저버빌리티 스택(10개 차트)을 ArgoCD ApplicationSet으로 배포한다. 전체 아키텍처는 [doc/victoria-metrics-architecture.md](../../../../doc/victoria-metrics-architecture.md) 12장 참조. ## 구성 - **`applicationset.yaml`** — list generator로 10개 Application 생성. element마다 `chartPath`/`baseValues`/`valuesPath`/`syncWave`. - **`*-values.yaml`** — 차트별 **환경 오버레이 템플릿**. dip-console이 `$VAR`(도메인/Keycloak/Infisical)를 렌더해 값 repo(`dip/values-*`)의 `victoria-metrics/-values.yaml`로 커밋한다. ## 값 적용 순서 (2단) 각 Application은 두 values 파일을 병합한다(나중 파일 우선). 1. **베이스**: 카탈로그 차트의 `custom-values.yaml`(또는 otelcol-events는 `custom-values-events.yaml`) — 큰 정적 설정(스크레이프/파이프라인/알림 규칙 등) 재사용. 2. **환경 오버레이**: `$values/victoria-metrics/-values.yaml` — 도메인/시크릿/issuer 등 환경 고유값만. > Helm 병합 규칙: map은 병합, **배열은 교체**. 그래서 `config.users`(vmauth)·`oidc`(perses)·`extraSecretMounts`(alertmanager)처럼 배열을 바꿀 땐 오버레이에 해당 배열 전체를 재정의한다. ## syncWave 순서 | wave | 차트 | |------|------| | 0 | vmcluster, vlogs, kube-state-metrics, node-exporter, alertmanager | | 1 | vmauth, vmagent, otelcol, otelcol-events, vmalert | | 2 | perses | ## 사전 준비 (배포 전, ArgoCD 밖) - **dip-console**: Keycloak(`vm-access` scope, `perses`/`perses-vmauth` client) · Infisical 시크릿(`$INFISICAL_*`) · `root-ca-cert` 복사 · `vmagent-relabel-configs` 테넌트 ConfigMap. - **플랫폼 기본**: StorageClass(longhorn), Ingress controller + cert-manager(`root-ca-issuer`), DNS. - **GitOps**: ArgoCD에 카탈로그 repo·값 repo 등록, 값 repo에 렌더된 `victoria-metrics/*-values.yaml`. - **대시보드**: perses 대시보드 ConfigMap은 별도 경로 소스로 적용(아래). ## perses 대시보드 `manifests/helm/perses/0.21.0/files/perses-dashboards.yaml`(정적 대시보드 ConfigMap)를 별도 ArgoCD Application(directory 소스)으로 배포하면 사이드카가 자동 로드한다. 데이터소스/시크릿(`perses-provisioning.yaml`의 datasource/secret)은 환경별이라 dip-console/Infisical로 관리한다.