--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: immich-postgres-pvc-longhorn-2 spec: storageClassName: longhorn #volumeName: immich-postgres-pv accessModes: - ReadWriteOnce resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: immich-postgres spec: selector: app: immich-postgres ports: - protocol: TCP port: 5432 targetPort: 5432 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: immich-postgres spec: serviceName: immich-postgres replicas: 1 selector: matchLabels: app: immich-postgres template: metadata: labels: app: immich-postgres spec: #nodeSelector: # kubernetes.io/hostname: extranuc tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 600 containers: - name: postgres image: ghcr.io/tensorchord/pgvecto-rs:pg15-v0.3.0 env: - name: POSTGRES_DB value: "(CENSORED)" - name: POSTGRES_USER value: "(CENSORED)" - name: POSTGRES_PASSWORD value: "(CENSORED)" - name: PGDATA value: /var/lib/postgresql/data # Add this to handle existing data directory - name: POSTGRES_INITDB_ARGS value: "--auth-host=md5" volumeMounts: - name: postgres-storage mountPath: /var/lib/postgresql/data # Add an init container to handle the lost+found issue initContainers: - name: init-postgres image: busybox:1.35 command: - sh - -c - | # Remove lost+found if it exists and is empty, or move it aside if [ -d /var/lib/postgresql/data/lost+found ]; then echo "Found lost+found directory, handling it..." if [ -z "$(ls -A /var/lib/postgresql/data/lost+found)" ]; then echo "lost+found is empty, removing it" rmdir /var/lib/postgresql/data/lost+found else echo "lost+found contains files, moving it aside" mv /var/lib/postgresql/data/lost+found /var/lib/postgresql/data/lost+found.backup fi fi # Ensure proper permissions for postgres user chown -R 999:999 /var/lib/postgresql/data chmod 700 /var/lib/postgresql/data volumeMounts: - name: postgres-storage mountPath: /var/lib/postgresql/data securityContext: runAsUser: 0 # Run as root to handle permissions volumes: - name: postgres-storage persistentVolumeClaim: claimName: immich-postgres-pvc-longhorn-2 #claimName: immich-pvc-longhorn --- #apiVersion: apps/v1 #kind: StatefulSet #metadata: # name: immich-postgres #spec: # serviceName: immich-postgres # replicas: 1 # selector: # matchLabels: # app: immich-postgres # template: # metadata: # labels: # app: immich-postgres # spec: # #nodeSelector: # # kubernetes.io/hostname: extranuc # tolerations: # - key: "node.kubernetes.io/unreachable" # operator: "Exists" # effect: "NoExecute" # tolerationSeconds: 600 # containers: # - name: postgres # image: ghcr.io/tensorchord/pgvecto-rs:pg15-v0.3.0 # env: # - name: POSTGRES_DB # value: "immich" # - name: POSTGRES_USER # value: "immich" # - name: POSTGRES_PASSWORD # value: "immichpassword" # - name: PGDATA # value: /var/lib/postgresql/data/pgdata # volumeMounts: # - name: postgres-storage # #mountPath: /var/lib/postgresql/data ## mountPath: /var/lib/postgresql/data/pgdata # volumes: # - name: postgres-storage # persistentVolumeClaim: # claimName: immich-postgres-pvc-longhorn #--- #apiVersion: v1 #kind: PersistentVolume #metadata: # name: immich-upload-pv #spec: # capacity: # storage: 10Gi # accessModes: # - ReadWriteOnce # hostPath: # path: /home/spiderunderurbed/k8s/immich-upload --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: immich-upload-pvc-longhorn-2 spec: storageClassName: longhorn #volumeName: immich-upload-pv accessModes: - ReadWriteOnce resources: requests: storage: 50Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: immich-machine-learning annotations: keel.sh/policy: force keel.sh/trigger: poll keel.sh/pollSchedule: "@every 5m" spec: replicas: 1 selector: matchLabels: app: immich-machine-learning template: metadata: labels: app: immich-machine-learning spec: #nodeSelector: # kubernetes.io/hostname: extranuc containers: - name: immich-machine-learning image: ghcr.io/immich-app/immich-machine-learning:release env: - name: TZ value: "UTC" - name: MODEL_CACHE_PATH value: "/cache" volumeMounts: - name: model-cache mountPath: /cache volumes: - name: model-cache emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: immich-machine-learning spec: selector: app: immich-machine-learning ports: - protocol: TCP port: 3003 targetPort: 3003 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: immich-server annotations: keel.sh/policy: force keel.sh/trigger: poll keel.sh/pollSchedule: "@every 5m" spec: replicas: 1 selector: matchLabels: app: immich-server template: metadata: labels: app: immich-server spec: #nodeSelector: # kubernetes.io/hostname: extranuc tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 600 containers: - name: immich-server #image: ghcr.io/immich-app/immich-server:latest image: ghcr.io/immich-app/immich-server:v2.3.0 env: - name: REDIS_HOSTNAME value: "immich-redis" - name: REDIS_PORT value: "6379" - name: DB_HOSTNAME value: "immich-postgres" - name: DB_PORT value: "5432" - name: DB_DATABASE_NAME value: "(CENSORED)" - name: DB_USERNAME value: "(CENSORED)" - name: DB_PASSWORD value: "(CENSORED)" - name: IMMICH_MACHINE_LEARNING_URL value: "http://immich-machine-learning:3003" volumeMounts: - name: upload-storage mountPath: /usr/src/app/upload volumes: - name: upload-storage persistentVolumeClaim: claimName: immich-upload-pvc-longhorn-2 --- apiVersion: v1 kind: Service metadata: name: immich-server spec: selector: app: immich-server ports: - protocol: TCP port: 2283 targetPort: 2283 type: ClusterIP --- apiVersion: v1 kind: Service metadata: name: immich-redis spec: selector: app: immich-redis ports: - protocol: TCP port: 6379 targetPort: 6379 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: immich-redis spec: replicas: 1 serviceName: immich-redis selector: matchLabels: app: immich-redis template: metadata: labels: app: immich-redis spec: #nodeSelector: # kubernetes.io/hostname: extranuc containers: - name: redis image: redis:6.2-alpine args: ["redis-server", "--appendonly", "yes"] ports: - containerPort: 6379 livenessProbe: exec: command: - redis-cli - ping initialDelaySeconds: 5 periodSeconds: 10