apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ include "invy.fullname" . }}-db labels: {{- include "invy.labels" . | nindent 4 }} app.kubernetes.io/component: database spec: serviceName: {{ include "invy.fullname" . }}-db-headless replicas: 1 selector: matchLabels: {{- include "invy.selectorLabels" . | nindent 6 }} app.kubernetes.io/component: database template: metadata: labels: {{- include "invy.selectorLabels" . | nindent 8 }} app.kubernetes.io/component: database spec: containers: - name: postgres image: "{{ .Values.postgres.image.repository }}:{{ .Values.postgres.image.tag }}" imagePullPolicy: {{ .Values.postgres.image.pullPolicy }} ports: - name: postgres containerPort: {{ .Values.postgres.port }} protocol: TCP env: - name: POSTGRES_USER valueFrom: secretKeyRef: name: {{ include "invy.fullname" . }}-secrets key: postgres-user - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: {{ include "invy.fullname" . }}-secrets key: postgres-password - name: POSTGRES_DB valueFrom: secretKeyRef: name: {{ include "invy.fullname" . }}-secrets key: postgres-database - name: PGDATA value: /var/lib/postgresql/data/pgdata - name: POSTGRES_INITDB_ARGS value: "--encoding=UTF8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8" command: - postgres - -c - max_connections=200 - -c - shared_buffers=256MB - -c - effective_cache_size=1GB - -c - maintenance_work_mem=64MB - -c - checkpoint_completion_target=0.9 - -c - wal_buffers=16MB - -c - default_statistics_target=100 - -c - random_page_cost=1.1 - -c - effective_io_concurrency=200 - -c - work_mem=2621kB - -c - huge_pages=off - -c - min_wal_size=1GB - -c - max_wal_size=4GB - -c - statement_timeout=30000 - -c - idle_in_transaction_session_timeout=60000 - -c - tcp_keepalives_idle=60 - -c - tcp_keepalives_interval=10 - -c - tcp_keepalives_count=10 volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data - name: init-script mountPath: /docker-entrypoint-initdb.d resources: {{- toYaml .Values.postgres.resources | nindent 12 }} livenessProbe: exec: command: - pg_isready - -U - $(POSTGRES_USER) initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: exec: command: - pg_isready - -U - $(POSTGRES_USER) initialDelaySeconds: 5 periodSeconds: 5 volumes: - name: init-script configMap: name: {{ include "invy.fullname" . }}-db-schema {{- if .Values.postgres.persistence.enabled }} volumeClaimTemplates: - metadata: name: postgres-data spec: accessModes: - {{ .Values.postgres.persistence.accessMode }} {{- if .Values.postgres.persistence.storageClass }} storageClassName: {{ .Values.postgres.persistence.storageClass }} {{- end }} resources: requests: storage: {{ .Values.postgres.persistence.size }} {{- else }} - name: postgres-data emptyDir: {} {{- end }}