################################################################################ # Copyright (c) 2021 HCL Technolgies Limited. # # # # 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/v1 kind: StatefulSet metadata: name: {{ include "common.fullname.influxdb" . }}-meta labels: {{- include "common.influxdb.labels" . | nindent 4 }} spec: {{- if .Values.enterprise.enabled }} replicas: {{ .Values.enterprise.clusterSize }} {{ else }} replicas: 1 {{- end}} selector: matchLabels: {{- include "common.influxdb.selectorLabels" . | nindent 6 }} serviceName: {{ include "common.fullname.influxdb" . }}-meta template: metadata: labels: {{- include "common.influxdb.selectorLabels" . | nindent 8 }} {{- if .Values.podAnnotations }} annotations: {{ toYaml .Values.podAnnotations | indent 8 }} {{- end }} spec: {{- if .Values.schedulerName }} schedulerName: "{{ .Values.schedulerName }}" {{- end }} {{- if .Values.nodeSelector }} nodeSelector: {{ toYaml .Values.nodeSelector | indent 8 }} {{- end -}} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} {{- end }} {{- if .Values.tolerations }} tolerations: {{ toYaml .Values.tolerations | indent 8 }} {{- end }} {{- if .Values.securityContext }} securityContext: {{ toYaml .Values.securityContext | indent 8 }} {{- end }} {{- if .Values.image.pullSecrets }} imagePullSecrets: {{- range .Values.image.pullSecrets }} - name: {{ . }} {{- end}} {{- end }} serviceAccountName: {{ include "common.influxdb.serviceAccountName" . }} containers: - name: {{ include "common.fullname.influxdb" . }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy | quote }} resources: {{ toYaml .Values.resources | indent 10 }} ports: - name: api containerPort: {{ include "common.serviceport.influxdb.http.bind_address" . | default 8086 }} {{- if .Values.config.graphite.enabled }} - name: graphite containerPort: {{ include "common.serviceport.influxdb.graphite.bind_address" . | default 2003 }} {{- end }} {{- if .Values.config.collectd.enabled }} - name: collectd containerPort: {{ include "common.serviceport.influxdb.collectd.bind_address" . | default 25826 }} protocol: UDP {{- end }} {{- if .Values.config.udp.enabled }} - name: udp containerPort: {{ include "common.serviceport.influxdb.udp.bind_address" . | default 8089 }} protocol: UDP {{- end }} {{- if .Values.config.opentsdb.enabled }} - name: opentsdb containerPort: {{ include "common.serviceport.influxdb.opentsdb.bind_address" . | default 4242 }} {{- end }} - name: rpc containerPort: {{ include "common.serviceport.influxdb.rpc.bind_address" . | default 8088 }} {{- if .Values.enterprise.enabled }} - name: meta containerPort: {{ include "common.serviceport.influxdb.meta.bind_address" . | default 8091 }} {{- end }} {{- if .Values.env }} env: {{ toYaml .Values.env | indent 10 }} {{- if .Values.enterprise.enabled }} - name: INFLUXDB_HOSTNAME # Values.env's HOSTNAME isn't fundamentally different from $HOSTNAME, but this way weg get a distinguished name at runtime. value: "$(_HOSTNAME).{{ include "common.fullname.influxdb" . }}" {{- end }} {{- end }} {{- if .Values.envFromSecret }} envFrom: - secretRef: name: {{ .Values.envFromSecret }} {{- end }} livenessProbe: httpGet: path: {{ .Values.livenessProbe.path | default "/ping" }} port: api scheme: {{ .Values.livenessProbe.scheme | default "HTTP" }} initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds | default 30 }} timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds | default 5 }} readinessProbe: httpGet: path: {{ .Values.readinessProbe.path | default "/ping" }} port: api scheme: {{ .Values.readinessProbe.scheme | default "HTTP" }} initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds | default 5 }} timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds | default 1 }} {{- if .Values.startupProbe.enabled }} startupProbe: httpGet: path: {{ .Values.startupProbe.path | default "/ping" }} port: api scheme: {{ .Values.startupProbe.scheme | default "HTTP" }} failureThreshold: {{ .Values.startupProbe.failureThreshold | default 6 }} periodSeconds: {{ .Values.startupProbe.periodSeconds | default 5 }} {{- end }} volumeMounts: - name: {{ include "common.fullname.influxdb" . }}-data mountPath: /var/lib/influxdb - name: config mountPath: /etc/influxdb {{- if .Values.initScripts.enabled }} - name: init mountPath: /docker-entrypoint-initdb.d {{- end }} {{- if .Values.mountPoints }} {{ toYaml .Values.mountPoints | indent 8 }} {{- end }} {{- if .Values.extraContainers }} {{ toYaml .Values.extraContainers | indent 6}} {{- end }} volumes: - name: config configMap: name: {{ include "common.fullname.influxdb" . }} {{- if .Values.initScripts.enabled }} - name: init configMap: name: {{ include "common.fullname.influxdb" . }}-init {{- end }} {{- if (not .Values.persistence.enabled ) }} - name: {{ include "common.fullname.influxdb" . }}-data emptyDir: {} {{- end }} # Cannot use existing claim in enterprise mode {{- if and .Values.persistence.enabled .Values.persistence.existingClaim (not .Values.enterprise.enabled) }} - name: {{ include "common.fullname.influxdb" . }}-data persistentVolumeClaim: claimName: {{ .Values.persistence.existingClaim }} {{- end }} {{- if .Values.volumes }} {{ toYaml .Values.volumes | indent 6 }} {{- end }} # Must use volume claim template in enterprise mode {{- if and .Values.persistence.enabled (or (not .Values.persistence.existingClaim) .Values.enterprise.enabled) }} volumeClaimTemplates: - metadata: name: {{ include "common.fullname.influxdb" . }}-data annotations: {{- range $key, $value := .Values.persistence.annotations }} {{ $key }}: "{{ $value }}" {{- end }} spec: accessModes: - {{ .Values.persistence.accessMode | quote}} resources: requests: storage: {{ .Values.persistence.size | quote }} {{- if .Values.persistence.storageClass }} {{- if (eq "-" .Values.persistence.storageClass) }} storageClassName: "" {{- else }} storageClassName: "{{ .Values.persistence.storageClass }}" {{- end }} {{- end }} {{- end }}