diff --git a/templates/statefulset-replica.yaml b/templates/statefulset-replica.yaml new file mode 100644 index 0000000..d3515fd --- /dev/null +++ b/templates/statefulset-replica.yaml @@ -0,0 +1,95 @@ +{{- if .Values.replication.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "postgresql.fullname" . }}-replica + labels: + {{- include "postgresql.labels" . | nindent 4 }} + app.kubernetes.io/component: replica +spec: + serviceName: {{ include "postgresql.fullname" . }}-headless + replicas: {{ .Values.replication.replicaCount }} + selector: + matchLabels: + {{- include "postgresql.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: replica + template: + metadata: + labels: + {{- include "postgresql.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: replica + spec: + initContainers: + - name: init-replica + image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /bin/bash + - /config/replica-init.sh + env: + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + - name: REPLICATION_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.postgres.existingSecret | default (include "postgresql.fullname" .) }} + key: {{ .Values.postgres.replicationPasswordKey }} + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + - name: config + mountPath: /config + containers: + - name: postgresql + image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: postgres + containerPort: 5432 + protocol: TCP + env: + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + livenessProbe: + exec: + command: + - /bin/sh + - -c + - pg_isready + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - -c + - pg_isready + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + resources: + {{- toYaml .Values.replica.resources | nindent 10 }} + volumes: + - name: config + configMap: + name: {{ include "postgresql.fullname" . }}-config + defaultMode: 0755 + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: + - {{ .Values.replica.persistence.accessMode }} + resources: + requests: + storage: {{ .Values.replica.persistence.size }} + {{- if .Values.replica.persistence.storageClass }} + storageClassName: {{ .Values.replica.persistence.storageClass }} + {{- end }} +{{- end }}