Aller au contenu principal

Immich sur GKE Autopilot

Immich sur GKE Autopilot

Immich est une plateforme open source auto-hébergée de gestion de photos et de vidéos, sous licence AGPL-3.0 — une alternative à Google Photos avec sauvegarde automatique depuis le mobile, chronologie, albums, partage, recherche intelligente propulsée par CLIP et reconnaissance faciale. Toutes les fonctionnalités sont gratuites : la clé produit facultative à $99 n'est qu'un badge de soutien, sans aucune restriction de fonctionnalités. Ce module déploie Immich sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Il n'existe volontairement aucune variante CloudRun de ce module. La médiathèque d'Immich est un système de fichiers local — elle n'a pas de backend de stockage S3/GCS — et les envois de photos et vidéos dépassent couramment plusieurs Go ; ni l'un ni l'autre ne s'accorde avec le modèle de requêtes de Cloud Run.

Ce guide se concentre sur les services cloud utilisés par Immich et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications GKE — Workload Identity, entrée, autoscaling, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_GKE.


1. Vue d'ensemble​

Immich s'exécute sous forme de deux services : le serveur Immich (API + workers d'arrière-plan dans le même processus, image construite sur mesure) et un conteneur de machine learning distinct, préconstruit.

FonctionnalitéService Google CloudRemarques
Calcul (serveur)GKE AutopilotImage personnalisée basée sur ghcr.io/immich-app/immich-server, port 2283, 2 vCPU / 4 GiB, exactement un réplica
Calcul (ML)GKE Autopilotghcr.io/immich-app/immich-machine-learning préconstruite, port 3003, interne uniquement, inférence sur CPU (sans GPU), 2 vCPU / 4 GiB
Base de donnéesCloud SQL for PostgreSQL 15Obligatoire — avec l'extension pgvector (DB_VECTOR_EXTENSION=pgvector ; Cloud SQL ne dispose pas de VectorChord)
MédiathèqueNFS (volume partagé de la plateforme)Monté sur /usr/src/app/upload (IMMICH_MEDIA_LOCATION) — Immich n'a pas de backend de stockage d'objets
Cache et file d'attenteRedisObligatoire — file d'attente des jobs et pub/sub d'Immich ; le Redis hébergé sur le serveur NFS est injecté par défaut
Build de l'imageCloud Build + Artifact RegistryBuild personnalisé minimal ajoutant l'entrypoint cloud
EntréeCloud Load BalancingLoadBalancer externe, domaine personnalisé + certificat géré en option

Valeurs par défaut judicieuses à connaître d'emblée :

  • enable_nfs = true est validé, et pas seulement une valeur par défaut. Toute la bibliothèque de photos et de vidéos réside dans IMMICH_MEDIA_LOCATION ; sans NFS, ce chemin est le disque éphémère du pod et chaque redémarrage efface la bibliothèque. Le plan échoue si vous le désactivez.
  • enable_redis = true est validé. Immich refuse de démarrer sans Redis. En l'absence de redis_host explicite, la plateforme injecte l'IP du Redis hébergé sur le serveur NFS.
  • max_instance_count = 1 est validé. Une seule médiathèque NFS, un seul rédacteur ; les workers de jobs internes au processus d'Immich supposent une instance unique.
  • Le Deployment utilise la stratégie Recreate, et non RollingUpdate — App_GKE bascule automatiquement pour les applications adossées à NFS ; les mises à jour de version entraînent donc une courte interruption au lieu d'un interblocage de deux pods sur la même bibliothèque.
  • application_version = "latest" se résout en tag glissant release d'Immich. Immich publie des tags release et vX.Y.Z mais aucun latest ; la couche partagée associe latest → release via l'ARG de build IMMICH_VERSION propre à l'application, et l'image de machine learning utilise le même tag résolu (alignement strict).
  • pgvector est le backend vectoriel. Cloud SQL ne dispose pas de VectorChord (l'extension privilégiée par Immich) ; Immich s'exécute sur sa solution de repli pgvector documentée. Le job db-init crée au préalable les extensions vector et earthdistance.
  • Les sondes interrogent GET /api/server/ping — le point de terminaison de vivacité non authentifié d'Immich ({"res":"pong"}).
  • Aucun secret au niveau de l'application. Les clés de signature JWT d'Immich résident dans la base de données ; DB_PASSWORD est injecté par le socle sous le nom exact que lit Immich.
  • Le premier lancement est interactif. Ouvrez l'interface web et créez le compte administrateur sur l'écran d'inscription ; les applications mobiles Immich (iOS/Android) se connectent ensuite à la même URL de serveur.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que vous avez exécuté gcloud container clusters get-credentials <cluster> --region <region> --project <project> et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres identifiants figurent dans les Sorties du déploiement.

A. GKE Autopilot — les charges de travail serveur et ML d'Immich​

Le Deployment du serveur exécute un seul réplica ; le service de machine learning s'exécute en tant que second Deployment dans le même espace de noms, accessible uniquement depuis l'intérieur du cluster.

  • Console : Kubernetes Engine → Workloads → filtrez par espace de noms pour voir les deux Deployments, les pods et les événements. Kubernetes Engine → Services & Ingress affiche l'IP externe.
  • CLI :
    kubectl get pods -A | grep immich                       # find the namespace fast
    kubectl get pods,svc,deploy -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" deploy/"$(kubectl get deploy -n "$NAMESPACE" -o name | grep -v ml | head -1 | cut -d/ -f2)" --tail=100
    # The cloud entrypoint logs the resolved DB/Redis/media config on the first lines:
    kubectl logs -n "$NAMESPACE" <server-pod> | head -15
    # Confirm the ML URL wiring:
    kubectl exec -n "$NAMESPACE" deploy/<server-deploy> -- env | grep IMMICH_MACHINE_LEARNING_URL

B. Cloud SQL for PostgreSQL 15 + pgvector​

Immich stocke toutes ses métadonnées (utilisateurs, albums, ressources, EXIF, embeddings de recherche intelligente, données de reconnaissance faciale) dans Cloud SQL PostgreSQL 15, accessible via le sidecar Cloud SQL Auth Proxy. Le job db-init du premier déploiement crée la base de données et l'utilisateur, et crée au préalable les extensions pgvector et earthdistance ; Immich s'exécute avec DB_VECTOR_EXTENSION = pgvector, car Cloud SQL ne propose pas VectorChord.

  • Console : SQL → sélectionnez l'instance.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"
    # Inside psql — confirm the vector extension:
    # SELECT extname, extversion FROM pg_extension WHERE extname IN ('vector','earthdistance');

Le nom de l'instance, le nom de la base de données, l'utilisateur et le secret du mot de passe figurent dans les Sorties.

C. NFS — la médiathèque​

Le volume NFS partagé de la plateforme est monté sur /usr/src/app/upload (IMMICH_MEDIA_LOCATION). Chaque original, chaque miniature et chaque vidéo encodée y réside ; le pod lui-même est jetable.

  • CLI :
    # The NFS server is a Compute Engine VM managed by Services_GCP:
    gcloud compute instances list --project "$PROJECT" --filter="name~nfs"
    # Verify the mount and library content from inside the pod:
    kubectl exec -n "$NAMESPACE" deploy/<server-deploy> -- df -h /usr/src/app/upload
    kubectl exec -n "$NAMESPACE" deploy/<server-deploy> -- ls /usr/src/app/upload

D. Redis (file d'attente des jobs et pub/sub)​

Immich place chaque job d'arrière-plan (génération de miniatures, extraction de métadonnées, embeddings de recherche intelligente, détection de visages) dans une file d'attente Redis. Par défaut, la VM du serveur NFS héberge aussi Redis et la plateforme injecte son IP sous la forme REDIS_HOST ; l'entrypoint cloud la fait correspondre à REDIS_HOSTNAME d'Immich et échoue immédiatement si elle se résout en valeur vide.

  • CLI :
    kubectl exec -n "$NAMESPACE" deploy/<server-deploy> -- env | grep -E 'REDIS_HOST'

E. Machine learning — recherche intelligente CLIP et reconnaissance faciale​

Le conteneur préconstruit ghcr.io/immich-app/immich-machine-learning sert les embeddings CLIP, la reconnaissance faciale et l'OCR en HTTP sur le port 3003 (interne uniquement). Il s'agit d'inférence sur CPU — sans GPU. Son environnement définit explicitement IMMICH_PORT = "3003" : le socle propage l'environnement du serveur aux services additionnels et l'image ML lit la même variable IMMICH_PORT — sans cette surcharge, elle hérite de 2283, écoute sur le mauvais port et sa sonde de démarrage :3003 ne réussit jamais. Le serveur la trouve via la variable injectée IMMICH_MACHINE_LEARNING_URL, définie via module_env_vars sur le véritable nom DNS du Service Kubernetes (http://<service>-ml:3003 — le Service est nommé <service>-ml) ; le mécanisme output_env_var_name du socle compose une URL à nom nu impossible à résoudre (http://ml:3003), si bien que sa sortie est mise de côté dans la variable d'environnement inutilisée IMMICH_ML_URL_FOUNDATION_UNUSED. Les fichiers de modèles sont téléchargés à la demande lors de la première utilisation dans /cache sur le disque éphémère du pod (de nouveau téléchargés après une replanification — compromis accepté).

  • CLI :
    kubectl get pods -n "$NAMESPACE" | grep ml
    kubectl logs -n "$NAMESPACE" deploy/<ml-deploy> --tail=50 # model downloads + inference requests

F. Cloud Build et Artifact Registry​

L'image du serveur est un build personnalisé minimal (FROM ghcr.io/immich-app/immich-server plus l'entrypoint cloud) produit par Cloud Build et stocké dans Artifact Registry. L'ARG de build IMMICH_VERSION porte le tag résolu — volontairement propre à l'application, car le socle injecte APP_VERSION et l'emporte lors de la fusion, et Immich n'a pas de tag latest.

  • CLI :
    gcloud builds list --project "$PROJECT" --limit 5
    gcloud artifacts docker images list <region>-docker.pkg.dev/"$PROJECT"/<repo> 2>/dev/null | grep immich

G. Réseau, Logging et Monitoring​

L'accès externe s'effectue via une IP Cloud Load Balancing (service_type = LoadBalancer) ; un domaine personnalisé avec certificat géré et une IP statique réservée sont activés par défaut (enable_custom_domain = true, reserve_static_ip = true).

  • CLI :
    kubectl get svc -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application Immich​

  • L'entrypoint cloud fait correspondre les noms des variables d'environnement à l'exécution. Le cloud-entrypoint.sh de l'image personnalisée fait correspondre DB_HOST/DB_IP injectés par le socle → DB_HOSTNAME (en réécrivant un chemin de répertoire de socket de l'Auth Proxy en 127.0.0.1 TCP), DB_USER → DB_USERNAME, DB_NAME → DB_DATABASE_NAME, et REDIS_HOST → REDIS_HOSTNAME/REDIS_PORT — le socle peut injecter REDIS_HOST sous la forme host ou host:port ; l'entrypoint le scinde donc en un nom d'hôte nu et un port (6379 par défaut en l'absence de port). Des références Kubernetes $(VAR) ne pourraient pas le faire : K8s ne résout $(VAR) qu'à partir des entrées d'environnement définies plus tôt dans la liste rendue par ordre alphabétique, et DB_DATABASE_NAME est trié avant DB_NAME ; $(DB_NAME) resterait donc une chaîne littérale. DB_PASSWORD ne nécessite aucun mappage. L'entrypoint résout également le script de démarrage amont selon la disposition de l'image — Immich v3 a déplacé l'application vers /usr/src/app/server (script de démarrage à server/bin/start.sh) tandis que les images plus anciennes conservent /usr/src/app/start.sh ; les deux sont testés et le répertoire de travail est ajusté avant l'exec. L'entrypoint affiche la configuration résolue en tête du journal du pod — toujours le premier endroit où regarder.
  • Initialisation de la base de données au premier déploiement. Le job db-init (postgres:15-alpine) exécute db-init.sh de manière idempotente : utilisateur, base de données, droits, extensions pgvector + earthdistance, et attribution de cloudsqlsuperuser afin que les migrations amont puissent gérer elles-mêmes les extensions. Immich applique ses propres migrations de schéma à chaque démarrage.
  • Rédacteur unique, déploiements en Recreate. Comme la médiathèque est un seul système de fichiers NFS et que les workers de jobs s'exécutent dans le processus, un seul réplica est autorisé (validé au moment du plan), et les mises à jour de version remplacent le pod avec Recreate (brève interruption) plutôt qu'avec un déploiement progressif.
  • La recherche intelligente et la reconnaissance faciale sont asynchrones. Après un envoi, le serveur place en file d'attente des jobs qui appellent le service ML ; la première requête de recherche intelligente déclenche aussi le téléchargement du modèle CLIP, et elle est donc nettement lente une fois par durée de vie d'un pod ML. La progression des jobs est visible dans l'interface web sous Administration → Jobs.
  • Administrateur au premier lancement. Lors de la première visite, l'interface web affiche l'écran d'inscription ; le premier compte enregistré devient l'administrateur. Les applications iOS/Android d'Immich se connectent à la même URL de serveur pour la sauvegarde automatique depuis le mobile.
  • La télémétrie est désactivée (IMMICH_TELEMETRY_INCLUDE = "") et IMMICH_ENV = production ; l'API et les workers d'arrière-plan s'exécutent dans un seul conteneur (l'amont a fusionné le conteneur microservices dans la v1.106).

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Immich ou notables pour celui-ci sont listés ; toutes les autres entrées sont héritées d'App_GKE avec leur comportement et leurs valeurs par défaut standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)Projet Google Cloud cible.
regionus-central1Région de repli lorsque la découverte du réseau ne peut pas la déterminer.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoCourt suffixe qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail auxquelles sont accordés l'accès au projet et les alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_nameimmichNom de base des ressources. Ne pas modifier après le premier déploiement.
application_versionlatestTag des images serveur + ML, maintenus strictement alignés. latest se résout en tag glissant release d'Immich (aucun tag latest n'existe en amont) ; figez vX.Y.Z en production.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit / memory_limit2000m / 4GiRessources du conteneur serveur.
container_port2283Port natif d'Immich (IMMICH_PORT).
min_instance_count1Conservez 1 pour qu'Immich soit toujours disponible.
max_instance_count1Doit valoir 1 — validé au moment du plan (rédacteur NFS unique, workers internes au processus).
ml_cpu_limit / ml_memory_limit2000m / 4GiRessources du conteneur de machine learning. Les modèles CLIP + visages nécessitent environ 2–3Gi résidents ; 4Gi est la valeur par défaut sûre.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy.
enable_image_mirroringtrueRépliquer les images dans Artifact Registry.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres supplémentaires fusionnés par-dessus les valeurs par défaut d'Immich (IMMICH_PORT, IMMICH_MEDIA_LOCATION, DB_VECTOR_EXTENSION, IMMICH_ENV, télémétrie). Ne définissez pas ici de DB_*/REDIS_* — l'entrypoint gère ce mappage.
secret_environment_variables{}Map variable d'environnement → nom de secret Secret Manager.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerIP externe pour l'interface web et les applications mobiles.
session_affinityClientIPRoutage persistant (réplica unique, donc surtout sans objet).
network_tags["nfsserver"]Requis pour la connectivité NFS.
termination_grace_period_seconds60Délai de grâce avant l'arrêt forcé.
deployment_timeout1800Nombre de secondes pendant lesquelles Terraform attend le déploiement.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP /api/server/ping, délai de 30s, 30×10sSonde de démarrage de l'application (Groupe 14 sur la plateforme).
liveness_probeHTTP /api/server/ping, délai de 30sSonde de vivacité de l'application.
uptime_check_configdésactivé, chemin /api/server/pingTest de disponibilité Cloud Monitoring facultatif.

Groupe 11 — Jobs et services additionnels​

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser le job db-init intégré. Immich migre son propre schéma au démarrage.
additional_services[]Ajoutés après le service de machine learning intégré.

Groupe 13 — Système de fichiers (NFS)​

VariableValeur par défautDescription
enable_nfstrueDoit rester à true — validé au moment du plan. Toute la médiathèque réside sur NFS ; Immich n'a pas de backend S3/GCS.
nfs_mount_path/usr/src/app/uploadMonté exactement sur IMMICH_MEDIA_LOCATION.

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
db_nameimmich_dbNom de la base de données PostgreSQL. Immuable après le premier déploiement.
db_userimmich_userUtilisateur applicatif de la base de données. Immuable après le premier déploiement.
database_password_length32Longueur du mot de passe généré (16–64).

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron des sauvegardes automatiques de la base de données et du NFS (UTC).
backup_retention_days7À augmenter en production — la bibliothèque NFS est l'unique copie de vos photos.

Groupe 19 — Domaine personnalisé, IP statique et réseau​

VariableValeur par défautDescription
enable_custom_domaintrueGateway API + certificat géré.
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueIP externe stable entre les redéploiements.

Groupe 20 — Identity-Aware Proxy (IAP)​

Avertissement : les applications mobiles Immich s'authentifient auprès du serveur Immich, et non de Google — placer IAP devant l'API casse la sauvegarde automatique depuis le mobile, sauf si chaque appareil peut mener à bien le parcours de connexion Google.

VariableValeur par défautDescription
enable_iapfalseRequiert un domaine personnalisé et les deux identifiants OAuth (validé).

Groupe 21 — Redis et Cloud Armor​

VariableValeur par défautDescription
enable_redistrueDoit rester à true — validé au moment du plan ; Immich refuse de démarrer sans Redis.
redis_host""Vide = l'IP du Redis hébergé sur le serveur NFS est injectée.
enable_cloud_armorfalseAssocier une règle WAF au backend de l'Ingress.

Groupe 22 — VPC Service Controls et journalisation d'audit​

Entrées App_GKE standard : enable_vpc_sc, vpc_cidr_ranges, vpc_sc_dry_run, organization_id, enable_audit_logging. Consultez App_GKE.


5. Sorties​

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécutent les charges de travail.
service_cluster_ip / stage_service_cluster_ipsClusterIP internes au cluster.
service_external_ipIP du LoadBalancer externe (lorsqu'une IP statique est réservée).
web_urlURL de l'interface web d'Immich — IP du LoadBalancer externe si disponible, sinon URL interne du cluster.
database_instance_name / database_name / database_userIdentifiants Cloud SQL.
database_password_secretSecret Secret Manager contenant le mot de passe de la base de données.
database_host / database_portPoint de terminaison de la base de données (127.0.0.1 via l'Auth Proxy) / port.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsDétails du réseau VPC.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux.
initialization_jobs / db_import_jobNoms des jobs d'initialisation et d'import (facultatif).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configuration et sorties GitHub/déclencheurÉtat et détails de la CI/CD.
kubernetes_readyIndique si toutes les ressources Kubernetes ont été déployées (false lors du premier apply d'un nouveau cluster intégré (inline)).
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat des journaux d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation au moment du plan. Immich_GKE comporte ses propres garde-fous de validation en plus des contrôles du socle App_GKE : enable_nfs = false, enable_redis = false, max_instance_count > 1, Redis sans source d'hôte et IAP sans identifiants OAuth font tous échouer le plan avec une erreur nommée avant la création de toute ressource.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
enable_nfstrue (validé)CritiqueAvec NFS désactivé, toute la médiathèque se trouve sur le disque éphémère du pod — chaque replanification du pod efface toutes les photos et vidéos. Immich n'a aucun backend S3/GCS de repli. Bloqué au moment du plan.
max_instance_count1 (validé)CritiquePlus d'un réplica signifie plusieurs rédacteurs sur une même bibliothèque NFS et des workers de jobs dupliqués dans les processus — corruption de la bibliothèque et jobs concurrents. Bloqué au moment du plan.
db_name / db_userDéfinir une seule foisCritiqueImmuables après le premier déploiement ; un renommage recrée la base de données ou l'utilisateur et rend orphelines toutes les métadonnées des ressources, les albums et les utilisateurs.
backup_retention_daysÀ augmenter en productionÉlevéLa bibliothèque NFS est l'unique copie des médias ; 7 jours de sauvegardes, c'est peu pour une archive de photos.
enable_redis / redis_hosttrue / "" (validé)ÉlevéSans Redis, le serveur s'arrête au démarrage (l'entrypoint échoue immédiatement avec une erreur explicite). Avec Redis activé mais sans NFS ni hôte explicite, REDIS_HOST est vide — également bloqué au moment du plan.
Surcharge ML de IMMICH_PORTConservez la valeur intégrée IMMICH_PORT = "3003" sur le service MLÉlevéLe socle propage l'environnement du serveur aux services additionnels, et l'image ML lit la même variable IMMICH_PORT que le serveur — sans la surcharge, le conteneur ML hérite de 2283, écoute sur le mauvais port et sa sonde de démarrage :3003 ne réussit jamais (le Deployment ML ne devient jamais Ready).
IMMICH_MACHINE_LEARNING_URLNe modifiez pas l'URL DNS réelle injectéeÉlevéLe mécanisme output_env_var_name du socle compose l'URL à partir du nom nu du service additionnel (http://ml:3003), mais le Service qu'il crée s'appelle <service>-ml — le nom nu ne se résout pas et la recherche intelligente ainsi que la reconnaissance faciale échouent. Le module injecte l'URL DNS réelle du Service via module_env_vars et met de côté la valeur composée par le socle dans la variable inutilisée IMMICH_ML_URL_FOUNDATION_UNUSED.
ml_memory_limit4Gi (par défaut ; à considérer comme un plancher)MoyenEn deçà des quelque 2–3Gi que les modèles CLIP + visages doivent garder résidents, le chargement des modèles provoque un arrêt OOM du pod ML — la recherche intelligente et la reconnaissance faciale échouent sans bruit alors que l'application principale paraît parfaitement saine (les envois et la navigation fonctionnent toujours). Surveillez les redémarrages OOMKilled du pod ML.
enable_iapfalse sauf si l'accès mobile est géréMoyenIAP intercepte l'API appelée par les applications mobiles ; la sauvegarde automatique est cassée pour les appareils qui ne peuvent pas mener à bien la connexion Google.
application_versionlatest (→ release) ou un vX.Y.Z figéMoyenDéfinir un tag qui n'existe pas en amont fait échouer le build ou le tirage ; les tags serveur et ML sont maintenus alignés automatiquement — ne les faites pas pointer manuellement vers des versions différentes.
Mises à jour de versionPrévoir une brève interruptionFaibleLes applications adossées à NFS sont déployées avec la stratégie Recreate — l'ancien pod s'arrête avant le démarrage du nouveau. C'est intentionnel (les mises à jour progressives provoquent un interblocage sur la bibliothèque partagée).
pgvector ou VectorChordAccepter pgvector sur Cloud SQLFaibleLa construction des index de recherche intelligente et les requêtes sont plus lentes qu'avec VectorChord, l'extension privilégiée par Immich — attendu sur Cloud SQL, qui ne propose pas VectorChord. Fonctionnellement complet, simplement plus lent sur les grandes bibliothèques.
Latence de la première requête MLPrévoir une première recherche lenteFaibleLes modèles CLIP/visages sont téléchargés lors de la première utilisation (cache sur disque éphémère, de nouveau téléchargé après une replanification du pod ML) — la première requête de recherche intelligente après un déploiement est lente.
Chemin de la sonde de démarrage/api/server/pingFaibleTout point de terminaison authentifié renvoie 401/403 à la sonde kubelet non authentifiée et bloque le déploiement ; conservez la valeur par défaut.

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, autoscaling, entrée et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La couche applicative partagée propre à Immich (image, entrypoint, amorçage de la base de données, sondes) est décrite dans Immich_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.