--- apiVersion: apps/v1 kind: Deployment metadata: name: "{{ .Values.name }}-app" namespace: {{ .Values.namespace }} spec: replicas: 1 selector: matchLabels: app: "{{ .Values.name }}-app" template: metadata: labels: app: "{{ .Values.name }}-app" spec: {{- if .Values.hwAccl.enabled }} {{- if eq .Values.hwAccl.type "nvidia" }} runtimeClassName: nvidia {{- else if eq .Values.hwAccl.type "intel" }} supplementalGroups: {{ .Values.securityContext.supplementalGroups | toYaml | nindent 8 }} {{- end }} affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: {{ .Values.nodeAffinity.key }} operator: In values: - "{{ .Values.nodeAffinity.value }}" {{- end }} initContainers: - name: wait-for-redis image: busybox command: - sh - -c - | until nc -z -v -w30 "{{ .Values.name }}-redis-service" 6379; do echo "Waiting for redis database to be ready..." sleep 2 done - name: wait-for-psql image: busybox command: - sh - -c - | until nc -z -v -w30 "{{ .Values.name }}-psql-service" 5432; do echo "Waiting for psql database to be ready" sleep 2 done containers: - name: "{{ .Values.name }}-server" image: "{{ .Values.image.app.repository }}:{{ .Values.image.app.tag }}" env: - name: TZ value: "{{ .Values.env.TZ }}" - name: REDIS_HOSTNAME value: "{{ .Values.name }}-redis-service" - name: DB_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.secret.name }} key: {{ .Values.secret.dbPasswordKey }} - name: DB_USERNAME value: "{{ .Values.env.DB_USERNAME }}" - name: DB_DATABASE_NAME value: "{{ .Values.env.DB_DATABASE_NAME }}" - name: DB_HOSTNAME value: "{{ .Values.name }}-psql-service" volumeMounts: - mountPath: /usr/src/app/upload name: pictures - name: immich-machine-learning {{- if .Values.hwAccl.enabled }} {{- if eq .Values.hwAccl.type "nvidia" }} image: "{{ .Values.image.ml.repository }}:{{ .Values.image.ml.tag }}-cuda" {{- else if eq .Values.hwAccl.type "intel" }} image: "{{ .Values.image.ml.repository }}:{{ .Values.image.ml.tag }}-openvino" {{- end }} {{- else }} image: "{{ .Values.image.ml.repository }}:{{ .Values.image.ml.tag }}" {{- end }} env: - name: REDIS_HOSTNAME value: "{{ .Values.name }}-redis-service" {{- if .Values.hwAccl.enabled }} {{- if eq .Values.hwAccl.type "nvidia" }} - name: NVIDIA_VISIBLE_DEVICES value: "all" {{- end }} {{- end }} - name: MACHINE_LEARNING_DEVICE_IDS value: "0" volumeMounts: - name: model-cache mountPath: /cache {{- if .Values.hwAccl.enabled }} {{- if eq .Values.hwAccl.type "intel" }} - name: intel mountPath: /dev/dri/ {{- end }} {{- end }} volumes: {{- if .Values.persistence.pictures.enabled }} {{- if eq .Values.persistence.pictures.type "nfs" }} - name: pictures nfs: server: {{ .Values.persistence.pictures.nfs.server }} path: {{ .Values.persistence.pictures.nfs.path }} {{- else if eq .Values.persistence.pictures.type "smb" }} - name: pictures persistentVolumeClaim: claimName: {{ .Values.name }}-pictures-pvc {{- else if .Values.persistence.pictures.existingClaim }} - name: pictures persistentVolumeClaim: claimName: {{ .Values.persistence.pictures.claimName }} {{- end }} {{- else }} - name: pictures emptyDir: {} {{- end }} {{- if .Values.persistence.modelCache.enabled }} {{- if .Values.persistence.modelCache.existingClaim }} - name: model-cache persistentVolumeClaim: claimName: {{ .Values.persistence.modelCache.claimName }} {{- else }} - name: model-cache persistentVolumeClaim: claimName: "longhorn-{{ .Values.name }}-cache" {{- end }} {{- else }} - name: model-cache emptyDir: {} {{- end }}