f4583a16eab516dfdb4697b9fc3824ca095e681a
[oom.git] / kubernetes / dmaap / components / message-router / charts / message-router-kafka / templates / statefulset.yaml
1 # Copyright © 2017 Amdocs, Bell Canada
2 # Modifications Copyright © 2018 AT&T
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 apiVersion: apps/v1beta1
17 kind: StatefulSet
18 metadata:
19   name: {{ include "common.fullname" . }}
20   namespace: {{ include "common.namespace" . }}
21   labels:
22     app: {{ include "common.name" . }}
23     chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
24     release: {{ .Release.Name }}
25     heritage: {{ .Release.Service }}
26 spec:
27   serviceName: {{ .Values.service.name }}
28   replicas: {{ .Values.replicaCount }}
29   podManagementPolicy: Parallel
30   template:
31     metadata:
32       labels:
33         app:  {{ include "common.name" . }}
34         release: {{ .Release.Name }}
35     spec:
36       podAntiAffinity:
37          preferredDuringSchedulingIgnoredDuringExecution:
38          - weight: 1
39            podAffinityTerm:
40              labelSelector:
41                 matchExpressions:
42                   - key: "app"
43                     operator: In
44                     values:
45                     - {{ include "common.name" . }}
46              topologyKey: "kubernetes.io/hostname"
47       {{- if .Values.nodeAffinity }}
48       nodeAffinity:
49         {{ toYaml .Values.nodeAffinity | indent 10 }}
50       {{- end }}
51       initContainers:
52       - name: {{ include "common.name" . }}-initcontainer
53         image: "{{ .Values.global.ubuntuInitRepository }}/{{ .Values.ubuntuInitImage }}"
54         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
55       - command:
56         - /root/ready.py
57         args:
58         - --container-name
59         - {{ .Values.zookeeper.name }}
60         env:
61         - name: NAMESPACE
62           valueFrom:
63             fieldRef:
64               apiVersion: v1
65               fieldPath: metadata.namespace
66         image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
67         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
68         name: {{ include "common.name" . }}-readiness
69       containers:
70       - name: {{ include "common.name" .  }}
71         image: "{{ include "common.repository" . }}/{{ .Values.image }}"
72         imagePullPolicy:  {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
73         resources:
74 {{ include "common.resources" . | indent 12 }}
75         ports:
76         - containerPort: {{ .Values.service.internalPort }}
77        {{ if eq .Values.liveness.enabled true }}
78         livenessProbe:
79           tcpSocket:
80             port: {{ .Values.service.internalPort }}
81           initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
82           periodSeconds: {{ .Values.liveness.periodSeconds }}
83         {{ end }}
84         readinessProbe:
85           tcpSocket:
86             port: {{ .Values.service.internalPort }}
87           initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
88           periodSeconds: {{ .Values.readiness.periodSeconds }}
89         env:
90         - name: HOST_NAME
91           valueFrom:
92             fieldRef:
93               apiVersion: v1
94               fieldPath: metadata.name
95         - name: HOST_NAMESPACE
96           valueFrom:
97             fieldRef:
98               apiVersion: v1
99               fieldPath: metadata.namespace
100         - name: KAFKA_ZOOKEEPER_CONNECT
101           value: "{{.Values.zookeeper.name}}:{{.Values.zookeeper.port}}"
102         - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
103           value: "INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT"
104         - name: KAFKA_ADVERTISED_LISTENERS
105           value: "INTERNAL_PLAINTEXT://$(HOST_NAME).{{ .Values.service.name }}.$(HOST_NAMESPACE).svc.cluster.local:{{ .Values.service.internalPort}}"
106         - name: KAFKA_LISTENERS
107           value: "INTERNAL_PLAINTEXT://0.0.0.0:{{.Values.service.internalPort}}"
108         - name: KAFKA_INTER_BROKER_LISTENER_NAME
109           value: "INTERNAL_PLAINTEXT"
110         - name: KAFKA_LOG_DIRS
111           value: "kafka/logs"
112         - name: BROKER_ID_COMMAND
113           value: "hostname | awk -F '-' '{print $NF}'"
114         - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
115           value: "{{ .Values.replicaCount }}"
116         - name: KAFKA_DEFAULT_REPLICATION_FACTOR
117           value: "{{ .Values.replicaCount }}"
118         - name: KAFKA_NUM_PARTITIONS
119           value: "{{ .Values.defaultpartitions }}"
120         volumeMounts:
121         - mountPath: /etc/localtime
122           name: localtime
123           readOnly: true
124         - mountPath: /var/run/docker.sock
125           name: docker-socket
126         - mountPath: /kafka
127           name: kafka-data
128       {{- if .Values.tolerations }}
129       tolerations:
130         {{ toYaml .Values.tolerations | indent 10 }}
131       {{- end }}
132       volumes:
133       - name: localtime
134         hostPath:
135           path: /etc/localtime
136       - name: docker-socket
137         hostPath:
138           path: /var/run/docker.sock
139 {{ if not .Values.persistence.enabled }}
140       - name: kafka-data
141         emptyDir: {}
142 {{ else }}
143   volumeClaimTemplates:
144     - metadata:
145         name: kafka-data
146         labels:
147           app: {{ include "common.fullname" . }}
148           chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
149           release: "{{ .Release.Name }}"
150           heritage: "{{ .Release.Service }}"
151       spec:
152         accessModes:
153           - {{ .Values.persistence.accessMode | quote }}
154         resources:
155           requests:
156             storage: {{ .Values.persistence.size | quote }}
157         selector:
158           matchLabels:
159             release: "{{ .Release.Name }}"
160             app: {{ .Values.service.name }}
161             chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
162             heritage: "{{ .Release.Service }}"
163 {{ end }}
164       imagePullSecrets:
165       - name: "{{ include "common.namespace" . }}-docker-registry-key"