From d22bede0cf01deaaa1831b8889e3470e4348302c Mon Sep 17 00:00:00 2001 From: pierre Date: Sat, 3 Aug 2024 14:10:45 +0100 Subject: [PATCH] :work: Initial commit --- immich.yaml | 934 +++++++++++++++++++++++++++++++++++++++++++++++++ pvc.claim.yaml | 18 + values.yaml | 101 ++++++ 3 files changed, 1053 insertions(+) create mode 100644 immich.yaml create mode 100644 pvc.claim.yaml create mode 100644 values.yaml diff --git a/immich.yaml b/immich.yaml new file mode 100644 index 0000000..fc96a26 --- /dev/null +++ b/immich.yaml @@ -0,0 +1,934 @@ +--- +# Source: immich/charts/redis/templates/networkpolicy.yaml +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: immich-redis + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +spec: + podSelector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + policyTypes: + - Ingress + - Egress + egress: + - {} + ingress: + # Allow inbound connections + - ports: + - port: 6379 +--- +# Source: immich/charts/redis/templates/master/pdb.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: immich-redis-master + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 + app.kubernetes.io/component: master +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + app.kubernetes.io/component: master +--- +# Source: immich/charts/redis/templates/master/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: false +metadata: + name: immich-redis-master + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +--- +# Source: immich/charts/postgresql/templates/secrets.yaml +apiVersion: v1 +kind: Secret +metadata: + name: immich-postgresql + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 +type: Opaque +data: + postgres-password: "M1Z2UzZlZlpGWQ==" + password: "aW1taWNo" + # We don't auto-generate LDAP password when it's not provided as we do for other passwords +--- +# Source: immich/charts/postgresql/templates/primary/initialization-configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: immich-postgresql-init-scripts + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 +data: + create-extensions.sql: | + CREATE EXTENSION cube; + CREATE EXTENSION earthdistance; + CREATE EXTENSION vectors; +--- +# Source: immich/charts/redis/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: immich-redis-configuration + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +data: + redis.conf: |- + # User-supplied common configuration: + # Enable AOF https://redis.io/topics/persistence#append-only-file + appendonly yes + # Disable RDB persistence, AOF persistence already enabled. + save "" + # End of common configuration + master.conf: |- + dir /data + # User-supplied master configuration: + rename-command FLUSHDB "" + rename-command FLUSHALL "" + # End of master configuration + replica.conf: |- + dir /data + # User-supplied replica configuration: + rename-command FLUSHDB "" + rename-command FLUSHALL "" + # End of replica configuration +--- +# Source: immich/charts/redis/templates/health-configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: immich-redis-health + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +data: + ping_readiness_local.sh: |- + #!/bin/bash + + [[ -f $REDIS_PASSWORD_FILE ]] && export REDIS_PASSWORD="$(< "${REDIS_PASSWORD_FILE}")" + [[ -n "$REDIS_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_PASSWORD" + response=$( + timeout -s 15 $1 \ + redis-cli \ + -h localhost \ + -p $REDIS_PORT \ + ping + ) + if [ "$?" -eq "124" ]; then + echo "Timed out" + exit 1 + fi + if [ "$response" != "PONG" ]; then + echo "$response" + exit 1 + fi + ping_liveness_local.sh: |- + #!/bin/bash + + [[ -f $REDIS_PASSWORD_FILE ]] && export REDIS_PASSWORD="$(< "${REDIS_PASSWORD_FILE}")" + [[ -n "$REDIS_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_PASSWORD" + response=$( + timeout -s 15 $1 \ + redis-cli \ + -h localhost \ + -p $REDIS_PORT \ + ping + ) + if [ "$?" -eq "124" ]; then + echo "Timed out" + exit 1 + fi + responseFirstWord=$(echo $response | head -n1 | awk '{print $1;}') + if [ "$response" != "PONG" ] && [ "$responseFirstWord" != "LOADING" ] && [ "$responseFirstWord" != "MASTERDOWN" ]; then + echo "$response" + exit 1 + fi + ping_readiness_master.sh: |- + #!/bin/bash + + [[ -f $REDIS_MASTER_PASSWORD_FILE ]] && export REDIS_MASTER_PASSWORD="$(< "${REDIS_MASTER_PASSWORD_FILE}")" + [[ -n "$REDIS_MASTER_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_MASTER_PASSWORD" + response=$( + timeout -s 15 $1 \ + redis-cli \ + -h $REDIS_MASTER_HOST \ + -p $REDIS_MASTER_PORT_NUMBER \ + ping + ) + if [ "$?" -eq "124" ]; then + echo "Timed out" + exit 1 + fi + if [ "$response" != "PONG" ]; then + echo "$response" + exit 1 + fi + ping_liveness_master.sh: |- + #!/bin/bash + + [[ -f $REDIS_MASTER_PASSWORD_FILE ]] && export REDIS_MASTER_PASSWORD="$(< "${REDIS_MASTER_PASSWORD_FILE}")" + [[ -n "$REDIS_MASTER_PASSWORD" ]] && export REDISCLI_AUTH="$REDIS_MASTER_PASSWORD" + response=$( + timeout -s 15 $1 \ + redis-cli \ + -h $REDIS_MASTER_HOST \ + -p $REDIS_MASTER_PORT_NUMBER \ + ping + ) + if [ "$?" -eq "124" ]; then + echo "Timed out" + exit 1 + fi + responseFirstWord=$(echo $response | head -n1 | awk '{print $1;}') + if [ "$response" != "PONG" ] && [ "$responseFirstWord" != "LOADING" ]; then + echo "$response" + exit 1 + fi + ping_readiness_local_and_master.sh: |- + script_dir="$(dirname "$0")" + exit_status=0 + "$script_dir/ping_readiness_local.sh" $1 || exit_status=$? + "$script_dir/ping_readiness_master.sh" $1 || exit_status=$? + exit $exit_status + ping_liveness_local_and_master.sh: |- + script_dir="$(dirname "$0")" + exit_status=0 + "$script_dir/ping_liveness_local.sh" $1 || exit_status=$? + "$script_dir/ping_liveness_master.sh" $1 || exit_status=$? + exit $exit_status +--- +# Source: immich/charts/redis/templates/scripts-configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: immich-redis-scripts + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +data: + start-master.sh: | + #!/bin/bash + + [[ -f $REDIS_PASSWORD_FILE ]] && export REDIS_PASSWORD="$(< "${REDIS_PASSWORD_FILE}")" + if [[ -f /opt/bitnami/redis/mounted-etc/master.conf ]];then + cp /opt/bitnami/redis/mounted-etc/master.conf /opt/bitnami/redis/etc/master.conf + fi + if [[ -f /opt/bitnami/redis/mounted-etc/redis.conf ]];then + cp /opt/bitnami/redis/mounted-etc/redis.conf /opt/bitnami/redis/etc/redis.conf + fi + ARGS=("--port" "${REDIS_PORT}") + ARGS+=("--protected-mode" "no") + ARGS+=("--include" "/opt/bitnami/redis/etc/redis.conf") + ARGS+=("--include" "/opt/bitnami/redis/etc/master.conf") + exec redis-server "${ARGS[@]}" +--- +# Source: immich/charts/postgresql/templates/primary/svc-headless.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-postgresql-hl + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 + app.kubernetes.io/component: primary + annotations: + # Use this annotation in addition to the actual publishNotReadyAddresses + # field below because the annotation will stop being respected soon but the + # field is broken in some versions of Kubernetes: + # https://github.com/kubernetes/kubernetes/issues/58662 + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + type: ClusterIP + clusterIP: None + # We want all pods in the StatefulSet to have their addresses published for + # the sake of the other Postgresql pods even before they're ready, since they + # have to be able to talk to each other in order to become ready. + publishNotReadyAddresses: true + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: postgresql + app.kubernetes.io/component: primary +--- +# Source: immich/charts/postgresql/templates/primary/svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-postgresql + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 + app.kubernetes.io/component: primary +spec: + type: ClusterIP + sessionAffinity: None + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + nodePort: null + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: postgresql + app.kubernetes.io/component: primary +--- +# Source: immich/charts/redis/templates/headless-svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-redis-headless + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 +spec: + type: ClusterIP + clusterIP: None + ports: + - name: tcp-redis + port: 6379 + targetPort: redis + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis +--- +# Source: immich/charts/redis/templates/master/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-redis-master + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 + app.kubernetes.io/component: master +spec: + type: ClusterIP + internalTrafficPolicy: Cluster + sessionAffinity: None + ports: + - name: tcp-redis + port: 6379 + targetPort: redis + nodePort: null + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + app.kubernetes.io/component: master +--- +# Source: immich/templates/machine-learning.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-machine-learning + labels: + app.kubernetes.io/service: immich-machine-learning + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: machine-learning + app.kubernetes.io/version: v1.106.1 + helm.sh/chart: immich-0.7.1 + annotations: +spec: + type: ClusterIP + ports: + - port: 3003 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: machine-learning +--- +# Source: immich/templates/server.yaml +apiVersion: v1 +kind: Service +metadata: + name: immich-server + labels: + app.kubernetes.io/service: immich-server + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: server + app.kubernetes.io/version: v1.106.1 + helm.sh/chart: immich-0.7.1 + annotations: +spec: + type: ClusterIP + ports: + - port: 3001 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: server +--- +# Source: immich/templates/machine-learning.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: immich-machine-learning + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: machine-learning + app.kubernetes.io/version: v1.106.1 + helm.sh/chart: immich-0.7.1 +spec: + revisionHistoryLimit: 3 + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: machine-learning + app.kubernetes.io/instance: immich + template: + metadata: + labels: + app.kubernetes.io/name: machine-learning + app.kubernetes.io/instance: immich + spec: + + serviceAccountName: default + automountServiceAccountToken: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + containers: + - name: immich-machine-learning + image: ghcr.io/immich-app/immich-machine-learning:v1.106.1 + imagePullPolicy: IfNotPresent + env: + - name: DB_DATABASE_NAME + value: immich + - name: DB_HOSTNAME + value: immich-postgresql + - name: DB_PASSWORD + value: immich + - name: DB_USERNAME + value: immich + - name: IMMICH_MACHINE_LEARNING_URL + value: http://immich-machine-learning:3003 + - name: REDIS_HOSTNAME + value: immich-redis-master + - name: TRANSFORMERS_CACHE + value: /cache + ports: + - name: http + containerPort: 3003 + protocol: TCP + volumeMounts: + - name: cache + mountPath: /cache + livenessProbe: + failureThreshold: 3 + httpGet: + path: /ping + port: http + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /ping + port: http + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 1 + volumes: + - name: cache + emptyDir: + {} +--- +# Source: immich/templates/server.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: immich-server + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: server + app.kubernetes.io/version: v1.106.1 + helm.sh/chart: immich-0.7.1 +spec: + revisionHistoryLimit: 3 + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: server + app.kubernetes.io/instance: immich + template: + metadata: + labels: + app.kubernetes.io/name: server + app.kubernetes.io/instance: immich + spec: + + serviceAccountName: default + automountServiceAccountToken: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + containers: + - name: immich-server + image: ghcr.io/immich-app/immich-server:v1.106.1 + imagePullPolicy: IfNotPresent + env: + - name: DB_DATABASE_NAME + value: immich + - name: DB_HOSTNAME + value: immich-postgresql + - name: DB_PASSWORD + value: immich + - name: DB_USERNAME + value: immich + - name: IMMICH_MACHINE_LEARNING_URL + value: http://immich-machine-learning:3003 + - name: REDIS_HOSTNAME + value: immich-redis-master + ports: + - name: http + containerPort: 3001 + protocol: TCP + volumeMounts: + - name: library + mountPath: /usr/src/app/upload +# livenessProbe: +# failureThreshold: 3 +# httpGet: +# path: /api/server-info/ping +# port: http +# initialDelaySeconds: 0 +# periodSeconds: 10 +# timeoutSeconds: 1 +# readinessProbe: +# failureThreshold: 3 +# httpGet: +# path: /api/server-info/ping +# port: http +# initialDelaySeconds: 0 +# periodSeconds: 10 +# timeoutSeconds: 1 + volumes: + - name: library + persistentVolumeClaim: + claimName: immich-storage +--- +# Source: immich/charts/postgresql/templates/primary/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: immich-postgresql + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 + app.kubernetes.io/component: primary +spec: + replicas: 1 + serviceName: immich-postgresql-hl + updateStrategy: + rollingUpdate: {} + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: postgresql + app.kubernetes.io/component: primary + template: + metadata: + name: immich-postgresql + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + app.kubernetes.io/version: 16.1.0 + helm.sh/chart: postgresql-13.2.24 + app.kubernetes.io/component: primary + spec: + serviceAccountName: default + + affinity: + podAffinity: + + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: postgresql + app.kubernetes.io/component: primary + topologyKey: kubernetes.io/hostname + weight: 1 + nodeAffinity: + + securityContext: + fsGroup: 1001 + hostNetwork: false + hostIPC: false + containers: + - name: postgresql + image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0 + imagePullPolicy: "IfNotPresent" + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + runAsUser: 1001 + seccompProfile: + type: RuntimeDefault + env: + - name: BITNAMI_DEBUG + value: "false" + - name: POSTGRESQL_PORT_NUMBER + value: "5432" + - name: POSTGRESQL_VOLUME_DIR + value: "/bitnami/postgresql" + - name: PGDATA + value: "/bitnami/postgresql/data" + # Authentication + - name: POSTGRES_USER + value: "immich" + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: immich-postgresql + key: password + - name: POSTGRES_POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: immich-postgresql + key: postgres-password + - name: POSTGRES_DATABASE + value: "immich" + # Replication + # Initdb + # Standby + # LDAP + - name: POSTGRESQL_ENABLE_LDAP + value: "no" + # TLS + - name: POSTGRESQL_ENABLE_TLS + value: "no" + # Audit + - name: POSTGRESQL_LOG_HOSTNAME + value: "false" + - name: POSTGRESQL_LOG_CONNECTIONS + value: "false" + - name: POSTGRESQL_LOG_DISCONNECTIONS + value: "false" + - name: POSTGRESQL_PGAUDIT_LOG_CATALOG + value: "off" + # Others + - name: POSTGRESQL_CLIENT_MIN_MESSAGES + value: "error" + - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES + value: "pgaudit" + ports: + - name: tcp-postgresql + containerPort: 5432 + livenessProbe: + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "immich" -d "dbname=immich" -h 127.0.0.1 -p 5432 + readinessProbe: + failureThreshold: 6 + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + exec: + command: + - /bin/sh + - -c + - -e + - | + exec pg_isready -U "immich" -d "dbname=immich" -h 127.0.0.1 -p 5432 + resources: + limits: {} + requests: + cpu: 250m + memory: 256Mi + volumeMounts: + - name: custom-init-scripts + mountPath: /docker-entrypoint-initdb.d/ + - name: dshm + mountPath: /dev/shm + - name: data + mountPath: /bitnami/postgresql + volumes: + - name: custom-init-scripts + configMap: + name: immich-postgresql-init-scripts + - name: dshm + emptyDir: + medium: Memory + volumeClaimTemplates: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: data + spec: + accessModes: + - "ReadWriteOnce" + storageClassName: nfs-storage-intelligent + resources: + requests: + storage: "8Gi" +--- +# Source: immich/charts/redis/templates/master/application.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: immich-redis-master + namespace: "immich" + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 + app.kubernetes.io/component: master +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + app.kubernetes.io/component: master + serviceName: immich-redis-headless + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: redis + app.kubernetes.io/version: 7.2.5 + helm.sh/chart: redis-19.5.3 + app.kubernetes.io/component: master + annotations: + checksum/configmap: 86bcc953bb473748a3d3dc60b7c11f34e60c93519234d4c37f42e22ada559d47 + checksum/health: aff24913d801436ea469d8d374b2ddb3ec4c43ee7ab24663d5f8ff1a1b6991a9 + checksum/scripts: 43cdf68c28f3abe25ce017a82f74dbf2437d1900fd69df51a55a3edf6193d141 + checksum/secret: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + spec: + + securityContext: + fsGroup: 1001 + fsGroupChangePolicy: Always + supplementalGroups: [] + sysctls: [] + serviceAccountName: immich-redis-master + automountServiceAccountToken: false + affinity: + podAffinity: + + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + app.kubernetes.io/component: master + topologyKey: kubernetes.io/hostname + weight: 1 + nodeAffinity: + + enableServiceLinks: true + terminationGracePeriodSeconds: 30 + containers: + - name: redis + image: docker.io/bitnami/redis:7.2.5-debian-12-r0 + imagePullPolicy: "IfNotPresent" + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + seLinuxOptions: {} + seccompProfile: + type: RuntimeDefault + command: + - /bin/bash + args: + - -c + - /opt/bitnami/scripts/start-scripts/start-master.sh + env: + - name: BITNAMI_DEBUG + value: "false" + - name: REDIS_REPLICATION_MODE + value: master + - name: ALLOW_EMPTY_PASSWORD + value: "yes" + - name: REDIS_TLS_ENABLED + value: "no" + - name: REDIS_PORT + value: "6379" + ports: + - name: redis + containerPort: 6379 + livenessProbe: + initialDelaySeconds: 20 + periodSeconds: 5 + # One second longer than command timeout should prevent generation of zombie processes. + timeoutSeconds: 6 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - sh + - -c + - /health/ping_liveness_local.sh 5 + readinessProbe: + initialDelaySeconds: 20 + periodSeconds: 5 + timeoutSeconds: 2 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - sh + - -c + - /health/ping_readiness_local.sh 1 + resources: + limits: + cpu: 150m + ephemeral-storage: 1024Mi + memory: 192Mi + requests: + cpu: 100m + ephemeral-storage: 50Mi + memory: 128Mi + volumeMounts: + - name: start-scripts + mountPath: /opt/bitnami/scripts/start-scripts + - name: health + mountPath: /health + - name: redis-data + mountPath: /data + - name: config + mountPath: /opt/bitnami/redis/mounted-etc + - name: empty-dir + mountPath: /opt/bitnami/redis/etc/ + subPath: app-conf-dir + - name: empty-dir + mountPath: /tmp + subPath: tmp-dir + volumes: + - name: start-scripts + configMap: + name: immich-redis-scripts + defaultMode: 0755 + - name: health + configMap: + name: immich-redis-health + defaultMode: 0755 + - name: config + configMap: + name: immich-redis-configuration + - name: empty-dir + emptyDir: {} + volumeClaimTemplates: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: redis-data + labels: + app.kubernetes.io/instance: immich + app.kubernetes.io/name: redis + app.kubernetes.io/component: master + spec: + accessModes: + - "ReadWriteOnce" + storageClassName: nfs-storage-intelligent + resources: + requests: + storage: "8Gi" diff --git a/pvc.claim.yaml b/pvc.claim.yaml new file mode 100644 index 0000000..81eb4a9 --- /dev/null +++ b/pvc.claim.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: immich +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: immich-storage + namespace: immich +spec: + storageClassName: nfs-storage-intelligent + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi + diff --git a/values.yaml b/values.yaml new file mode 100644 index 0000000..3203abe --- /dev/null +++ b/values.yaml @@ -0,0 +1,101 @@ +## This chart relies on the common library chart from bjw-s +## You can find it at https://github.com/bjw-s/helm-charts/tree/main/charts/library/common +## Refer there for more detail about the supported values + +# These entries are shared between all the Immich components + +env: + REDIS_HOSTNAME: '{{ printf "%s-redis-master" .Release.Name }}' + DB_HOSTNAME: "{{ .Release.Name }}-postgresql" + DB_USERNAME: "{{ .Values.postgresql.global.postgresql.auth.username }}" + DB_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}" + # -- You should provide your own secret outside of this helm-chart and use `postgresql.global.postgresql.auth.existingSecret` to provide credentials to the postgresql instance + DB_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}" + IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}' + +image: + tag: v1.106.1 + +immich: + metrics: + # Enabling this will create the service monitors needed to monitor immich with the prometheus operator + enabled: false + persistence: + # Main data store for all photos shared between different components. + library: + # Automatically creating the library volume is not supported by this chart + # You have to specify an existing PVC to use + existingClaim: + immich-storage + # configuration is immich-config.json converted to yaml + # ref: https://immich.app/docs/install/config-file/ + # + configuration: {} + # trash: + # enabled: false + # days: 30 + # storageTemplate: + # enabled: true + # template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}" + +# Dependencies + +postgresql: + enabled: true + image: + repository: tensorchord/pgvecto-rs + tag: pg14-v0.2.0 + global: + postgresql: + auth: + username: immich + database: immich + password: immich + primary: + initdb: + scripts: + create-extensions.sql: | + CREATE EXTENSION cube; + CREATE EXTENSION earthdistance; + CREATE EXTENSION vectors; + +redis: + enabled: true + architecture: standalone + auth: + enabled: false + +# Immich components + +server: + enabled: true + image: + repository: ghcr.io/immich-app/immich-server + pullPolicy: IfNotPresent + ingress: + main: + enabled: false + annotations: + # proxy-body-size is set to 0 to remove the body limit on file uploads + nginx.ingress.kubernetes.io/proxy-body-size: "0" + hosts: + - host: immich.local + paths: + - path: "/" + tls: [] + +machine-learning: + enabled: true + image: + repository: ghcr.io/immich-app/immich-machine-learning + pullPolicy: IfNotPresent + env: + TRANSFORMERS_CACHE: /cache + persistence: + cache: + enabled: true + size: 10Gi + # Optional: Set this to pvc to avoid downloading the ML models every start. + type: emptyDir + accessMode: ReadWriteMany + # storageClass: your-class