apiVersion: v1 kind: Service metadata: name: membership-db namespace: {{ www_namespace }} spec: type: ClusterIP clusterIP: None selector: app: membership-db ports: - name: postgres port: 5432 targetPort: postgres --- apiVersion: apps/v1 kind: StatefulSet metadata: name: membership-db namespace: {{ www_namespace }} spec: serviceName: membership-db replicas: 1 selector: matchLabels: app: membership-db template: metadata: labels: app: membership-db spec: automountServiceAccountToken: false {% if www_image_pull_secrets | length %} imagePullSecrets: {{ www_image_pull_secrets | to_nice_yaml | indent(8, true) }} {% endif %} securityContext: runAsNonRoot: true runAsUser: 999 runAsGroup: 999 fsGroup: 999 seccompProfile: type: RuntimeDefault containers: - name: postgres image: {{ www_membership_postgres_image | to_json }} env: - name: POSTGRES_DB value: {{ www_membership_environment.POSTGRES_DB | to_json }} - name: POSTGRES_USER value: {{ www_membership_environment.POSTGRES_USER | to_json }} - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: {{ www_membership_secret_name }} key: POSTGRES_PASSWORD - name: PGDATA value: /var/lib/postgresql/data/pgdata ports: - name: postgres containerPort: 5432 readinessProbe: exec: command: [sh, -c, 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'] periodSeconds: 5 startupProbe: exec: command: [sh, -c, 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'] failureThreshold: 60 periodSeconds: 5 securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] resources: {{ www_membership_postgres_resources | to_nice_yaml | indent(12, true) }} volumeMounts: - name: database mountPath: /var/lib/postgresql/data volumeClaimTemplates: - metadata: name: database spec: accessModes: [ReadWriteOnce] {% if www_membership_postgres_storage_class | length %} storageClassName: {{ www_membership_postgres_storage_class | to_json }} {% endif %} resources: requests: storage: {{ www_membership_postgres_storage_size }}