apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: {{ template "common.fullname" . }} labels: app: {{ template "common.name" . }} chart: {{ .Chart.Name }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} component: server spec: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - "{{ .Chart.Name }}" serviceName: {{ template "common.fullname" . }}-headless replicas: {{ .Values.replicaCount }} terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }} selector: matchLabels: app: {{ template "common.name" . }} release: {{ .Release.Name }} component: server updateStrategy: {{ toYaml .Values.updateStrategy | indent 4 }} template: metadata: labels: app: {{ template "common.name" . }} release: {{ .Release.Name }} component: server {{- if .Values.podLabels }} ## Custom pod labels {{- range $key, $value := .Values.podLabels }} {{ $key }}: {{ $value | quote }} {{- end }} {{- end }} annotations: {{- if .Values.podAnnotations }} ## Custom pod annotations {{- range $key, $value := .Values.podAnnotations }} {{ $key }}: {{ $value | quote }} {{- end }} {{- end }} spec: {{- if .Values.schedulerName }} schedulerName: "{{ .Values.schedulerName }}" {{- end }} securityContext: {{ toYaml .Values.securityContext | indent 8 }} containers: - name: zookeeper image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} command: - /bin/bash - -xec - zkGenConfig.sh && exec zkServer.sh start-foreground ports: {{- range $key, $port := .Values.ports }} - name: {{ $key }} {{ toYaml $port | indent 14 }} {{- end }} livenessProbe: {{ toYaml .Values.livenessProbe | indent 12 }} readinessProbe: {{ toYaml .Values.readinessProbe | indent 12 }} env: - name: ZK_REPLICAS value: {{ .Values.replicaCount | quote }} {{- range $key, $value := .Values.env }} - name: {{ $key | upper | replace "." "_" }} value: {{ $value | quote }} {{- end }} resources: {{ include "common.resources" . }} volumeMounts: - name: zookeeper-data mountPath: /var/lib/zookeeper {{- if .Values.exporters.jmx.enabled }} - name: jmx-exporter image: "{{ .Values.exporters.jmx.image.repository }}:{{ .Values.exporters.jmx.image.tag }}" imagePullPolicy: {{ .Values.exporters.jmx.image.pullPolicy }} ports: {{- range $key, $port := .Values.exporters.jmx.ports }} - name: {{ $key }} {{ toYaml $port | indent 14 }} {{- end }} livenessProbe: {{ toYaml .Values.exporters.jmx.livenessProbe | indent 12 }} readinessProbe: {{ toYaml .Values.exporters.jmx.readinessProbe | indent 12 }} env: - name: SERVICE_PORT value: {{ .Values.exporters.jmx.ports.jmxxp.containerPort | quote }} {{- with .Values.exporters.jmx.env }} {{- range $key, $value := . }} - name: {{ $key | upper | replace "." "_" }} value: {{ $value | quote }} {{- end }} {{- end }} resources: {{ toYaml .Values.exporters.jmx.resources | indent 12 }} volumeMounts: - name: config-jmx-exporter mountPath: /opt/jmx_exporter/config.yml subPath: config.yml {{- end }} {{- if .Values.exporters.zookeeper.enabled }} - name: zookeeper-exporter image: "{{ .Values.exporters.zookeeper.image.repository }}:{{ .Values.exporters.zookeeper.image.tag }}" imagePullPolicy: {{ .Values.exporters.zookeeper.image.pullPolicy }} args: - -bind-addr=:{{ .Values.exporters.zookeeper.ports.zookeeperxp.containerPort }} - -metrics-path={{ .Values.exporters.zookeeper.path }} - -zookeeper=localhost:{{ .Values.ports.client.containerPort }} - -log-level={{ .Values.exporters.zookeeper.config.logLevel }} - -reset-on-scrape={{ .Values.exporters.zookeeper.config.resetOnScrape }} ports: {{- range $key, $port := .Values.exporters.zookeeper.ports }} - name: {{ $key }} {{ toYaml $port | indent 14 }} {{- end }} livenessProbe: {{ toYaml .Values.exporters.zookeeper.livenessProbe | indent 12 }} readinessProbe: {{ toYaml .Values.exporters.zookeeper.readinessProbe | indent 12 }} env: {{- range $key, $value := .Values.exporters.zookeeper.env }} - name: {{ $key | upper | replace "." "_" }} value: {{ $value | quote }} {{- end }} resources: {{ toYaml .Values.exporters.zookeeper.resources | indent 12 }} {{- end }} {{- with .Values.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.affinity }} affinity: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.tolerations }} tolerations: {{ toYaml . | indent 8 }} {{- end }} {{- if (or .Values.exporters.jmx.enabled (not .Values.persistence.enabled)) }} volumes: {{- if .Values.exporters.jmx.enabled }} - name: config-jmx-exporter configMap: name: {{ .Release.Name }}-jmx-exporter {{- end }} {{- if not .Values.persistence.enabled }} - name: zookeeper-data emptyDir: {} {{- end }} {{- end }} {{- if .Values.persistence.enabled }} volumeClaimTemplates: - metadata: name: zookeeper-data labels: app: {{ .Chart.Name }} chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" annotations: volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass }} spec: storageClassName: {{ .Values.persistence.storageClass }} accessModes: - {{ .Values.persistence.accessMode | quote }} resources: requests: storage: {{ .Values.persistence.size | quote }} {{- end }}