[GENERAL] Use readiness container v3.0.1
[oom.git] / kubernetes / dmaap / components / message-router / charts / message-router-kafka / templates / statefulset.yaml
1 # Modifications Copyright © 2018 AT&T
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #       http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 apiVersion: apps/v1
16 kind: StatefulSet
17 metadata:
18   name: {{ include "common.fullname" . }}
19   namespace: {{ include "common.namespace" . }}
20   labels:
21     app: {{ include "common.name" . }}
22     chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
23     release: {{ include "common.release" . }}
24     heritage: {{ .Release.Service }}
25 spec:
26   selector:
27     matchLabels:
28       app: {{ include "common.name" . }}
29   serviceName: {{ .Values.service.name }}
30   replicas: {{ .Values.replicaCount }}
31   podManagementPolicy: Parallel
32   template:
33     metadata:
34       labels:
35         app:  {{ include "common.name" . }}
36         release: {{ include "common.release" . }}
37       {{- if .Values.prometheus.jmx.enabled }}
38       annotations:
39         prometheus.io/scrape: "true"
40         prometheus.io/port: {{ .Values.prometheus.jmx.port | quote }}
41       {{- end }}
42     spec:
43       podAntiAffinity:
44          {{if eq .Values.podAntiAffinityType "hard" -}}
45          requiredDuringSchedulingIgnoredDuringExecution:
46          {{- else -}}
47          preferredDuringSchedulingIgnoredDuringExecution:
48          {{- end}}
49          - weight: 1
50            podAffinityTerm:
51              labelSelector:
52                 matchExpressions:
53                   - key: "app"
54                     operator: In
55                     values:
56                     - {{ include "common.name" . }}
57                   - key: "release"
58                     operator: In
59                     values:
60                     - {{ include "common.release" . }}
61              topologyKey: "kubernetes.io/hostname"
62       {{- if .Values.nodeAffinity }}
63       nodeAffinity:
64       {{ toYaml .Values.nodeAffinity | indent 10 }}
65       {{- end }}
66       initContainers:
67       - name: {{ include "common.name" . }}-initcontainer
68         image: "{{ .Values.global.ubuntuInitRepository }}/{{ .Values.ubuntuInitImage }}"
69         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
70       - command:
71         - /app/ready.py
72         args:
73         - --container-name
74         - {{ .Values.zookeeper.name }}
75         env:
76         - name: NAMESPACE
77           valueFrom:
78             fieldRef:
79               apiVersion: v1
80               fieldPath: metadata.namespace
81         image: "{{ include "common.repository" . }}/{{ .Values.global.readinessImage }}"
82         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
83         name: {{ include "common.name" . }}-readiness
84       - command:
85         -  sh
86         - -exec
87         - |
88           rm -rf '/var/lib/kafka/data/lost+found';
89           chown -R 1000:0 /var/lib/kafka/data;
90         image: "{{ .Values.busyBoxRepository }}/{{ .Values.busyBoxImage }}"
91         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
92         volumeMounts:
93         - mountPath: /var/lib/kafka/data
94           name: kafka-data
95         name: {{ include "common.name" . }}-permission-fixer
96       - command:
97         - sh
98         args:
99         - -c
100         - "cd /config-input  && for PFILE in `ls -1 .`; do envsubst <${PFILE} >/etc/kafka/secrets/jaas/${PFILE}; done"
101         env:
102         - name: ZK_ADMIN
103           {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "zk-client" "key" "login") | indent 10 }}
104         - name: ZK_PSWD
105           {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "zk-client" "key" "password") | indent 10 }}
106         - name: KAFKA_ADMIN
107           {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "kafka-admin" "key" "login") | indent 10 }}
108         - name: KAFKA_PSWD
109           {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "kafka-admin" "key" "password") | indent 10 }}
110         volumeMounts:
111         - mountPath: /etc/kafka/secrets/jaas
112           name: jaas-config
113         - mountPath: /config-input
114           name: jaas
115         image: "{{ .Values.global.envsubstImage }}"
116         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
117         name: {{ include "common.name" . }}-update-config
118       containers:
119       {{- if .Values.prometheus.jmx.enabled }}
120       - name: prometheus-jmx-exporter
121         image: "{{ .Values.prometheus.jmx.imageRepository }}/{{ .Values.prometheus.jmx.image }}:{{ .Values.prometheus.jmx.imageTag }}"
122         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
123         command:
124         - java
125         - -XX:+UnlockExperimentalVMOptions
126         - -XX:+UseCGroupMemoryLimitForHeap
127         - -XX:MaxRAMFraction=1
128         - -XshowSettings:vm
129         - -jar
130         - jmx_prometheus_httpserver.jar
131         - {{ .Values.prometheus.jmx.port | quote }}
132         - /etc/jmx-kafka/jmx-kafka-prometheus.yml
133         ports:
134         - containerPort: {{ .Values.prometheus.jmx.port }}
135         resources:
136 {{ toYaml .Values.prometheus.jmx.resources | indent 10 }}
137         volumeMounts:
138         - name: jmx-config
139           mountPath: /etc/jmx-kafka
140       {{- end }}
141       - name: {{ include "common.name" .  }}
142         image: "{{ include "common.repository" . }}/{{ .Values.image }}"
143         imagePullPolicy:  {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
144         command:
145         - sh
146         - -exc
147         - |
148           export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
149           {{- if  .Values.global.aafEnabled }}
150           export KAFKA_ADVERTISED_LISTENERS=EXTERNAL_SASL_PLAINTEXT://$(HOST_IP):$(( $KAFKA_BROKER_ID + {{ .Values.service.baseNodePort }} )),INTERNAL_SASL_PLAINTEXT://:{{ .Values.service.internalPort }} && \
151           {{ else }}
152           export KAFKA_ADVERTISED_LISTENERS=EXTERNAL_PLAINTEXT://$(HOST_IP):$(( $KAFKA_BROKER_ID + {{ .Values.service.baseNodePort }} )),INTERNAL_PLAINTEXT://:{{ .Values.service.internalPort }} && \
153           {{- end }}
154           exec /etc/confluent/docker/run
155         resources:
156 {{ include "common.resources" . | indent 12 }}
157         ports:
158         - containerPort: {{ .Values.service.internalPort }}
159         - containerPort: {{ .Values.service.externalPort }}
160         {{- if .Values.prometheus.jmx.enabled }}
161         - containerPort: {{ .Values.jmx.port }}
162           name: jmx
163         {{- end }}
164        {{ if eq .Values.liveness.enabled true }}
165         livenessProbe:
166           tcpSocket:
167             port: {{ .Values.service.internalPort }}
168           initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
169           periodSeconds: {{ .Values.liveness.periodSeconds }}
170           timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
171         {{ end }}
172         readinessProbe:
173           tcpSocket:
174             port: {{ .Values.service.internalPort }}
175           initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
176           periodSeconds: {{ .Values.readiness.periodSeconds }}
177           timeoutSeconds: {{ .Values.readiness.timeoutSeconds }}
178         env:
179         - name: HOST_IP
180           valueFrom:
181             fieldRef:
182               apiVersion: v1
183               fieldPath: status.hostIP
184         - name: KAFKA_ZOOKEEPER_CONNECT
185           value: {{ include "common.release" . }}-{{.Values.zookeeper.name}}-0.{{.Values.zookeeper.name}}.{{.Release.Namespace}}.svc.cluster.local:{{.Values.zookeeper.port}},{{ include "common.release" . }}-{{.Values.zookeeper.name}}-1.{{.Values.zookeeper.name}}.{{.Release.Namespace}}.svc.cluster.local:{{.Values.zookeeper.port}},{{ include "common.release" . }}-{{.Values.zookeeper.name}}-2.{{.Values.zookeeper.name}}.{{.Release.Namespace}}.svc.cluster.local:{{.Values.zookeeper.port}}
186         - name: KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE
187           value: "{{ .Values.kafka.enableSupport }}"
188         - name: KAFKA_OPTS
189           value: "{{ .Values.kafka.jaasOptions }}"
190         {{- if  .Values.global.aafEnabled }}
191         - name: KAFKA_OPTS
192           value: "{{ .Values.kafka.jaasOptionsAaf }}"
193         - name: aaf_locate_url
194           value: https://aaf-locate.{{ include "common.namespace" . }}:8095
195         - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
196           value: "{{ .Values.kafka.protocolMapAaf }}"
197         - name: KAFKA_LISTENERS
198           value: "{{ .Values.kafka.listenersAaf }}"
199         - name: KAFKA_SASL_ENABLED_MECHANISMS
200           value: "{{ .Values.kafka.saslMech }}"
201         - name: KAFKA_INTER_BROKER_LISTENER_NAME
202           value: "{{ .Values.kafka.interBrokerListernerAaf }}"
203         - name: KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL
204           value: "{{ .Values.kafka.saslInterBrokerProtocol }}"
205         - name: KAFKA_AUTHORIZER_CLASS_NAME
206           value: "{{ .Values.kafka.authorizer }}"
207         {{ else }}
208         - name: KAFKA_OPTS
209           value: "{{ .Values.kafka.jaasOptions }}"
210         - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
211           value: "{{ .Values.kafka.protocolMap }}"
212         - name: KAFKA_LISTENERS
213           value: "{{ .Values.kafka.listeners }}"
214         - name: KAFKA_INTER_BROKER_LISTENER_NAME
215           value: "{{ .Values.kafka.interBrokerListerner }}"
216         {{- end }}
217         {{- range $key, $value := .Values.configurationOverrides }}
218         - name: {{ printf "KAFKA_%s" $key | replace "." "_" | upper | quote }}
219           value: {{ $value | quote }}
220         {{- end }}
221         {{- if .Values.jmx.port }}
222         - name: KAFKA_JMX_PORT
223           value: "{{ .Values.jmx.port }}"
224         {{- end }}
225         - name: enableCadi
226           value: "{{ .Values.global.aafEnabled }}"
227         volumeMounts:
228         - mountPath: /etc/localtime
229           name: localtime
230           readOnly: true
231         - mountPath: /var/run/docker.sock
232           name: docker-socket
233         {{- if .Values.global.aafEnabled }}
234         - mountPath: /etc/kafka/data/cadi.properties
235           subPath: cadi.properties
236           name: cadi
237         {{ end  }}
238         - name: jaas-config
239           mountPath: /etc/kafka/secrets/jaas
240         - mountPath: /var/lib/kafka/data
241           name: kafka-data
242       {{- if .Values.tolerations }}
243       tolerations:
244         {{ toYaml .Values.tolerations | indent 10 }}
245       {{- end }}
246       volumes:
247       - name: localtime
248         hostPath:
249           path: /etc/localtime
250       - name: jaas-config
251         emptyDir:
252           medium: Memory
253       - name: docker-socket
254         hostPath:
255           path: /var/run/docker.sock
256       {{- if .Values.global.aafEnabled }}
257       - name: cadi
258         configMap:
259           name: {{ include "common.fullname" . }}-cadi-prop-configmap
260       {{ end }}
261       - name: jaas
262         configMap:
263           name: {{ include "common.fullname" . }}-jaas-configmap
264        {{- if .Values.prometheus.jmx.enabled }}
265       - name: jmx-config
266         configMap:
267           name: {{ include "common.fullname" . }}-prometheus-configmap
268        {{- end }}
269 {{ if not .Values.persistence.enabled }}
270       - name: kafka-data
271         emptyDir: {}
272 {{ else }}
273   volumeClaimTemplates:
274     - metadata:
275         name: kafka-data
276         labels:
277           app: {{ include "common.fullname" . }}
278           chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
279           release: "{{ include "common.release" . }}"
280           heritage: "{{ .Release.Service }}"
281       spec:
282         accessModes:
283           - {{ .Values.persistence.accessMode | quote }}
284         storageClassName: {{ include "common.storageClass" . }}
285         resources:
286           requests:
287             storage: {{ .Values.persistence.size | quote }}
288 {{ end }}
289       imagePullSecrets:
290       - name: "{{ include "common.namespace" . }}-docker-registry-key"