# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. # {{- if .Values.extra.autoRecovery }} apiVersion: apps/v1 kind: Deployment metadata: name: "{{ template "pulsar.fullname" . }}-{{ .Values.autoRecovery.component }}" namespace: {{ .Values.namespace }} labels: app: {{ template "pulsar.name" . }} chart: {{ template "pulsar.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} component: {{ .Values.autoRecovery.component }} cluster: {{ template "pulsar.fullname" . }} spec: replicas: {{ .Values.autoRecovery.replicaCount }} selector: matchLabels: app: {{ template "pulsar.name" . }} release: {{ .Release.Name }} component: {{ .Values.autoRecovery.component }} template: metadata: labels: app: {{ template "pulsar.name" . }} release: {{ .Release.Name }} component: {{ .Values.autoRecovery.component }} cluster: {{ template "pulsar.fullname" . }} annotations: {{ toYaml .Values.autoRecovery.annotations | indent 8 }} spec: {{- if .Values.autoRecovery.nodeSelector }} nodeSelector: {{ toYaml .Values.autoRecovery.nodeSelector | indent 8 }} {{- end }} {{- if .Values.autoRecovery.tolerations }} tolerations: {{ toYaml .Values.autoRecovery.tolerations | indent 8 }} {{- end }} affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - "{{ template "pulsar.name" . }}-{{ .Values.bookkeeper.component }}" - key: "release" operator: In values: - {{ .Release.Name }} - key: "component" operator: In values: - {{ .Values.bookkeeper.component }} topologyKey: "kubernetes.io/hostname" terminationGracePeriodSeconds: {{ .Values.autoRecovery.gracePeriod }} initContainers: # This init container will wait for zookeeper to be ready before # deploying the bookies - name: wait-zookeeper-ready image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} command: ["sh", "-c"] args: - >- until bin/pulsar zookeeper-shell -server {{ template "pulsar.fullname" . }}-{{ .Values.zookeeper.component }} ls /admin/clusters/{{ template "pulsar.fullname" . }}; do sleep 3; done; containers: - name: "{{ template "pulsar.fullname" . }}-{{ .Values.autoRecovery.component }}" image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} {{- if .Values.autoRecovery.resources }} resources: {{ toYaml .Values.autoRecovery.resources | indent 10 }} {{- end }} command: ["sh", "-c"] args: - > bin/apply-config-from-env.py conf/bookkeeper.conf && bin/bookkeeper autorecovery envFrom: - configMapRef: name: "{{ template "pulsar.fullname" . }}-{{ .Values.autoRecovery.component }}" {{- end }}