1a747f61a8
images/·manifests/helm/·.claude/ 의 20개 파일이 doc/decisions·doc/analysis 등 **이 레포에 존재한 적 없는 경로 15종을 48곳에서** 인용하고 있었다. security-catalog 에서 포팅할 때 따라온 것인데, 그 레포는 개인 레포(github.com/wbsong111/security-catalog)라 팀 구성원은 접근조차 못 한다 — "security-catalog 에 있으나 이관되지 않았다" 는 안내가 아무 역할을 하지 못했다. 원문을 통째로 복사하지 않았다 ---------------------------- 원본 문서들이 서로를 근거로 인용한다. decisions/0001 하나만 봐도 analysis/cnpg-image-baseline.md · analysis/vendor-unassessed-data-sources.md 처럼 **인용 목록에 없던 또 다른 미이관 문서**를 가리킨다. 복사는 문제를 옮기는 것이지 없애는 게 아니다. 그리고 대부분은 애초에 dip-catalog 가 더 나은 것을 갖고 있다. 7곳에서 인용되던 analysis/sles-oval-measurement.md 는 원문 스스로 "이 문서는 결정하지 않는다. 재측정하면 갱신된다" 고 밝히는 스냅샷인데, dip-catalog 는 같은 측정을 CoverageProbe 로 매 스캔마다 자동으로 한다. 문서를 복사하는 것보다 게이트를 가리키는 것이 정확하다. 그래서 성격별로 나눴다 --------------------- 재측정으로 복원 안 되는 것 → doc/decisions/ 에 자립적 ADR 로 다시 씀 (4건) 이미 단일 출처가 있는 것 → 그쪽으로 인용 교체 (11종 경로) ADR 4건은 security-catalog 0001·0005·0006·0007 이 원본이고, 결론과 근거만 추려 dip-catalog 맥락으로 새로 썼다 — **레포 밖을 가리키는 링크가 0이다.** 번호는 이 레포에서 0001~0004 로 다시 붙였고 원본 대응은 각 문서와 README 에 적었다. 왜 안 가져온 것은 안 가져왔는지도 README 표에 남겼다. 인용 교체는 카테고리별로: analysis/*-cve.md, cnpg-image-vuln-comparison.md → 해당 ADR · images/<image>/README.md analysis/sles-oval-measurement.md → 게이트 CoverageProbe (doc/sbom-pipeline.md) cve-zero-pipeline.md, architecture/build-pipeline.md → doc/sbom-pipeline.md image-selection.md → .claude/image-authoring.md charts/*/deploy-test.md → scripts/deploy-test/*.sh + 절차 문서 찾은 오류 2건 ------------- - images/cloudnative-pg/source.build.env 가 인용한 decisions/0004-cloudnative-pg-operator-self-build.md 는 **번호 오기**다. 원본 0004 는 postgresql-chart-selection 이고 이 결정은 0005 다. - cnpg-cluster values.yaml·templates/database.yaml 이 인용한 doc/deploy-test-cnpg.md 는 **원본 레포에도 없다.** CREATE EXTENSION 함정 설명은 주석 자체에 이미 있어 인용만 뺐다. 검증 ---- 우리 파일의 깨진 doc/ 인용 0건 (전수 스캔) 새 문서·수정 문서의 로컬 링크 전부 실재 확인 helm template cnpg-cluster · etcd · cloudnative-pg 정상 렌더 남은 doc/health-checking.md(144곳)·doc/integration/*(2곳)은 업스트림 CRD·차트 안의 문자열로 우리가 쓴 인용이 아니다 — 건드리지 않았다. Closes #33 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
168 lines
5.5 KiB
YAML
168 lines
5.5 KiB
YAML
# 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 가 무작위 생성해
|
|
# <release>-app 시크릿에 저장한다.
|
|
secretName: ""
|
|
encoding: UTF8
|
|
localeCollate: ""
|
|
localeCType: ""
|
|
# 초기화 SQL. 최초 bootstrap 시 1회만 superuser 로 실행된다.
|
|
# 주의: CREATE EXTENSION 은 여기에 넣으면 안 된다. CNPG 1.30.0 에서 오류 없이
|
|
# 무시된다(배포 검증에서 확인). 확장은 아래 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: {}
|