본문으로 건너뛰기

CloudNativePG

CloudNativePG는 Lumie의 공유 PostgreSQL control plane입니다. operator는 lumie-infra/storage/cnpg/**에 있고, 실제 제품 및 플랫폼 데이터베이스 클러스터는 저장소의 다른 영역에서 선언되어 CNPG CRD를 통해 reconcile됩니다.

소스 경로

  • lumie-infra/storage/cnpg/argocd.yaml
  • lumie-infra/storage/cnpg/helm-values.yaml
  • lumie-infra/storage/cnpg/common-values.yaml
  • lumie-infra/charts/cnpg/templates/cnpg-cluster.yaml
  • lumie-infra/charts/cnpg/templates/cnpg-scheduled-backup.yaml
  • lumie-infra/charts/cnpg/templates/cnpg-dump-backup.yaml

오퍼레이터가 소유하는 것

  • cnpg 네임스페이스에 CNPG CRD와 controller를 설치합니다.
  • operator PodMonitor를 통해 모니터링을 노출합니다.
  • 다음 런타임 리소스를 reconcile합니다.
    • Cluster
    • ScheduledBackup
    • Pooler
  • lumie-infra/storage/cnpg/helm-values.yamlconfig.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.yamldumpBackup을 활성화한 차트에 대해 여전히 pg_dump-to-MinIO CronJob을 지원하지만, 메인 Lumie 데이터베이스와 infra-db는 대신 Barman object-store 백업으로 구성됩니다.

장애 지점

  • webhook이나 CRD 드리프트는 모든 ClusterPooler 업데이트를 막을 수 있습니다. 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을 보관합니다.

관련 페이지