[MARIADB][COMMON] Add support for mariadb-operator
[oom.git] / kubernetes / common / cassandra / templates / statefulset.yaml
1 {{/*
2 # Copyright © 2022 Amdocs, AT&T, Bell Canada, Bitnami
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 {{- if not .Values.global.cassandra.useOperator }}
18 apiVersion: apps/v1
19 kind: StatefulSet
20 metadata: {{- include "common.resourceMetadata" . | nindent 2 }}
21 spec:
22   selector: {{- include "common.selectors" . | nindent 4 }}
23   serviceName: {{ include "common.servicename" . }}
24   replicas: {{ .Values.replicaCount }}
25   podManagementPolicy: {{ .Values.podManagementPolicy }}
26   updateStrategy:
27     type: {{ .Values.updateStrategy.type }}
28   template:
29     metadata: {{- include "common.templateMetadata" . | nindent 6 }}
30     spec:
31       hostNetwork: {{ .Values.hostNetwork }}
32       imagePullSecrets:
33       - name: "{{ include "common.namespace" . }}-docker-registry-key"
34       containers:
35       - name: {{ include "common.name" . }}
36         image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image }}
37         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
38         ports: {{ include "common.containerPorts" . | nindent 8  }}
39         volumeMounts:
40           - name: {{ include "common.fullname" . }}-data
41             mountPath: /var/lib/cassandra
42           - name: localtime
43             mountPath: /etc/localtime
44             readOnly: true
45           - name: cassandra-entrypoint
46             mountPath: /docker-entrypoint.sh
47             subPath: docker-entrypoint.sh
48           {{- range $key, $value := .Values.configOverrides }}
49           - name: cassandra-config-{{ $key | replace "." "-" }}
50             mountPath: /etc/cassandra/{{ $key }}
51             subPath: {{ $key }}
52           {{- end }}
53         {{- if eq .Values.liveness.enabled true }}
54         livenessProbe:
55           exec:
56             command:
57             - /bin/bash
58             - -c
59             - nodetool status | grep $POD_IP | awk '$1!="UN" { exit 1; }'
60           initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
61           periodSeconds: {{ .Values.liveness.periodSeconds }}
62           timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
63           successThreshold: {{ .Values.liveness.successThreshold }}
64           failureThreshold: {{ .Values.liveness.failureThreshold }}
65         {{ end }}
66         readinessProbe:
67           exec:
68             command:
69             - /bin/bash
70             - -c
71             - nodetool status | grep $POD_IP | awk '$1!="UN" { exit 1; }'
72           initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
73           periodSeconds: {{ .Values.readiness.periodSeconds }}
74           timeoutSeconds: {{ .Values.readiness.timeoutSeconds }}
75           successThreshold: {{ .Values.readiness.successThreshold }}
76           failureThreshold: {{ .Values.readiness.failureThreshold }}
77         startupProbe:
78           exec:
79             command:
80             - /bin/bash
81             - -c
82             - nodetool status | grep $POD_IP | awk '$1!="UN" { exit 1; }'
83           initialDelaySeconds: {{ .Values.startup.initialDelaySeconds }}
84           periodSeconds: {{ .Values.startup.periodSeconds }}
85           timeoutSeconds: {{ .Values.startup.timeoutSeconds }}
86           successThreshold: {{ .Values.startup.successThreshold }}
87           failureThreshold: {{ .Values.startup.failureThreshold }}
88         env:
89           {{- $seed_size := default 1 .Values.replicaCount | int -}}
90           {{- $global := . }}
91           - name: CASSANDRA_SEEDS
92           {{- if .Values.hostNetwork }}
93             value: {{ required "You must fill \".Values.config.seeds\" with list of Cassandra seeds when hostNetwork is set to true" .Values.config.seeds | quote }}
94           {{- else }}
95             value: "{{- range $i, $e := until $seed_size }}{{ template "common.fullname" $global }}-{{ $i }}.{{ template "common.servicename" $global }}.{{ $global.Release.Namespace }}.svc.{{ $global.Values.config.cluster_domain }}{{- if (lt ( add1 $i ) $seed_size ) }},{{- end }}{{- end }}"
96           {{- end }}
97           - name: MAX_HEAP_SIZE
98             value: {{ .Values.config.heap.max }}
99           - name: HEAP_NEWSIZE
100             value: {{ .Values.config.heap.min }}
101           - name: JVM_OPTS
102             value: {{ .Values.config.jvmOpts | quote }}
103           - name: CASSANDRA_CLUSTER_NAME
104             value: {{ .Values.config.clusterName | quote }}
105           - name: CASSANDRA_DC
106             value: {{ .Values.config.dataCenter | quote }}
107           - name: CASSANDRA_RACK
108             value: {{ .Values.config.rackName | quote }}
109           - name: CASSANDRA_AUTO_BOOTSTRAP
110             value: {{ .Values.config.autoBootstrap | quote }}
111           - name: CASSANDRA_START_RPC
112             value: {{ default "true" .Values.config.start_rpc | quote }}
113           - name: CASSANDRA_ENDPOINT_SNITCH
114             value: {{ default "GossipingPropertyFileSnitch" .Values.config.endpoint_snitch | quote }}
115           - name: CASSANDRA_AUTHENTICATOR
116             value: {{ default "PasswordAuthenticator" .Values.config.authenticator | quote }}
117           - name: POD_IP
118             valueFrom:
119               fieldRef:
120                 fieldPath: status.podIP
121         lifecycle:
122           preStop:
123             exec:
124         {{- if not .Values.persistence.enabled }}
125               command: ["/bin/sh", "-c", "exec nodetool decommission"]
126         {{- else }}
127               command: ["/bin/sh", "-c", "PID=$(pidof java) && kill $PID && while ps -p $PID > /dev/null; do sleep 1; done"]
128         {{- end }}
129         resources: {{ toYaml .Values.resources | nindent 10 }}
130       {{- if .Values.metrics.serviceMonitor.enabled }}
131       - name: {{ include "common.name" . }}-metrics
132         image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.metrics.image }}
133         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.metrics.pullPolicy | quote}}
134         {{- if (.Values.metrics.enabled) }}
135         ports:
136         {{- range $index, $metricPort := .Values.metrics.ports }}
137         - name: {{ $metricPort.name }}
138           containerPort: {{ $metricPort.port }}
139           protocol: TCP
140         {{- end }}
141         livenessProbe:
142           httpGet:
143             path: {{ .Values.metrics.livenessProbe.httpGet.path }}
144             port: {{ .Values.metrics.livenessProbe.httpGet.port }}
145           initialDelaySeconds: {{ .Values.metrics.livenessProbe.initialDelaySeconds }}
146           periodSeconds: {{ .Values.metrics.livenessProbe.periodSeconds }}
147           timeoutSeconds: {{ .Values.metrics.livenessProbe.timeoutSeconds }}
148           successThreshold: {{ .Values.metrics.livenessProbe.successThreshold }}
149           failureThreshold: {{ .Values.metrics.livenessProbe.failureThreshold }}
150         readinessProbe:
151           httpGet:
152             path: {{ .Values.metrics.readinessProbe.httpGet.path }}
153             port: {{ .Values.metrics.readinessProbe.httpGet.port }}
154           initialDelaySeconds: {{ .Values.metrics.readinessProbe.initialDelaySeconds }}
155           periodSeconds: {{ .Values.metrics.readinessProbe.periodSeconds }}
156           timeoutSeconds: {{ .Values.metrics.readinessProbe.timeoutSeconds }}
157           successThreshold: {{ .Values.metrics.readinessProbe.successThreshold }}
158           failureThreshold: {{ .Values.metrics.readinessProbe.failureThreshold }}
159         {{- end }}
160         {{ include "common.containerSecurityContext" . | indent 10 | trim }}
161         {{- if .Values.metrics.resources }}
162         resources: {{- toYaml .Values.metrics.resources | nindent 10 }}
163         {{- end }}
164       {{- end }}
165       {{- if .Values.nodeSelector }}
166       nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }}
167       {{- end -}}
168       {{- if .Values.affinity }}
169       affinity: {{ toYaml .Values.affinity | nindent 8 }}
170       {{- end }}
171       serviceAccountName: {{ include "common.fullname" (dict "suffix" "nothing" "dot" . )}}
172       volumes:
173       - name: localtime
174         hostPath:
175           path: /etc/localtime
176       {{- range $key, $value := .Values.configOverrides }}
177       - name: cassandra-config-{{ $key | replace "." "-" }}
178         configMap:
179           name: {{ include "common.fullname" . }}-configOverrides
180       {{- end }}
181       - name: cassandra-entrypoint
182         configMap:
183           name: {{ include "common.fullname" . }}-entrypoint
184           defaultMode: 0755
185   {{- if not .Values.persistence.enabled }}
186       - name: {{ include "common.fullname" . }}-data
187         emptyDir: {}
188   {{- else }}
189   volumeClaimTemplates:
190     - metadata:
191         name: {{ include "common.fullname" . }}-data
192         labels:
193           name: {{ include "common.fullname" . }}
194           chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
195           release: "{{ include "common.release" . }}"
196           heritage: "{{ .Release.Service }}"
197       spec:
198         accessModes:
199         {{- if .Values.backup.enabled }}
200         - ReadWriteMany
201         {{- else }}
202         - ReadWriteOnce
203         {{- end }}
204         storageClassName: {{ include "common.storageClass" . }}
205         resources:
206           requests:
207             storage: {{ .Values.persistence.size | quote }}
208   {{- end }}
209 {{- end }}