apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ template "influxdb.fullname" . }} labels: {{- include "influxdb.labels" . | nindent 4 }} spec: replicas: 1 selector: matchLabels: {{- include "influxdb.selectorLabels" . | nindent 6 }} serviceName: "{{ include "influxdb.fullname" . }}" template: metadata: labels: {{- include "influxdb.selectorLabels" . | nindent 8 }} {{- if .Values.podLabels }} {{ toYaml .Values.podLabels | indent 8 }} {{- end }} {{- if .Values.podAnnotations }} annotations: {{ toYaml .Values.podAnnotations | indent 8 }} {{- end }} spec: volumes: - name: data {{- if .Values.persistence.enabled }} {{- if not (empty .Values.persistence.name) }} persistentVolumeClaim: claimName: {{ .Values.persistence.name }} {{- else }} persistentVolumeClaim: claimName: {{ template "influxdb.fullname" . }} {{- end }} {{- else }} emptyDir: {} {{- end }} {{- if .Values.initScripts.enabled }} - name: init configMap: name: {{ include "influxdb.fullname" . }}-init defaultMode: 0744 {{- end }} {{- if .Values.volumes }} {{- toYaml .Values.volumes | nindent 8 }} {{- end }} serviceAccountName: {{ include "influxdb.serviceAccountName" . }} containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: {{ .Values.service.portName }} containerPort: 8086 protocol: TCP env: # Automated setup will not run if an existing boltdb file is found at the configured path. # This behavior allows for the InfluxDB container to reboot post-setup without encountering "DB is already set up" errors. - name: DOCKER_INFLUXDB_INIT_MODE value: setup # The username to set for the system's initial super-user (Required). - name: DOCKER_INFLUXDB_INIT_USERNAME value: {{ .Values.adminUser.user }} # The password to set for the system's inital super-user (Required). - name: DOCKER_INFLUXDB_INIT_PASSWORD valueFrom: secretKeyRef: {{- if .Values.adminUser.existingSecret }} name: {{ .Values.adminUser.existingSecret -}} {{ else }} name: {{ template "influxdb.fullname" . }}-auth {{- end }} key: admin-password # The name to set for the system's initial organization (Required). - name: DOCKER_INFLUXDB_INIT_ORG value: {{ .Values.adminUser.organization }} # The name to set for the system's initial bucket (Required). - name: DOCKER_INFLUXDB_INIT_BUCKET value: {{ .Values.adminUser.bucket }} # The duration the system's initial bucket should retain data. If not set, the initial bucket will retain data forever. - name: DOCKER_INFLUXDB_INIT_RETENTION value: {{ .Values.adminUser.retention_policy }} # The authentication token to associate with the system's initial super-user. If not set, a token will be auto-generated by the system. - name: DOCKER_INFLUXDB_INIT_ADMIN_TOKEN valueFrom: secretKeyRef: {{- if .Values.adminUser.existingSecret }} name: {{ .Values.adminUser.existingSecret -}} {{ else }} name: {{ template "influxdb.fullname" . }}-auth {{- end }} key: admin-token # Path to the BoltDB database. - name: INFLUXD_BOLT_PATH value: {{ .Values.persistence.mountPath }}/influxd.bolt # Path to persistent storage engine files where InfluxDB stores all Time-Structure Merge Tree (TSM) data on disk. - name: INFLUXD_ENGINE_PATH value: {{ .Values.persistence.mountPath }} {{- with .Values.env }} # Extra environment variables from .Values.env {{- toYaml . | nindent 12 }} {{- end }} {{- if .Values.securityContext }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} {{- end }} livenessProbe: httpGet: path: {{ .Values.livenessProbe.path | default "/health" }} port: http scheme: {{ .Values.livenessProbe.scheme | default "HTTP" }} initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds | default 0 }} periodSeconds: {{ .Values.livenessProbe.periodSeconds | default 10 }} timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds | default 1 }} failureThreshold: {{ .Values.livenessProbe.failureThreshold | default 3 }} readinessProbe: httpGet: path: {{ .Values.readinessProbe.path | default "/health" }} port: http scheme: {{ .Values.readinessProbe.scheme | default "HTTP" }} initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds | default 0 }} periodSeconds: {{ .Values.readinessProbe.periodSeconds | default 10 }} timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds | default 1 }} successThreshold: {{ .Values.readinessProbe.successThreshold | default 1 }} failureThreshold: {{ .Values.readinessProbe.failureThreshold | default 3 }} {{- if .Values.startupProbe.enabled }} startupProbe: httpGet: path: {{ .Values.startupProbe.path | default "/health" }} port: http scheme: {{ .Values.startupProbe.scheme | default "HTTP" }} initialDelaySeconds: {{ .Values.startupProbe.initialDelaySeconds | default 30 }} periodSeconds: {{ .Values.startupProbe.periodSeconds | default 5 }} timeoutSeconds: {{ .Values.startupProbe.timeoutSeconds | default 1 }} failureThreshold: {{ .Values.startupProbe.failureThreshold | default 6 }} {{- end }} volumeMounts: - name: data mountPath: {{ .Values.persistence.mountPath }} subPath: {{ .Values.persistence.subPath }} {{- if .Values.initScripts.enabled }} - name: init mountPath: /docker-entrypoint-initdb.d {{- end }} {{- if .Values.mountPoints }} {{- toYaml .Values.mountPoints | nindent 10 }} {{- end }} resources: {{ .Values.resources | toYaml | nindent 12 | trim }} {{- if .Values.securityContext.runAsGroup }} securityContext: fsGroup: {{ .Values.securityContext.runAsGroup }} {{- end }} {{- with .Values.nodeSelector }} nodeSelector: {{ toYaml . | nindent 8 | trim }} {{- end }} {{- with .Values.affinity }} affinity: {{ toYaml . | nindent 8 | trim }} {{- end }} {{- with .Values.tolerations }} tolerations: {{ toYaml . | nindent 8 | trim }} {{- end }}