apiVersion: v1 kind: Namespace metadata: name: databases --- apiVersion: apps/v1 kind: StatefulSet metadata: name: pgbouncer namespace: databases spec: serviceName: "pgbouncer" replicas: 1 selector: matchLabels: app: pgbouncer template: metadata: labels: app: pgbouncer spec: containers: - name: pgbouncer image: bitnami/pgbouncer:latest ports: - containerPort: 5432 env: - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: name: secrets key: POSTGRES_PASSWORD - name: PGBOUNCER_PORT value: "5432" - name: PGBOUNCER_USER value: "postgres" - name: PGBOUNCER_PASSWORD valueFrom: secretKeyRef: name: secrets key: POSTGRES_PASSWORD - name: POSTGRESQL_HOST value: postgres.databases - name: PGBOUNCER_DATABASE value: nocodelytics_production --- apiVersion: apps/v1 kind: Deployment metadata: name: pgbouncer-exporter namespace: databases spec: replicas: 1 selector: matchLabels: app: pgbouncer-exporter template: metadata: labels: app: pgbouncer-exporter annotations: prometheus.io/scrape: "true" prometheus.io/port: "9127" spec: containers: - name: pgbouncer-exporter image: prometheuscommunity/pgbouncer-exporter:latest ports: - containerPort: 9127 args: - --pgBouncer.connectionString=postgres://postgres:$(POSTGRES_PASSWORD)@pgbouncer.databases:5432/pgbouncer?sslmode=disable - --web.listen-address=:9127 env: - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: secrets key: POSTGRES_PASSWORD - name: PGBOUNCER_DEFAULT_POOL_SIZE value: "50" - name: PGBOUNCER_MAX_CLIENT_CONN value: "700" - name: PGBOUNCER_SERVER_IDLE_TIMEOUT value: "60" - name: PGBOUNCER_POOL_MODE value: transaction - name: PGBOUNCER_RESERVE_POOL_SIZE value: "10" - name: PGBOUNCER_RESERVE_POOL_TIMEOUT value: "5" --- apiVersion: v1 kind: Service metadata: name: pgbouncer namespace: databases spec: ports: - port: 5432 targetPort: 5432 selector: app: pgbouncer