-################################################################################
-# Copyright (c) 2019 AT&T Intellectual Property. #
-# Copyright (c) 2019 Nokia. #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); #
-# you may not use this file except in compliance with the License. #
-# You may obtain a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-################################################################################
-
-
-apiVersion: apps/v1beta1
-kind: StatefulSet
-metadata:
- name: {{ include "common.fullname" . }}
- namespace: {{ include "common.namespace" . }}
- labels:
- app: {{ include "common.name" . }}
- chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
- release: {{ .Release.Name }}
- heritage: {{ .Release.Service }}
-spec:
- serviceName: {{ .Values.service.name }}
- replicas: {{ .Values.replicaCount }}
- podManagementPolicy: Parallel
- template:
- metadata:
- labels:
- app: {{ include "common.name" . }}
- release: {{ .Release.Name }}
- spec:
- podAntiAffinity:
- {{if eq .Values.podAntiAffinityType "hard" -}}
- requiredDuringSchedulingIgnoredDuringExecution:
- {{- else -}}
- preferredDuringSchedulingIgnoredDuringExecution:
- {{- end}}
- - weight: 1
- podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: "app"
- operator: In
- values:
- - {{ include "common.name" . }}
- topologyKey: "kubernetes.io/hostname"
- {{- if .Values.nodeAffinity }}
- nodeAffinity:
- {{ toYaml .Values.nodeAffinity | indent 10 }}
- {{- end }}
- initContainers:
- - name: {{ include "common.name" . }}-initcontainer
- image: "{{ .Values.global.ubuntuInitRepository }}/{{ .Values.ubuntuInitImage }}"
- imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
- - command:
- - sh
- - -exec
- - |
- chown -R 1000:1000 /opt/kafka/data;
- image: "{{ .Values.busyBoxRepository }}/{{ .Values.busyBoxImage }}"
- imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
- volumeMounts:
- - mountPath: /opt/kafka/data
- name: kafka-data
- name: {{ include "common.name" . }}-permission-fixer
- containers:
- - name: {{ include "common.name" . }}
- image: "{{ .Values.onapRepository }}/{{ .Values.image }}"
- imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
- command:
- - sh
- - -exc
- - |
- export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
- export ENDPOINT_PORT=$(( $KAFKA_BROKER_ID + {{ .Values.service.baseNodePort }} )) && \
- export KAFKA_ADVERTISED_LISTENERS=EXTERNAL_SASL_PLAINTEXT://$(HOST_IP):$(( $KAFKA_BROKER_ID + {{ .Values.service.baseNodePort }} )),INTERNAL_SASL_PLAINTEXT://:{{ .Values.service.internalPort }} && \
- exec start-kafka.sh
- resources:
-{{ include "common.resources" . | indent 12 }}
- ports:
- - containerPort: {{ .Values.service.internalPort }}
- - containerPort: {{ .Values.service.externalPort }}
- {{ if eq .Values.liveness.enabled true }}
- livenessProbe:
- tcpSocket:
- port: {{ .Values.service.internalPort }}
- initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
- periodSeconds: {{ .Values.liveness.periodSeconds }}
- {{ end }}
- readinessProbe:
- tcpSocket:
- port: {{ .Values.service.internalPort }}
- initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
- periodSeconds: {{ .Values.readiness.periodSeconds }}
- env:
- - name: HOST_IP
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: status.hostIP
- - name: KAFKA_ZOOKEEPER_CONNECT
- value: "{{.Values.zookeeper.name}}:{{.Values.zookeeper.port}}"
- - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
- value: "INTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT"
- - name: KAFKA_LISTENERS
- value: "EXTERNAL_SASL_PLAINTEXT://0.0.0.0:{{ .Values.service.externalPort }},INTERNAL_SASL_PLAINTEXT://0.0.0.0:{{ .Values.service.internalPort }}"
- - name: KAFKA_INTER_BROKER_LISTENER_NAME
- value: "INTERNAL_SASL_PLAINTEXT"
- - name: KAFKA_SASL_ENABLED_MECHANISMS
- value: "PLAIN"
- - name: KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL
- value: "PLAIN"
- - name: KAFKA_AUTHORIZER_CLASS_NAME
- value: "{{ .Values.kafkaCustomAuthorizer }}"
- - name: KAFKA_DELETE_TOPIC_ENABLE
- value: "{{ .Values.deleteTopicEnable }}"
- - name: aaf_locate_url
- value: "https://aaf-locate:8095"
- - name: KAFKA_LOG_DIRS
- value: "/opt/kafka/data"
- - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
- value: "{{ .Values.replicaCount }}"
- - name: KAFKA_DEFAULT_REPLICATION_FACTOR
- value: "{{ .Values.replicaCount }}"
- - name: KAFKA_NUM_PARTITIONS
- value: "{{ .Values.defaultpartitions }}"
- volumeMounts:
- - mountPath: /etc/localtime
- name: localtime
- readOnly: true
- - mountPath: /var/run/docker.sock
- name: docker-socket
- - mountPath: /opt/kafka/data
- name: kafka-data
- {{- if .Values.tolerations }}
- tolerations:
- {{ toYaml .Values.tolerations | indent 10 }}
- {{- end }}
- volumes:
- - name: localtime
- hostPath:
- path: /etc/localtime
- - name: docker-socket
- hostPath:
- path: /var/run/docker.sock
-{{ if not .Values.persistence.enabled }}
- - name: kafka-data
- emptyDir: {}
-{{ else }}
- volumeClaimTemplates:
- - metadata:
- name: kafka-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"