Files
Scooby HuskyandClaude Opus 4.6 5163403e24 Scale down non-critical replicas for homelab resource savings
Reduce replicas to 1 for workloads that don't need HA in a homelab:
- Prometheus 2→1, Alertmanager 2→1 (~4.4GB RAM saved)
- cert-manager 3→1
- GitLab: registry 2→1, kas 2→1, sidekiq 2→1, praefect 2→1,
  pgbouncer-ro 3→1
- Guacamole + guacd 2→1
- Kiali 2→1, ArgoCD server 2→1
- Kyverno background-controller 2→1
- Scylla operator 2→1
- ext-authz-proxy 2→1, netbird-cluster-router 2→1

Kept multi-replica: coredns, envoy-gateway, kyverno admission,
vault, argocd-repo-server, gitlab-webservice, istiod, rook-ceph CSI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 23:00:48 -05:00

117 lines
3.0 KiB
YAML

---
# PgBouncer Pooler for GitLab PostgreSQL
# Managed by CloudNativePG Operator
apiVersion: postgresql.cnpg.io/v1
kind: Pooler
metadata:
name: pgbouncer-gitlab
namespace: gitlab
spec:
cluster:
name: pg-gitlab
# Number of PgBouncer instances (keep small; GitLab points directly at CNPG RW service)
instances: 1
# PgBouncer configuration
type: rw # Read-Write pooler (connects to primary)
pgbouncer:
poolMode: transaction
authQuerySecret:
name: pg-gitlab-app
# Use custom user_search function for SCRAM-SHA-256 authentication
# This function is created by gitlab-bootstrap.sh script
authQuery: "SELECT usename, passwd FROM public.user_search($1)"
parameters:
max_client_conn: "2000"
default_pool_size: "50"
reserve_pool_size: "10"
server_idle_timeout: "600" # Keep connections alive for 10 minutes
log_connections: "1"
log_disconnections: "1"
log_pooler_errors: "1"
stats_period: "60"
# Template for PgBouncer pods
template:
metadata:
labels:
app: pgbouncer-gitlab
spec:
containers:
- name: pgbouncer
resources:
requests:
cpu: 25m
memory: 256Mi
limits:
memory: 512Mi
# Anti-affinity to spread PgBouncer pods across nodes
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: pgbouncer-gitlab
topologyKey: kubernetes.io/hostname
---
# Read-only Pooler for Database Load Balancing
apiVersion: postgresql.cnpg.io/v1
kind: Pooler
metadata:
name: pgbouncer-gitlab-ro
namespace: gitlab
spec:
cluster:
name: pg-gitlab
instances: 1
type: ro # Read-Only pooler (connects to replicas)
pgbouncer:
poolMode: transaction
authQuerySecret:
name: pg-gitlab-app
# Use custom user_search function for SCRAM-SHA-256 authentication
# This function is created by gitlab-bootstrap.sh script
authQuery: "SELECT usename, passwd FROM public.user_search($1)"
parameters:
max_client_conn: "2000"
default_pool_size: "50"
reserve_pool_size: "10"
max_db_connections: "100"
server_idle_timeout: "600" # Keep connections alive for 10 minutes
log_connections: "1"
log_disconnections: "1"
template:
metadata:
labels:
app: pgbouncer-gitlab-ro
spec:
containers:
- name: pgbouncer
resources:
requests:
cpu: 25m
memory: 256Mi
limits:
memory: 512Mi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: pgbouncer-gitlab-ro
topologyKey: kubernetes.io/hostname