ZooKeeper and Kafka deployment changes
[oom.git] / kubernetes / dmaap / charts / message-router / charts / message-router-zookeeper / templates / statefulset.yaml
@@ -13,8 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-apiVersion: extensions/v1beta1
-kind: Deployment
+apiVersion: apps/v1beta1
+kind: StatefulSet
 metadata:
   name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
@@ -24,15 +24,32 @@ metadata:
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
+  serviceName: {{ .Values.service.name }}
   replicas: {{ .Values.replicaCount }}
+  updateStrategy:
+    type: RollingUpdate
+    rollingUpdate:
+      maxUnavailable: {{ .Values.maxUnavailable }}
+  podManagementPolicy: Parallel
   template:
     metadata:
       labels:
         app: {{ include "common.name" . }}
         release: {{ .Release.Name }}
     spec:
+      podAntiAffinity:
+         preferredDuringSchedulingIgnoredDuringExecution:
+         - weight: 1
+           podAffinityTerm:
+             labelSelector:
+                matchExpressions:
+                  - key: "app"
+                    operator: In
+                    values:
+                    - {{ include "common.name" . }}
+             topologyKey: "kubernetes.io/hostname"
       initContainers:
-      - name: {{ include "common.name" . }}-seed-zookeeper-topics
+      - name: {{ include "common.name" . }}-seed-topics-apikeys
         command:
         - /bin/bash
         - -c
@@ -57,31 +74,73 @@ spec:
         resources:
 {{ include "common.resources" . | indent 12 }}
         ports:
-        - containerPort: {{ .Values.service.internalPort }}
+        - containerPort: {{ .Values.service.clientPort }}
+          name: {{ .Values.service.clientPortName }}
+        - containerPort: {{ .Values.service.serverPort }}
+          name: {{ .Values.service.serverPortName }}
+        - containerPort: {{ .Values.service.leaderElectionPort }}
+          name: {{ .Values.service.leaderElectionPortName }}
         {{ if eq .Values.liveness.enabled true }}
         livenessProbe:
-          tcpSocket:
-            port: {{ .Values.service.internalPort }}
+          exec:
+            command:
+            - sh
+            - -c
+            - "zookeeper-ready.sh 2181"
           initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
           periodSeconds: {{ .Values.liveness.periodSeconds }}
         {{ end }}
         readinessProbe:
-          tcpSocket:
-            port: {{ .Values.service.internalPort }}
+          exec:
+            command:
+            - sh
+            - -c
+            - "zookeeper-ready.sh 2181"
           initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
           periodSeconds: {{ .Values.readiness.periodSeconds }}
+        env:
+        - name: ZK_REPLICAS
+          value: "{{ .Values.replicaCount }}"
+        - name: ZK_INIT_LIMIT
+          value: "{{ .Values.zk.initLimit }}"
+        - name: ZK_SYNC_LIMIT
+          value: "{{ .Values.zk.syncLimit }}"
         volumeMounts:
         - mountPath: /etc/localtime
           name: localtime
           readOnly: true
-        - mountPath: /opt/zookeeper-3.4.9/data
+        - mountPath: /var/lib/zookeeper/data
           name: zookeeper-data
       volumes:
       - name: localtime
         hostPath:
           path: /etc/localtime
+{{ if not .Values.persistence.enabled }}
       - name: zookeeper-data
-        persistentVolumeClaim:
-          claimName: {{ include "common.fullname" .  }}
+        emptyDir: {}
+{{ else }}
+  volumeClaimTemplates:
+    - metadata:
+        name:  zookeeper-data
+        labels:
+          app:  {{ include "common.fullname" . }}
+          chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+          release: "{{ .Release.Name }}"
+          heritage: "{{ .Release.Service }}"
+      spec:
+        accessModes:
+          - {{ .Values.persistence.accessMode | quote }}
+        resources:
+          requests:
+            storage: {{ .Values.persistence.size | quote }}
+        selector:
+          matchLabels:
+            release: "{{ .Release.Name }}"
+            app: {{ .Values.service.name }}
+            chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+            heritage: "{{ .Release.Service }}"
+{{ end }}
       imagePullSecrets:
       - name: "{{ include "common.namespace" . }}-docker-registry-key"
+
+