PgBouncer
Lumie는 PostgreSQL connection pooling에 여전히 PgBouncer semantics를 사용하지만, 라이브 구현은 오래된 standalone storage/pgbouncer Helm 애플리케이션이 아니라 CNPG 네이티브 Pooler CRD입니다.
소스 경로
- 활성 pooler:
lumie-infra/applications/lumie/manifests/pooler.yamllumie-infra/applications/lumie/develop/manifests/pooler.yaml
- 저장소에 남아 있는 레거시 차트:
lumie-infra/storage/pgbouncer/argocd-prod.yamllumie-infra/storage/pgbouncer/base-values.yamllumie-infra/storage/pgbouncer/overlays/prod-values.yaml
- 폐기 메모:
lumie-infra/storage/kustomization.yaml
현재 런타임 형태
라이브 pooler 정의는 다음과 같습니다.
kind: Pooler
metadata:
name: lumie-pooler
spec:
type: rw
pgbouncer:
poolMode: session
parameters:
max_client_conn: "200"
default_pool_size: "20"
소스 경로: lumie-infra/applications/lumie/manifests/pooler.yaml
검증된 현재 상태
2026년 6월 14일의 읽기 전용 kubectl get poolers.postgresql.cnpg.io -A는 다음을 보여주었습니다.
lumie-poolerinlumie-dblumie-dev-poolerinlumie-dev
같은 날짜의 ArgoCD 애플리케이션 목록에는 라이브 pgbouncer-prod 애플리케이션이 보이지 않았으며, 이는 storage/kustomization.yaml의 retired 주석과 일치합니다.
퍼블릭 표면
- 제품 백엔드 런타임은
lumie-infra/applications/lumie/backend/common-values.yaml에서DB_HOST=lumie-pooler.lumie-db.svc.cluster.local을 사용합니다. - chatbot checkpointer는
lumie-infra/applications/lumie/worker/chatbot-svc/common-values.yaml의 Vault 렌더링 DSN을 통해lumie-pooler.lumie-db.svc.cluster.local:5432를 사용합니다. - dev 워크로드는
lumie-dev-pooler.lumie-dev.svc:5432를 사용합니다.
소유권 경계
storage/pgbouncer/**는 레거시 구성으로, 프로덕션 풀링의 활성 단일 출처로 취급하면 안 됩니다.applications/lumie/**/pooler.yaml이 pooler 크기, pool mode, 수명주기의 라이브 단일 출처입니다.- CNPG가 pooler auth 내부를 소유합니다. standalone Helm 차트의 오래된 userlist-secret 모델은 더 이상 활성 계약이 아닙니다.
장애 지점
- 애플리케이션이 pooler 대신
*-db-rw를 직접 가리키면 connection-pool 한도를 우회하고 burst 부하에서 동작이 바뀔 수 있습니다. - 오래된
pgbouncer-userlistsecret이 여전히 중요하다고 가정하면 운영 플레이북이 낡게 됩니다. CNPG가 이제 pooler 사용자 경로를 소유합니다. - pooler pod가 healthy해 보여도 대상 데이터베이스 클러스터가 degraded일 수 있으므로, 항상
Pooler와Cluster리소스를 함께 확인해야 합니다.
검증
kubectl get poolers.postgresql.cnpg.io -A
kubectl get pods -n lumie-db | rg pooler
kubectl get pods -n lumie-dev | rg pooler
kubectl describe pooler -n lumie-db lumie-pooler
kubectl describe pooler -n lumie-dev lumie-dev-pooler
관측성
- pooler 수명주기 헬스는 독립 ArgoCD 애플리케이션이 아니라 CNPG reconciliation과 pooler pod를 통해 노출됩니다.
- pooler에 의존하는 제품 서비스는 연결 설정이 막힐 때 Prometheus와 Grafana에서 각자의 실패 패턴을 드러냅니다.