# Immich Helm Chart Configuration # Deploy to services namespace with persistent storage # Enable Valkey (Redis replacement) with persistent storage valkey: enabled: true persistence: data: enabled: true type: persistentVolumeClaim size: 1Gi storageClass: "" existingClaim: "immich-valkey-pvc" # Immich-specific configuration immich: persistence: # Main data store for all photos/videos shared between components library: existingClaim: "immich-library-pvc" # Main components configuration (Both old and new style for safety) server: enabled: true resources: requests: cpu: 500m memory: 512Mi limits: memory: 4Gi affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - machine-learning topologyKey: "kubernetes.io/hostname" persistence: ext-albena-rw: enabled: true type: persistentVolumeClaim existingClaim: immich-ext-albena-pvc globalMounts: - path: /external-albena-rw ext-paul-rw: enabled: true type: persistentVolumeClaim existingClaim: immich-ext-paul-pvc globalMounts: - path: /external-paul-rw ext-videos-rw: enabled: true type: persistentVolumeClaim existingClaim: immich-ext-videos-rw-pvc globalMounts: - path: /external-videos-rw ext-videos-ro: enabled: true type: persistentVolumeClaim existingClaim: immich-ext-videos-ro-pvc globalMounts: - path: /external-videos-ro readOnly: true ingress: main: enabled: true annotations: spec.ingressClassName: traefik traefik.ingress.kubernetes.io/router.entrypoints: web # Remove body size limit for file uploads traefik.ingress.kubernetes.io/router.middlewares: services-immich-body-size@kubernetescrd hosts: - host: immich.f3s.buetow.org paths: - path: "/" service: identifier: main port: 2283 machine-learning: enabled: true resources: requests: cpu: 500m memory: 512Mi limits: memory: 4Gi affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - server topologyKey: "kubernetes.io/hostname" - weight: 80 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - immich-postgres topologyKey: "kubernetes.io/hostname" persistence: cache: enabled: true type: persistentVolumeClaim size: 10Gi storageClass: "" existingClaim: "immich-ml-cache-pvc" # Structured controllers key for newer common library versions controllers: server: containers: main: resources: requests: cpu: 500m memory: 512Mi limits: memory: 4Gi pod: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - machine-learning topologyKey: "kubernetes.io/hostname" machine-learning: containers: main: env: MACHINE_LEARNING_MODEL_INTRA_OP_THREADS: "4" MACHINE_LEARNING_MODEL_INTER_OP_THREADS: "1" MACHINE_LEARNING_WORKER_TIMEOUT: "300" resources: requests: cpu: 500m memory: 512Mi limits: memory: 4Gi pod: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - server topologyKey: "kubernetes.io/hostname" - weight: 80 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - immich-postgres topologyKey: "kubernetes.io/hostname" main: containers: main: env: DB_HOSTNAME: immich-postgres DB_DATABASE_NAME: immich DB_USERNAME: immich DB_PASSWORD: valueFrom: secretKeyRef: name: immich-db-secret key: password