deploy-templates/mailu/templates/dovecot.yaml (219 lines of code) (raw):

# This file is derived from https://github.com/Mailu/Mailu/blob/master/docs/kubernetes/mailu/imap.yaml {{- if .Values.dovecot.enabled }} {{- /* Define persistantVolume claimName */}} {{- $claimName := .Values.persistence.single_pvc | ternary (include "mailu.claimName" .) .Values.dovecot.persistence.claimNameOverride | default (printf "%s-dovecot" (include "mailu.fullname" .)) }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "mailu.fullname" . }}-dovecot spec: selector: matchLabels: app: {{ include "mailu.fullname" . }} component: dovecot replicas: 1 template: metadata: labels: app: {{ include "mailu.fullname" . }} component: dovecot spec: serviceAccount: {{ include "mailu.serviceAccountName" . }} {{- with .Values.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} {{- with .Values.affinity }} affinity: {{- toYaml . | nindent 8 }} {{- end }} {{- with .Values.tolerations }} tolerations: {{- toYaml . | nindent 8 }} {{- end }} containers: - name: admin image: {{ template "imageRegistry" . -}} {{ .Values.dovecot.image.repository }}:{{ default .Values.mailuVersion .Values.dovecot.image.tag }} imagePullPolicy: Always {{- with .Values.dovecot.containerSecurityContext }} securityContext: {{- . | toYaml | nindent 10 }} {{- end }} volumeMounts: - name: data subPath: dovecotdata mountPath: /data - name: data mountPath: /mail subPath: dovecotmail {{- if .Values.dovecot.overrides }} - name: overrides mountPath: /overrides {{- end }} {{- if .Values.timezone }} - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true - name: zoneinfo subPath: {{ .Values.timezone }} mountPath: /etc/localtime readOnly: true {{- end }} env: - name: LOG_LEVEL value: {{ default .Values.logLevel .Values.dovecot.logLevel }} - name: FRONT_ADDRESS value: {{ include "mailu.fullname" . }}-front - name: ADMIN_ADDRESS value: {{ include "mailu.fullname" . }}-admin - name: ANTISPAM_WEBUI_ADDRESS value: {{ include "mailu.fullname" . }}-rspamd:11334 - name: POSTMASTER value: postmaster - name: DOMAIN value: "{{ required "dnsWildcard" .Values.dnsWildcard }}" - name: HOSTNAMES value: "mail.{{ .Values.dnsWildcard }}" - name: RECIPIENT_DELIMITER value: + # TODO: COMPRESSION / COMPRESS_LEVEL -> documentation? # TODO: next entries should be removed when https://github.com/Mailu/Mailu/issues/1112 is fixed - name: REDIS_ADDRESS value: {{ include "mailu.fullname" . }}-redis - name: WEBMAIL value: none - name: SECRET_KEY valueFrom: secretKeyRef: name: mailu-session-encryption-key key: key ports: - name: auth containerPort: 2102 protocol: TCP - name: lmtp containerPort: 2525 protocol: TCP - name: imap containerPort: 143 protocol: TCP - name: pop3 containerPort: 110 protocol: TCP - name: sieve containerPort: 4190 protocol: TCP {{- with .Values.dovecot.resources }} resources: {{- .|toYaml|nindent 10}} {{- end }} {{- if .Values.dovecot.startupProbe}} startupProbe: exec: command: - sh - -c - 'echo QUIT|nc localhost 110|grep "Dovecot ready."' periodSeconds: {{ default 10 .Values.dovecot.startupProbe.periodSeconds }} failureThreshold: {{ default 30 .Values.dovecot.startupProbe.failureThreshold }} timeoutSeconds: {{ default 5 .Values.dovecot.startupProbe.timeoutSeconds }} {{- end }} {{- if .Values.dovecot.livenessProbe}} livenessProbe: exec: command: - sh - -c - 'echo QUIT|nc localhost 110|grep "Dovecot ready."' periodSeconds: {{ default 10 .Values.dovecot.livenessProbe.periodSeconds }} failureThreshold: {{ default 3 .Values.dovecot.livenessProbe.failureThreshold }} timeoutSeconds: {{ default 5 .Values.dovecot.livenessProbe.timeoutSeconds }} {{- end }} {{- if .Values.dovecot.readinessProbe}} readinessProbe: exec: command: - sh - -c - 'echo QUIT|nc localhost 110|grep "Dovecot ready."' periodSeconds: {{ default 10 .Values.dovecot.readinessProbe.periodSeconds }} failureThreshold: {{ default 1 .Values.dovecot.readinessProbe.failureThreshold }} timeoutSeconds: {{ default 5 .Values.dovecot.readinessProbe.timeoutSeconds }} {{- end }} volumes: - name: data persistentVolumeClaim: claimName: {{ $claimName }} {{- if .Values.dovecot.overrides }} - name: overrides configMap: name: {{ include "mailu.fullname" . }}-dovecot-override {{- end }} {{- if .Values.timezone }} - name: zoneinfo hostPath: path: /usr/share/zoneinfo type: Directory {{- end }} strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 {{- if not .Values.persistence.single_pvc }} --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: {{ $claimName }} {{- if .Values.dovecot.persistence.annotations }} annotations: {{ toYaml .Values.dovecot.persistence.annotations | indent 4 }} {{- end }} spec: accessModes: - {{ .Values.dovecot.persistence.accessMode }} resources: requests: storage: {{ .Values.dovecot.persistence.size }} {{- if .Values.dovecot.persistence.storageClass }} storageClassName: {{ .Values.dovecot.persistence.storageClass }} {{- end }} {{- end }} --- apiVersion: v1 kind: Service metadata: name: {{ include "mailu.fullname" . }}-dovecot labels: app: {{ include "mailu.fullname" . }} component: dovecot spec: selector: app: {{ include "mailu.fullname" . }} component: dovecot ports: - name: imap-auth port: 2102 protocol: TCP - name: imap-transport port: 2525 protocol: TCP - name: imap-default port: 143 protocol: TCP - name: pop3 port: 110 protocol: TCP - name: sieve port: 4190 protocol: TCP --- {{- if .Values.dovecot.overrides }} apiVersion: v1 kind: ConfigMap metadata: name: {{ include "mailu.fullname" . }}-dovecot-override {{- with .Values.dovecot.overrides }} data: {{- .|toYaml|nindent 2 }} {{ end }} {{ end }} {{ end }}