| apiVersion: extensions/v1beta1 |
| kind: Deployment |
| metadata: |
| name: {{ template "postgresql.fullname" . }} |
| namespace: {{ .Values.global.nsPrefix }} |
| labels: |
| app: {{ template "postgresql.fullname" . }} |
| chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" |
| release: "{{ .Release.Name }}" |
| heritage: "{{ .Release.Service }}" |
| spec: |
| template: |
| metadata: |
| labels: |
| app: {{ template "postgresql.fullname" . }} |
| spec: |
| {{- if .Values.affinity }} |
| affinity: |
| {{ toYaml .Values.affinity | indent 8 }} |
| {{- end }} |
| {{- if .Values.nodeSelector }} |
| nodeSelector: |
| {{ toYaml .Values.nodeSelector | indent 8 }} |
| {{- end }} |
| {{- if .Values.tolerations }} |
| tolerations: |
| {{ toYaml .Values.tolerations | indent 8 }} |
| {{- end }} |
| {{- if .Values.schedulerName }} |
| schedulerName: "{{ .Values.schedulerName }}" |
| {{- end }} |
| containers: |
| - name: {{ template "postgresql.fullname" . }} |
| image: "{{ .Values.image }}:{{ .Values.imageTag }}" |
| imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }} |
| args: |
| {{- range $key, $value := default dict .Values.postgresConfig }} |
| - -c |
| - '{{ $key | snakecase }}={{ $value }}' |
| {{- end }} |
| env: |
| - name: POSTGRES_USER |
| value: {{ default "postgres" .Values.global.postgresUser | quote }} |
| # Required for pg_isready in the health probes. |
| - name: PGUSER |
| value: {{ default "postgres" .Values.global.postgresUser | quote }} |
| - name: POSTGRES_DB |
| value: {{ default "" .Values.global.postgresDatabase | quote }} |
| - name: POSTGRES_INITDB_ARGS |
| value: {{ default "" .Values.postgresInitdbArgs | quote }} |
| - name: PGDATA |
| value: /var/lib/postgresql/data/pgdata |
| - name: POSTGRES_PASSWORD |
| value: {{ default "postgres" .Values.global.postgresPassword | quote }} |
| # original code: |
| # valueFrom: |
| # secretKeyRef: |
| # name: {{ template "postgresql.fullname" . }} |
| # key: postgres-password |
| - name: POD_IP |
| valueFrom: { fieldRef: { fieldPath: status.podIP } } |
| ports: |
| - name: postgresql |
| containerPort: 5432 |
| livenessProbe: |
| exec: |
| command: |
| - sh |
| - -c |
| - exec pg_isready --host $POD_IP |
| initialDelaySeconds: 120 |
| timeoutSeconds: 5 |
| failureThreshold: 6 |
| readinessProbe: |
| exec: |
| command: |
| - sh |
| - -c |
| - exec pg_isready --host $POD_IP |
| initialDelaySeconds: 5 |
| timeoutSeconds: 3 |
| periodSeconds: 5 |
| resources: |
| {{ toYaml .Values.resources | indent 10 }} |
| volumeMounts: |
| - name: data |
| mountPath: {{ .Values.persistence.mountPath }} |
| subPath: {{ .Values.persistence.subPath }} |
| {{- if .Values.metrics.enabled }} |
| - name: metrics |
| image: "{{ .Values.metrics.image }}:{{ .Values.metrics.imageTag }}" |
| imagePullPolicy: {{ default "" .Values.metrics.imagePullPolicy | quote }} |
| env: |
| - name: DATA_SOURCE_NAME |
| value: postgresql://postgres@127.0.0.1:5432?sslmode=disable |
| ports: |
| - name: metrics |
| containerPort: 9187 |
| {{- if .Values.metrics.customMetrics }} |
| args: ["-extend.query-path", "/conf/custom-metrics.yaml"] |
| volumeMounts: |
| - name: custom-metrics |
| mountPath: /conf |
| readOnly: true |
| {{- end }} |
| resources: |
| {{ toYaml .Values.metrics.resources | indent 10 }} |
| {{- end }} |
| volumes: |
| - name: data |
| {{- if .Values.persistence.enabled }} |
| persistentVolumeClaim: |
| claimName: {{ .Values.persistence.existingClaim | default (include "postgresql.fullname" .) }} |
| {{- else }} |
| emptyDir: {} |
| {{- end }} |
| {{- if and .Values.metrics.enabled .Values.metrics.customMetrics }} |
| - name: custom-metrics |
| secret: |
| secretName: {{ template "postgresql.fullname" . }} |
| items: |
| - key: custom-metrics.yaml |
| path: custom-metrics.yaml |
| {{- end }} |
| {{- if .Values.imagePullSecrets }} |
| imagePullSecrets: |
| - name: {{ .Values.imagePullSecrets }} |
| {{- end }} |