# Default values for cnpg-cluster # CloudNativePG operator(cloudnative-pg 차트)가 먼저 설치되어 있어야 한다. nameOverride: "" namespaceOverride: "" # PostgreSQL 인스턴스 수. 1 = 단독, 3 이상 = primary 1 + replica N-1 instances: 3 postgresql: image: repository: ghcr.io/cloudnative-pg/postgresql # 반드시 베이스 OS 를 포함한 태그를 쓴다. # 금지: "18" — Debian 11(bullseye) 기반이며 2026-08-31 지원 종료 # 권장: "18.4-system-trixie" — Debian 13, 2030-06-30 까지 지원 # (operator 1.30.0 이 imageName 미지정 시 선택하는 기본값과 동일) # 포함 확장: pgaudit 18.0, pg_stat_statements 1.12, pgcrypto 1.4, pg_trgm 1.6, vector 0.8.5 tag: "18.4-system-trixie" # 전체 이미지 경로를 직접 지정할 때 사용 (오프라인 미러 등). 지정 시 image.* 는 무시된다. imageName: "" # postgresql.conf 파라미터 parameters: max_connections: "100" shared_buffers: 128MB # 감사 로깅용. pgaudit 는 CNPG 기본 이미지에 포함되어 있다. # shared_preload_libraries 는 CNPG 가 자동 관리하므로 직접 넣지 않는다. # 확장 기능 (pgaudit 등). shared_preload_libraries 는 operator 가 계산한다. sharedPreloadLibraries: [] # pg_hba.conf 추가 규칙. CNPG 기본값은 TLS 강제 + scram-sha-256 이다. pg_hba: [] # - hostssl appdb appuser 10.42.0.0/16 scram-sha-256 # 동기 복제 설정. 미설정 시 비동기(async) 복제다. # synchronous: # method: any # number: 1 # primary 업데이트 전략 # unsupervised = operator 가 자동으로 switchover 후 업데이트 (기본) # supervised = 운영자가 수동 승격해야 진행 primaryUpdateStrategy: unsupervised primaryUpdateMethod: switchover storage: size: 10Gi storageClass: longhorn # WAL 을 별도 볼륨으로 분리한다. I/O 경합을 줄이고 WAL 폭증이 데이터 볼륨을 채우는 것을 막는다. walStorage: enabled: true size: 5Gi storageClass: longhorn resources: requests: cpu: 500m memory: 1Gi limits: cpu: "2" memory: 2Gi # 초기 DB/사용자 생성 bootstrap: initdb: database: appdb owner: appuser # 비밀번호를 담은 기존 시크릿 이름. 미지정 시 operator 가 무작위 생성해 # -app 시크릿에 저장한다. secretName: "" encoding: UTF8 localeCollate: "" localeCType: "" # 초기화 SQL. 최초 bootstrap 시 1회만 superuser 로 실행된다. # 주의: CREATE EXTENSION 은 여기에 넣으면 안 된다. CNPG 1.30.0 에서 오류 없이 # 무시된다(검증 기록: doc/deploy-test-cnpg.md). 확장은 아래 databases 로 선언한다. postInitApplicationSQL: [] # - ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; # 선언적 데이터베이스·확장·스키마 관리 (CNPG 1.26+ Database CRD). # 확장 설치의 정식 경로다. bootstrap 으로 만든 DB 도 여기서 관리 대상으로 선언할 수 있다. databases: [] # - name: appdb # bootstrap.initdb.database 와 같은 이름을 쓰면 그 DB 를 관리한다 # owner: appuser # 생략 시 bootstrap.initdb.owner # ensure: present # present | absent # reclaimPolicy: retain # retain = Database 리소스를 지워도 실제 DB 는 보존 # extensions: # - name: pg_stat_statements # - name: pgaudit # schemas: # - name: app # owner: appuser # postgres(superuser) 계정으로의 직접 접속 허용 여부. # false 면 superuser 시크릿이 아예 생성되지 않는다. 보안상 false 를 권장한다. enableSuperuserAccess: false # Pod 분산 배치 affinity: enablePodAntiAffinity: true # preferred = 노드가 부족해도 스케줄됨 (단일 노드 dev 환경 필수) # required = 노드당 1개 강제 (운영 권장, 노드 수 >= instances 필요) podAntiAffinityType: preferred topologyKey: kubernetes.io/hostname nodeSelector: {} tolerations: [] # 참고: 컨테이너 보안 컨텍스트는 operator 가 관리한다. CNPG 는 항상 non-root(uid 26) # runAsNonRoot / readOnlyRootFilesystem 로 Pod 를 만들며, 차트에서 재정의할 값이 없다. monitoring: # Prometheus Operator CRD 필요 enablePodMonitor: false # 커스텀 메트릭 쿼리 ConfigMap customQueriesConfigMap: [] # 백업 — S3 호환 오브젝트 스토리지 (Barman Cloud) backup: enabled: false # 보존 기간 retentionPolicy: 30d barmanObjectStore: destinationPath: "" # 예: s3://pg-backup/cnpg endpointURL: "" # 예: http://rustfs.defense-llm.svc:9000 s3Credentials: accessKeyId: name: "" # 시크릿 이름 key: ACCESS_KEY_ID secretAccessKey: name: "" key: ACCESS_SECRET_KEY wal: compression: gzip maxParallel: 2 data: compression: gzip jobs: 2 # 정기 백업 스케줄 (backup.enabled: true 일 때만 생성) scheduledBackup: enabled: false # CNPG 의 cron 은 6필드다 (초 분 시 일 월 요일) schedule: "0 0 2 * * *" backupOwnerReference: self immediate: false # PgBouncer 커넥션 풀러 pooler: enabled: false instances: 2 type: rw # rw | ro poolMode: transaction # session | transaction | statement parameters: max_client_conn: "1000" default_pool_size: "25" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 256Mi # 추가 라벨/어노테이션 extraLabels: {} extraAnnotations: {}