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 }}