Merge "[DCAEMOD] Uses new tpls for repos / images"
[oom.git] / kubernetes / common / mariadb-galera / templates / statefulset.yaml
1 {{/*
2 # Copyright © 2019 Amdocs, Bell Canada, Orange, Samsung Electronics
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 #       http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 */}}
16
17 apiVersion: apps/v1
18 kind: StatefulSet
19 metadata:
20   name: {{ include "common.fullname" . }}
21   namespace: {{ include "common.namespace" . }}
22   labels:
23     app: {{ include "common.fullname" . }}
24     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
25     release: "{{ include "common.release" . }}"
26     heritage: "{{ .Release.Service }}"
27 spec:
28   serviceName: {{ .Values.service.name }}
29   replicas: {{ .Values.replicaCount }}
30   selector:
31     matchLabels:
32       app: {{ include "common.fullname" . }}
33   template:
34     metadata:
35       labels:
36         app: {{ include "common.fullname" . }}
37         chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
38         release: "{{ include "common.release" . }}"
39         heritage: "{{ .Release.Service }}"
40       annotations:
41         pod.alpha.kubernetes.io/initialized: "true"
42     spec:
43     {{- if .Values.nodeSelector }}
44       nodeSelector:
45 {{ toYaml .Values.nodeSelector | indent 8 }}
46     {{- end }}
47       volumes:
48       {{- if .Values.externalConfig }}
49         - name: config
50           configMap:
51             name: {{ include "common.fullname" . }}-external-config
52       {{- end}}
53         - name: init-script
54           configMap:
55             name: {{ include "common.fullname" . }}
56             defaultMode: 0755
57         - name: localtime
58           hostPath:
59             path: /etc/localtime
60       imagePullSecrets:
61       - name: {{ include "common.namespace" . }}-docker-registry-key
62       containers:
63         - name: {{ include "common.name" . }}
64           image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image }}
65           imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy | quote}}
66           env:
67             - name: POD_NAMESPACE
68               valueFrom:
69                 fieldRef:
70                   apiVersion: v1
71                   fieldPath: metadata.namespace
72             - name: MYSQL_USER
73               {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" (include "common.mariadb.secret.userCredentialsUID" .) "key" "login") | indent 14}}
74             - name: MYSQL_PASSWORD
75               {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" (include "common.mariadb.secret.userCredentialsUID" .) "key" "password") | indent 14}}
76             - name: MYSQL_DATABASE
77               value: {{ default "" .Values.config.mysqlDatabase | quote }}
78             - name: MYSQL_ROOT_PASSWORD
79               {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" (include "common.mariadb.secret.rootPassUID" .) "key" "password") | indent 14}}
80           ports:
81           - containerPort: {{ .Values.service.internalPort }}
82             name: {{ .Values.service.portName }}
83           - containerPort: {{ .Values.service.sstPort }}
84             name: {{ .Values.service.sstPortName }}
85           - containerPort: {{ .Values.service.replicationPort }}
86             name: {{ .Values.service.replicationName }}
87           - containerPort: {{ .Values.service.istPort }}
88             name: {{ .Values.service.istPortName }}
89           readinessProbe:
90             exec:
91               command:
92               - /usr/share/container-scripts/mysql/readiness-probe.sh
93             initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
94             periodSeconds: {{ .Values.readiness.periodSeconds }}
95             timeoutSeconds: {{ .Values.readiness.timeoutSeconds }}
96       {{- if eq .Values.liveness.enabled true }}
97           livenessProbe:
98             exec:
99               command: ["mysqladmin", "ping"]
100             initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
101             periodSeconds: {{ .Values.liveness.periodSeconds }}
102             timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
103       {{- end }}
104           resources:
105 {{ include "common.resources" . | indent 12 }}
106           volumeMounts:
107         {{- if .Values.externalConfig }}
108           - mountPath: /etc/config
109             name: config
110         {{- end}}
111           - mountPath: /etc/localtime
112             name: localtime
113             readOnly: true
114           - mountPath: /usr/share/container-scripts/mysql/configure-mysql.sh
115             subPath: configure-mysql.sh
116             name: init-script
117 {{- if .Values.persistence.enabled }}
118           - mountPath: /var/lib/mysql
119             name: {{ include "common.fullname" . }}-data
120       initContainers:
121         - name: {{ include "common.name" . }}-prepare
122           image: {{ include "repositoryGenerator.image.busybox" . }}
123           imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy | quote}}
124           command: ["sh", "-c", "chown -R 27:27 /var/lib/mysql"]
125           volumeMounts:
126             - name: {{ include "common.fullname" . }}-data
127               mountPath: /var/lib/mysql
128   volumeClaimTemplates:
129   - metadata:
130       name: {{ include "common.fullname" . }}-data
131       labels:
132         name: {{ include "common.fullname" . }}
133         chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
134         release: "{{ include "common.release" . }}"
135         heritage: "{{ .Release.Service }}"
136     spec:
137       accessModes:
138       - {{ .Values.persistence.accessMode | quote }}
139       storageClassName: {{ include "common.storageClass" . }}
140       resources:
141         requests:
142           storage: {{ .Values.persistence.size | quote }}
143 {{- end }}