| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: {{ template "mysql.fullname" . }} |
| namespace: {{ .Release.Namespace }} |
| labels: |
| app: {{ template "mysql.fullname" . }} |
| chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" |
| release: "{{ .Release.Name }}" |
| heritage: "{{ .Release.Service }}" |
| {{- with .Values.deploymentAnnotations }} |
| annotations: |
| {{ toYaml . | indent 4 }} |
| {{- end }} |
| |
| spec: |
| strategy: |
| {{ toYaml .Values.strategy | indent 4 }} |
| selector: |
| matchLabels: |
| app: {{ template "mysql.fullname" . }} |
| release: {{ .Release.Name }} |
| template: |
| metadata: |
| labels: |
| app: {{ template "mysql.fullname" . }} |
| release: {{ .Release.Name }} |
| {{- with .Values.podLabels }} |
| {{ toYaml . | indent 8 }} |
| {{- end }} |
| {{- with .Values.podAnnotations }} |
| annotations: |
| {{ toYaml . | indent 8 }} |
| {{- end }} |
| spec: |
| {{- if .Values.schedulerName }} |
| schedulerName: "{{ .Values.schedulerName }}" |
| {{- end }} |
| {{- if .Values.imagePullSecrets }} |
| imagePullSecrets: |
| {{ toYaml .Values.imagePullSecrets | indent 8 }} |
| {{- end }} |
| {{- if .Values.priorityClassName }} |
| priorityClassName: "{{ .Values.priorityClassName }}" |
| {{- end }} |
| {{- if .Values.securityContext.enabled }} |
| securityContext: |
| fsGroup: {{ .Values.securityContext.fsGroup }} |
| runAsUser: {{ .Values.securityContext.runAsUser }} |
| {{- end }} |
| serviceAccountName: {{ template "mysql.serviceAccountName" . }} |
| initContainers: |
| - name: "remove-lost-found" |
| image: "{{ .Values.busybox.image}}:{{ .Values.busybox.tag }}" |
| imagePullPolicy: {{ .Values.imagePullPolicy | quote }} |
| resources: |
| {{ toYaml .Values.initContainer.resources | indent 10 }} |
| command: ["rm", "-fr", "/var/lib/mysql/lost+found"] |
| volumeMounts: |
| - name: data |
| mountPath: /var/lib/mysql |
| {{- if .Values.persistence.subPath }} |
| subPath: {{ .Values.persistence.subPath }} |
| {{- end }} |
| {{- if .Values.extraInitContainers }} |
| {{ tpl .Values.extraInitContainers . | indent 6 }} |
| {{- end }} |
| {{- if .Values.nodeSelector }} |
| nodeSelector: |
| {{ toYaml .Values.nodeSelector | indent 8 }} |
| {{- end }} |
| {{- if .Values.affinity }} |
| affinity: |
| {{ toYaml .Values.affinity | indent 8 }} |
| {{- end }} |
| {{- if .Values.tolerations }} |
| tolerations: |
| {{ toYaml .Values.tolerations | indent 8 }} |
| {{- end }} |
| containers: |
| - name: {{ template "mysql.fullname" . }} |
| image: "{{ .Values.image }}:{{ .Values.imageTag }}" |
| imagePullPolicy: {{ .Values.imagePullPolicy | quote }} |
| |
| {{- with .Values.args }} |
| args: |
| {{- range . }} |
| - {{ . | quote }} |
| {{- end }} |
| {{- end }} |
| resources: |
| {{ toYaml .Values.resources | indent 10 }} |
| env: |
| {{- if .Values.mysqlAllowEmptyPassword }} |
| - name: MYSQL_ALLOW_EMPTY_PASSWORD |
| value: "true" |
| {{- end }} |
| {{- if not (and .Values.allowEmptyRootPassword (not .Values.mysqlRootPassword)) }} |
| - name: MYSQL_ROOT_PASSWORD |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "mysql.secretName" . }} |
| key: mysql-root-password |
| {{- if .Values.mysqlAllowEmptyPassword }} |
| optional: true |
| {{- end }} |
| {{- end }} |
| {{- if not (and .Values.allowEmptyRootPassword (not .Values.mysqlPassword)) }} |
| - name: MYSQL_PASSWORD |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "mysql.secretName" . }} |
| key: mysql-password |
| {{- if or .Values.mysqlAllowEmptyPassword (empty .Values.mysqlUser) }} |
| optional: true |
| {{- end }} |
| {{- end }} |
| - name: MYSQL_USER |
| value: {{ default "" .Values.mysqlUser | quote }} |
| - name: MYSQL_DATABASE |
| value: {{ default "" .Values.mysqlDatabase | quote }} |
| {{- if .Values.timezone }} |
| - name: TZ |
| value: {{ .Values.timezone }} |
| {{- end }} |
| {{- if .Values.extraEnvVars }} |
| {{ tpl .Values.extraEnvVars . | indent 8 }} |
| {{- end }} |
| ports: |
| - name: mysql |
| containerPort: 3306 |
| {{- if .Values.mysqlx.port.enabled }} |
| - name: mysqlx |
| port: 33060 |
| {{- end }} |
| livenessProbe: |
| exec: |
| command: |
| {{- if .Values.mysqlAllowEmptyPassword }} |
| - mysqladmin |
| - ping |
| {{- else }} |
| - sh |
| - -c |
| - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" |
| {{- end }} |
| initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} |
| periodSeconds: {{ .Values.livenessProbe.periodSeconds }} |
| timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} |
| successThreshold: {{ .Values.livenessProbe.successThreshold }} |
| failureThreshold: {{ .Values.livenessProbe.failureThreshold }} |
| readinessProbe: |
| exec: |
| command: |
| {{- if .Values.mysqlAllowEmptyPassword }} |
| - mysqladmin |
| - ping |
| {{- else }} |
| - sh |
| - -c |
| - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" |
| {{- end }} |
| initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} |
| periodSeconds: {{ .Values.readinessProbe.periodSeconds }} |
| timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} |
| successThreshold: {{ .Values.readinessProbe.successThreshold }} |
| failureThreshold: {{ .Values.readinessProbe.failureThreshold }} |
| volumeMounts: |
| - name: data |
| mountPath: /var/lib/mysql |
| {{- if .Values.persistence.subPath }} |
| subPath: {{ .Values.persistence.subPath }} |
| {{- end }} |
| {{- if .Values.configurationFiles }} |
| {{- range $key, $val := .Values.configurationFiles }} |
| - name: configurations |
| mountPath: {{ $.Values.configurationFilesPath }}{{ $key }} |
| subPath: {{ $key }} |
| {{- end -}} |
| {{- end }} |
| {{- if .Values.initializationFiles }} |
| - name: migrations |
| mountPath: /docker-entrypoint-initdb.d |
| {{- end }} |
| {{- if .Values.ssl.enabled }} |
| - name: certificates |
| mountPath: /ssl |
| {{- end }} |
| {{- if .Values.extraVolumeMounts }} |
| {{ tpl .Values.extraVolumeMounts . | indent 8 }} |
| {{- end }} |
| {{- if .Values.metrics.enabled }} |
| - name: metrics |
| image: "{{ .Values.metrics.image }}:{{ .Values.metrics.imageTag }}" |
| imagePullPolicy: {{ .Values.metrics.imagePullPolicy | quote }} |
| {{- if .Values.mysqlAllowEmptyPassword }} |
| command: |
| - 'sh' |
| - '-c' |
| - 'DATA_SOURCE_NAME="root@(localhost:3306)/" /bin/mysqld_exporter' |
| {{- else }} |
| env: |
| - name: MYSQL_ROOT_PASSWORD |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "mysql.secretName" . }} |
| key: mysql-root-password |
| command: |
| - 'sh' |
| - '-c' |
| - 'DATA_SOURCE_NAME="root:$MYSQL_ROOT_PASSWORD@(localhost:3306)/" /bin/mysqld_exporter' |
| {{- end }} |
| {{- range $f := .Values.metrics.flags }} |
| - {{ $f | quote }} |
| {{- end }} |
| ports: |
| - name: metrics |
| containerPort: 9104 |
| livenessProbe: |
| httpGet: |
| path: / |
| port: metrics |
| initialDelaySeconds: {{ .Values.metrics.livenessProbe.initialDelaySeconds }} |
| timeoutSeconds: {{ .Values.metrics.livenessProbe.timeoutSeconds }} |
| readinessProbe: |
| httpGet: |
| path: / |
| port: metrics |
| initialDelaySeconds: {{ .Values.metrics.readinessProbe.initialDelaySeconds }} |
| timeoutSeconds: {{ .Values.metrics.readinessProbe.timeoutSeconds }} |
| resources: |
| {{ toYaml .Values.metrics.resources | indent 10 }} |
| {{- end }} |
| volumes: |
| {{- if .Values.configurationFiles }} |
| - name: configurations |
| configMap: |
| name: {{ template "mysql.fullname" . }}-configuration |
| {{- end }} |
| {{- if .Values.initializationFiles }} |
| - name: migrations |
| configMap: |
| name: {{ template "mysql.fullname" . }}-initialization |
| {{- end }} |
| {{- if .Values.ssl.enabled }} |
| - name: certificates |
| secret: |
| secretName: {{ .Values.ssl.secret }} |
| {{- end }} |
| - name: data |
| {{- if .Values.persistence.enabled }} |
| persistentVolumeClaim: |
| claimName: {{ .Values.persistence.existingClaim | default (include "mysql.fullname" .) }} |
| {{- else }} |
| emptyDir: {} |
| {{- end -}} |
| {{- if .Values.extraVolumes }} |
| {{ tpl .Values.extraVolumes . | indent 6 }} |
| {{- end }} |