본문으로 건너뛰기

PgBouncer

Lumie는 PostgreSQL connection pooling에 여전히 PgBouncer semantics를 사용하지만, 라이브 구현은 오래된 standalone storage/pgbouncer Helm 애플리케이션이 아니라 CNPG 네이티브 Pooler CRD입니다.

소스 경로

  • 활성 pooler:
    • lumie-infra/applications/lumie/manifests/pooler.yaml
    • lumie-infra/applications/lumie/develop/manifests/pooler.yaml
  • 저장소에 남아 있는 레거시 차트:
    • lumie-infra/storage/pgbouncer/argocd-prod.yaml
    • lumie-infra/storage/pgbouncer/base-values.yaml
    • lumie-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-pooler in lumie-db
  • lumie-dev-pooler in lumie-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-userlist secret이 여전히 중요하다고 가정하면 운영 플레이북이 낡게 됩니다. CNPG가 이제 pooler 사용자 경로를 소유합니다.
  • pooler pod가 healthy해 보여도 대상 데이터베이스 클러스터가 degraded일 수 있으므로, 항상 PoolerCluster 리소스를 함께 확인해야 합니다.

검증

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에서 각자의 실패 패턴을 드러냅니다.

관련 페이지