# airflow ArgoCD ApplicationSet `airflow-db`(cnpg-cluster, syncWave 0) → `airflow`(syncWave 1) 2단계로 배포한다. 전체 스키마는 [manifests/applicationset/openmetadata/1.12.1/](../../openmetadata/1.12.1/)와 [manifests/applicationset/victoria-metrics/1.0.0/](../../victoria-metrics/1.0.0/)를 따른다. ## 구성 - `applicationset.yaml` — list generator로 Application 2개 생성. - `airflow-db-values.yaml` — cnpg-cluster 환경 오버레이 템플릿(DB/owner, 시크릿 참조). - `airflow-values.yaml` — airflow 환경 오버레이 템플릿(DB 비밀번호만). 두 파일 모두 **템플릿**이다 — dip-console이 렌더링해 값 repo(`dip/tenant-catalog`)의 `airflow/*.yaml`로 커밋하는 것을 가정한다. ## 값 적용 순서 (2단) 각 Application은 `baseValues`(카탈로그 차트의 `custom-values.yaml`) + `valuesPath`(값 repo의 환경 오버레이, 나중 파일 우선)를 병합한다. ## 사전 준비 (ArgoCD 밖) - `cloudnative-pg` operator(`manifests/helm/cloudnative-pg/0.29.0`)가 클러스터에 먼저 설치되어 있어야 한다 — 없으면 `airflow-db`(Cluster CR)가 webhook 부재로 생성 자체가 거부된다. - `airflow-db-values.yaml`의 `bootstrap.initdb.secretName`과 동일한 이름·값의 K8s Secret이 대상 네임스페이스에 미리 존재해야 한다(`username`/`password` 키). - ArgoCD가 `Cluster.postgresql.cnpg.io` 커스텀 리소스의 상태를 "Healthy"로 판정하려면 `argocd-cm`에 해당 CRD용 커스텀 헬스 체크(Lua)가 등록되어 있어야 sync-wave 1이 정상 대기한다 — 미등록 시 wave 0이 Progressing으로만 남아 wave 1로 못 넘어갈 수 있다. ## 배포 테스트 절차와 주의사항은 [.claude/deploy-test-procedure.md](../../../../.claude/deploy-test-procedure.md) "카탈로그 앱 → cnpg-cluster 전환 배포 테스트" 절을 따른다. `APP_POD_SELECTOR="component=webserver"`, fixture는 `scripts/deploy-test/fixtures/airflow-deploy-test-overrides.yaml`.