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