CloudNativePG
CloudNativePG는 Lumie의 공유 PostgreSQL control plane입니다. operator는 lumie-infra/storage/cnpg/**에 있고, 실제 제품 및 플랫폼 데이터베이스 클러스터는 저장소의 다른 영역에서 선언되어 CNPG CRD를 통해 reconcile됩니다.
소스 경로
lumie-infra/storage/cnpg/argocd.yamllumie-infra/storage/cnpg/helm-values.yamllumie-infra/storage/cnpg/common-values.yamllumie-infra/charts/cnpg/templates/cnpg-cluster.yamllumie-infra/charts/cnpg/templates/cnpg-scheduled-backup.yamllumie-infra/charts/cnpg/templates/cnpg-dump-backup.yaml
오퍼레이터가 소유하는 것
cnpg네임스페이스에 CNPG CRD와 controller를 설치합니다.- operator PodMonitor를 통해 모니터링을 노출합니다.
- 다음 런타임 리소스를 reconcile합니다.
ClusterScheduledBackupPooler
lumie-infra/storage/cnpg/helm-values.yaml의config.data.INHERITED_*를 통해 관리 리소스 전반에 라벨과 annotation을 상속합니다.
런타임 흐름
operator 자체는 공유되지만, 클러스터 의도는 분리되어 있습니다.
- 제품 데이터베이스는
lumie-infra/applications/lumie/**에서 옵니다. - 공유 인프라 데이터베이스는
lumie-infra/storage/infra-db/**에서 옵니다.
중요한 계약
이 템플릿 발췌가 Lumie 차트 values와 CNPG 관리 클러스터 사이의 주요 계약입니다.
monitoring:
enablePodMonitor: true
backup:
barmanObjectStore:
destinationPath: ...
endpointURL: ...
소스 경로: lumie-infra/charts/cnpg/templates/cnpg-cluster.yaml
즉, 클러스터는 자체 values에서 .common.database.backup을 활성화한 경우에만 백업을 갖고, 렌더링된 모든 클러스터는 자동으로 PodMonitor를 노출합니다.
의존성
- reconcile을 위한 ArgoCD
- 각 cluster CR 이 참조하는
local-path-retain또는 다른 StorageClass - bootstrap 자격 증명 또는 백업 자격 증명을 위한 Vault 기반 시크릿
- CNPG 메트릭 스크레이프를 위한 Prometheus
운영 경계
- operator는 애플리케이션별 데이터베이스나 역할을 스스로 정의하지 않습니다. 이는 소유 클러스터 매니페스트나 bootstrap SQL에 표현됩니다.
- operator는 CNPG 네이티브 pooler를 관리하지만, 현재 pooler CR은
storage/pgbouncer/**가 아니라applications/lumie/**아래에 있습니다. cnpg-dump-backup.yaml은dumpBackup을 활성화한 차트에 대해 여전히 pg_dump-to-MinIO CronJob을 지원하지만, 메인 Lumie 데이터베이스와infra-db는 대신 Barman object-store 백업으로 구성됩니다.
장애 지점
- webhook이나 CRD 드리프트는 모든
Cluster와Pooler업데이트를 막을 수 있습니다.storage/cnpg/argocd.yaml은 이미 시끄러운 CRD annotation 차이를 무시하지만, webhook 문제는 여전히 reconciliation을 멈춥니다. - 백업 자격 증명 누락은 클러스터가 트래픽을 처리할 만큼은 healthy해도 WAL archive나 base backup이 조용히 실패하게 만듭니다.
- local-path 스토리지는 노드 손실 후 임의 노드로의 자동 복구를 막습 니다.
- operator가 다운되면 기존 데이터베이스는 계속 트래픽을 처리할 수 있지만, failover, 백업, pooler reconciliation이 멈춥니다.
검증
kubectl get applications.argoproj.io -n argocd cnpg
kubectl get pods -n cnpg
kubectl get clusters.postgresql.cnpg.io -A
kubectl get scheduledbackups.postgresql.cnpg.io -A
kubectl get poolers.postgresql.cnpg.io -A
kubectl logs -n cnpg deploy/cnpg-cloudnative-pg --tail=200
관측성
monitoring.podMonitorEnabled: true를 통해 operator 메트릭이 활성화됩니다.- 모든 렌더링된 클러스터는
monitoring.enablePodMonitor: true를 켭니다. - Grafana는
lumie-infra/observability/grafana/dashboards/cloudnativepg.json에 CNPG 대시보드 JSON을 보관합니다.