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
            - name: PGBOUNCER_DEFAULT_POOL_SIZE
              value: "100"
            - name: PGBOUNCER_MAX_CLIENT_CONN
              value: "700"
            - name: PGBOUNCER_SERVER_IDLE_TIMEOUT
              value: "60"
            - name: PGBOUNCER_POOL_MODE
              value: session
            - name: PGBOUNCER_RESERVE_POOL_SIZE
              value: "10"
            - name: PGBOUNCER_RESERVE_POOL_TIMEOUT
              value: "5"
---
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
---
apiVersion: v1
kind: Service
metadata:
  name: pgbouncer
  namespace: databases
spec:
  ports:
    - port: 5432
      targetPort: 5432
  selector:
    app: pgbouncer