Aller au contenu principal

Qdrant sur GKE Autopilot

Qdrant sur GKE Autopilot

Qdrant est une base de données vectorielle et un moteur de recherche par similarité hautes performances, conçus pour les charges de travail d'IA — pipelines RAG, systèmes de recommandation, recherche sémantique et stockage d'embeddings. Ce module déploie Qdrant sur GKE Autopilot au-dessus du socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Ce guide se concentre sur les services cloud qu'utilise Qdrant 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 à toute application GKE — Workload Identity, entrée, mise à l'échelle automatique, 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 plutôt que de les répéter ici.


1. Vue d'ensemble​

Qdrant s'exécute comme une charge de travail de base de données vectorielle avec état sur Autopilot. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotPods Qdrant, 1 vCPU / 1 GiB par défaut, mise à l'échelle horizontale automatique
Stockage persistant (recommandé)Persistent Disk via un PVC de StatefulSetDisque RWO à faible latence sur /qdrant/storage ; standard-rwo (Balanced PD) ou premium-rwo
Stockage persistant (alternative)Cloud Storage via GCS FUSEValeur par défaut lorsque le PVC n'est pas activé ; /qdrant/storage monté depuis le bucket <prefix>-storage
SecretsSecret ManagerClé d'API facultative (QDRANT__SERVICE__API_KEY)
EntréeCloud Load BalancingClusterIP par défaut ; LoadBalancer ou domaine personnalisé lorsqu'un accès externe est nécessaire

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

  • Pas de base de données SQL, pas de Redis. Qdrant gère son propre stockage intégré. Aucune instance Cloud SQL n'est créée.
  • Instance unique par défaut. max_instance_count = 1 est fortement recommandé. Qdrant est un stockage à rédacteur unique — plusieurs pods sur le même chemin de stockage corrompent les collections.
  • PVC de StatefulSet fortement recommandé en production. GCS FUSE est la valeur par défaut lorsque stateful_pvc_enabled n'est pas défini, mais les E/S du WAL et de HNSW sont sensibles à la latence ; un PVC offre une latence nettement plus faible. Définissez stateful_pvc_enabled = true pour tout déploiement de production.
  • ClusterIP par défaut. Qdrant ne doit pas être exposé publiquement sans protection par clé d'API. Ne passez service_type à LoadBalancer qu'en cas de besoin.
  • Deux points de terminaison de santé distincts. Le démarrage utilise /readyz ; la vivacité utilise /livez. Ne faites jamais pointer la sonde de vivacité vers /readyz — Qdrant se déclare temporairement non prêt pendant le chargement de grandes collections, ce qui provoquerait des redémarrages intempestifs des pods.
  • gRPC est désactivé par défaut. Activez-le via QDRANT__SERVICE__GRPC_PORT=6334 dans environment_variables et configurez manuellement un second port de Service.

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 sont indiqués dans les sorties du déploiement.

A. GKE Autopilot — la charge de travail Qdrant​

Le pod Qdrant s'exécute sur Autopilot, qui facture le CPU et la mémoire réellement demandés par le pod. L'autoscaling horizontal des pods est configuré, mais la valeur par défaut max_instance_count = 1 maintient un seul pod en cours d'exécution afin d'éviter les conflits d'écriture.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Qdrant pour consulter les pods, les événements et l'utilisation des ressources. Kubernetes Engine → Services & Ingress affiche le ClusterIP (ou l'IP externe si LoadBalancer est utilisé).
  • CLI :
    kubectl get pods,svc,hpa -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
    # Or for StatefulSet:
    kubectl logs -n "$NAMESPACE" statefulset/<service-name> --tail=100
    kubectl describe pod -n "$NAMESPACE" -l app=<service-name>

Consultez App_GKE pour la manière dont Autopilot, la mise à l'échelle et le type de charge de travail (Deployment ou StatefulSet) sont gérés.

B. Stockage persistant — PVC de StatefulSet ou GCS FUSE​

Qdrant conserve son WAL, les données des collections, les fichiers d'index HNSW et les métadonnées dans /qdrant/storage. Deux backends de stockage sont pris en charge :

PVC de StatefulSet (recommandé en production) : un volume Persistent Disk est lié au pod via une PersistentVolumeClaim. La classe de stockage est standard-rwo (Balanced PD) par défaut, ou premium-rwo pour davantage d'IOPS.

GCS FUSE (valeur par défaut lorsque le PVC n'est pas activé) : un bucket Cloud Storage nommé <prefix>-storage est provisionné et monté sur /qdrant/storage via le pilote CSI GCS FUSE.

  • Console (PVC) : Kubernetes Engine → Storage → PersistentVolumeClaims. Compute Engine → Disks pour voir le Persistent Disk sous-jacent.
  • Console (GCS FUSE) : Cloud Storage → Buckets — repérez le bucket *-storage.
  • CLI :
    # PVC status
    kubectl get pvc -n "$NAMESPACE"
    kubectl describe pvc -n "$NAMESPACE"

    # GCS bucket (when GCS FUSE is used)
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<storage-bucket>/

    # Confirm mount inside the pod
    kubectl exec -n "$NAMESPACE" <pod-name> -- ls /qdrant/storage

Consultez App_GKE pour le provisionnement NFS, GCS Fuse et les options CMEK.

C. Secret Manager — la clé d'API Qdrant​

Lorsque enable_api_key = true, une clé d'API alphanumérique de 32 caractères est générée et stockée dans Secret Manager. Elle est injectée sous la forme QDRANT__SERVICE__API_KEY à l'exécution, ce qui oblige tous les appelants REST et gRPC à transmettre api-key: <key> dans les en-têtes de requête.

  • Console : Security → Secret Manager — recherchez un secret nommé <resource-prefix>-api-key.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    gcloud secrets versions access latest --secret=<api-key-secret> --project "$PROJECT"

L'ID du secret de la clé d'API est indiqué dans les sorties sous qdrant_api_key_secret_id. Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.

D. Réseau et entrée​

Par défaut, la charge de travail n'est exposée qu'à l'intérieur du cluster via un service ClusterIP. Passez service_type à LoadBalancer pour un accès externe, ou activez un domaine personnalisé avec enable_custom_domain = true pour une entrée HTTPS via la Kubernetes Gateway API.

  • Console : Kubernetes Engine → Services & Ingress ; VPC network → IP addresses (lorsqu'une IP statique est réservée).
  • CLI :
    kubectl get svc -n "$NAMESPACE"
    kubectl get ingress -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails sur l'IP statique.

E. Cloud Logging et Monitoring​

Les sorties stdout/stderr des pods sont envoyées vers Cloud Logging ; les métriques GKE, vers Cloud Monitoring. Des tests de disponibilité (sur /readyz) et des règles d'alerte facultatifs sont disponibles.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application Qdrant​

  • Aucun amorçage de base de données. Qdrant gère son propre moteur de stockage intégré. Aucun job d'initialisation n'est injecté par défaut. La charge de travail démarre dès que le pod est prêt.
  • Chargement des collections au démarrage. Qdrant charge toutes les collections depuis le disque en mémoire au démarrage. Pour les instances comportant de grandes collections, le démarrage peut prendre de plusieurs dizaines de secondes à plusieurs minutes. La sonde de démarrage (/readyz) attend la fin de ce chargement avant que du trafic soit envoyé au pod.
  • Points de terminaison de vivacité et de disponibilité distincts. /readyz renvoie 503 pendant le chargement des collections ; /livez renvoie toujours 200 tant que le processus est actif. La sonde de vivacité utilise /livez pour éviter des redémarrages intempestifs des pods pendant le chargement des collections. Ne remplacez pas la sonde de vivacité par /readyz.
  • Prise en charge de gRPC (facultative). Qdrant prend en charge gRPC sur le port 6334. Il n'est pas activé par défaut, car le Service ClusterIP/LoadBalancer par défaut n'expose que le port 6333. Pour activer gRPC, ajoutez environment_variables = { QDRANT__SERVICE__GRPC_PORT = "6334" } et configurez manuellement un second port de Service.
  • Tâches de snapshot et de maintenance. Utilisez cron_jobs pour planifier des snapshots périodiques des collections Qdrant via l'API REST ou des routines de maintenance personnalisées.
  • Délai de grâce à l'arrêt. termination_grace_period_seconds = 60 par défaut laisse à Qdrant le temps de vider les écritures WAL en cours avant que le pod ne soit arrêté de force.

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Qdrant ou notables pour lui sont listés ; toutes les autres entrées sont héritées de 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 la charge de travail et des ressources régionales.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail bénéficiant d'un accès au projet et des alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources pour le suivi des coûts et de la propriété.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_nameqdrantNom de base des ressources. Ne le modifiez pas après le premier déploiement.
application_display_nameQdrant Vector DatabaseNom convivial affiché dans la console.
application_versionlatestTag de version de l'image Qdrant ; épinglez un tag semver en production (p. ex. v1.9.0).
enable_api_keyfalseGénère une clé d'API aléatoire dans Secret Manager ; obligatoire pour tout déploiement joignable hors de l'espace de noms.

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

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit1000mCPU par pod. Augmentez à 2000m–4000m pour les constructions d'index et les requêtes concurrentes en production.
memory_limit1GiMémoire par pod. Qdrant charge les index HNSW en RAM — dimensionnez selon les dimensions des collections et le nombre de vecteurs.
min_instance_count1Nombre minimal de réplicas. Conservez ≥ 1 pour éviter les démarrages à froid pendant le chargement des index.
max_instance_count1Nombre maximal de réplicas. Conservez 1 — Qdrant est un stockage à rédacteur unique.
enable_vertical_pod_autoscalingfalseLaisse Autopilot ajuster automatiquement les demandes de ressources (désactive le HPA CPU/mémoire).
enable_image_mirroringtrueMet en miroir l'image Qdrant dans Artifact Registry pour éviter les limites de débit de Docker Hub.
timeout_seconds300Délai d'expiration des requêtes en secondes (0–3600). Augmentez-le pour les upserts par lots volumineux ou les opérations de snapshot.
termination_grace_period_seconds60Nombre de secondes pendant lesquelles Kubernetes attend, après SIGTERM, que Qdrant vide ses écritures WAL.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres non secrets supplémentaires. Utilisez des clés QDRANT__… pour surcharger la configuration de Qdrant.
secret_environment_variables{}Correspondance variable d'environnement → nom de secret Secret Manager.
secret_propagation_delay30Nombre de secondes d'attente après la création d'un secret avant de poursuivre.
secret_rotation_period2592000sPériode de rappel de rotation Secret Manager (30 jours par défaut).

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
gke_cluster_name""Nom du cluster cible. Découvert automatiquement s'il est vide.
gke_cluster_selection_modeprimaryStratégie de sélection du cluster : explicit, round-robin ou primary.
namespace_name""Espace de noms Kubernetes. Généré automatiquement s'il est vide.
workload_typenullDeployment ou StatefulSet. Se résout automatiquement en StatefulSet lorsque stateful_pvc_enabled = true.
service_typeClusterIPMode d'exposition du Service. ClusterIP (recommandé), LoadBalancer ou NodePort.
session_affinityNoneNone ou ClientIP. Qdrant ne nécessite pas d'affinité de session.
enable_network_segmentationfalseCrée des ressources NetworkPolicy Kubernetes pour la micro-segmentation.
configure_service_meshfalseActive l'injection Istio pour l'espace de noms de l'application.

Groupe 7 — Configuration du StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullActive le PVC du StatefulSet. Fortement recommandé en production. Définir true sélectionne automatiquement StatefulSet.
stateful_pvc_size20GiTaille du PVC par pod. Dimensionnez-le pour contenir toutes les collections, les index HNSW et le WAL, avec de la marge.
stateful_pvc_mount_path/qdrant/storageChemin du PVC dans le conteneur. Doit correspondre à QDRANT__STORAGE__STORAGE_PATH.
stateful_pvc_storage_classstandard-rwostandard-rwo (Balanced PD) ou premium-rwo pour davantage d'IOPS. Ne peut pas être modifiée après la création du PVC.
stateful_headless_servicenullCrée un Service headless pour des identités réseau stables.
stateful_pod_management_policynullOrderedReady garantit des redémarrages séquentiels sûrs.
stateful_update_strategynullRollingUpdate pour des mises à jour sans interruption.
stateful_fs_group3000GID fsGroup défini dans le contexte de sécurité du pod pour l'accès en écriture au PVC.

Groupe 8 — Quota de ressources​

VariableValeur par défautDescription
enable_resource_quotafalsePlafonne le CPU, la mémoire et le nombre d'objets de l'espace de noms.
quota_memory_requests / quota_memory_limits""Utilisez obligatoirement des unités binaires (4Gi, 8192Mi) — les entiers bruts sont interprétés comme des octets et bloquent la planification.

Groupe 9 — Règles de fiabilité​

VariableValeur par défautDescription
enable_pod_disruption_budgettrueProtège la disponibilité pendant les mises à niveau des nœuds.
pdb_min_available1Nombre minimal de pods disponibles pendant les interruptions volontaires.
enable_topology_spreadfalseRépartit les pods entre les zones.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe/readyz, délai de 15sSonde HTTP — Qdrant se déclare prêt une fois toutes les collections chargées.
liveness_probe/livez, délai de 30sSonde HTTP — point de terminaison de vivacité dédié, indépendant de l'état de chargement des collections.
uptime_check_configdisabledTest de disponibilité Cloud Monitoring facultatif sur /readyz.
alert_policies[]Règles d'alerte sur les métriques facultatives.

Groupe 11 — Jobs et tâches planifiées​

VariableValeur par défautDescription
initialization_jobs[]Qdrant ne nécessite aucun job d'initialisation par défaut ; ne fournissez que des tâches personnalisées de chargement de données ou de migration.
cron_jobs[]CronJobs Kubernetes pour des snapshots périodiques des collections ou des tâches de maintenance.
additional_services[]Services sidecar ou auxiliaires déployés aux côtés de Qdrant.

Groupe 12 — CI/CD et intégration GitHub​

Intégration Cloud Build / Cloud Deploy standard d'App_GKE — voir App_GKE. Entrées principales : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy, enable_binary_authorization.

Groupe 13 — NFS​

VariableValeur par défautDescription
enable_nfsfalseQdrant utilise GCS ou un PVC pour le stockage — n'activez NFS que pour des jobs d'initialisation personnalisés ayant besoin d'un système de fichiers partagé.
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.
network_tags["nfsserver"]Tags réseau des nœuds/pods GKE ; nfsserver est obligatoire lorsque NFS est activé.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne le bucket de stockage GCS (utilisé lorsque le PVC n'est pas activé).
storage_buckets / gcs_volumes[]Buckets / montages GCS FUSE supplémentaires.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.
max_images_to_retain7Nombre maximal d'images de conteneur récentes conservées dans Artifact Registry.

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron de sauvegarde automatique (UTC).
backup_retention_days7Rétention ; augmentez-la à 30–90 pour la production ou la conformité.
enable_backup_import / backup_source / backup_uri / backup_formatoptions de restaurationRestaure une sauvegarde lors du déploiement.

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

VariableValeur par défautDescription
enable_custom_domaintrueProvisionne la Kubernetes Gateway API avec des certificats SSL (une Gateway avec IP statique est provisionnée automatiquement).
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueRéserve une IP externe stable.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google via la Kubernetes Gateway. Exige enable_custom_domain.
iap_authorized_users / iap_authorized_groups[]Qui peut accéder.
iap_oauth_client_id / iap_oauth_client_secret""Obligatoires lorsque IAP est activé (sensibles).

Groupe 21 — Cloud Armor​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocie une règle Cloud Armor (WAF) au backend de l'Ingress GKE.
admin_ip_ranges[]CIDR bénéficiant d'un accès privilégié.
cloud_armor_policy_namedefault-waf-policyNom de la règle.
enable_cdnfalseActive Cloud CDN via GCPBackendPolicy.

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

VariableValeur par défautDescription
enable_vpc_scfalseApplique un périmètre VPC-SC (exige organization_id).
vpc_cidr_ranges / vpc_sc_dry_run(défini)CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseCloud Audit Logs détaillés.

5. Sorties​

Ces valeurs sont renvoyées lors d'un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
stage_service_cluster_ipsCorrespondance des ClusterIP des services propres à chaque étape (Cloud Deploy).
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée).
service_urlURL pour joindre l'API REST de Qdrant.
qdrant_api_key_secret_idID du secret Secret Manager de la clé d'API Qdrant. Vide lorsque enable_api_key = false.
statefulset_nameNom du StatefulSet (lorsque le type de charge de travail est StatefulSet).
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
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_jobsNoms des éventuels jobs de configuration personnalisés.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configurationÉtat et détails CI/CD.
github_repository_url / github_repository_owner / github_repository_nameDépôt GitHub connecté.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster et la charge de travail sont prêts.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

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

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

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
enable_api_keytrue (tout déploiement externe)CritiqueSans clé d'API, tout appelant capable de joindre le service peut lire, modifier ou supprimer toutes les collections.
stateful_pvc_enabledtrue en productionCritiqueSans PVC, les données résident dans le système de fichiers éphémère du pod ; tout redémarrage efface définitivement toutes les collections.
stateful_pvc_mount_path/qdrant/storage (valeur par défaut)CritiqueDoit correspondre à QDRANT__STORAGE__STORAGE_PATH. Une incohérence stocke les données dans la couche éphémère et les perd au redémarrage.
application_nameà définir une seule foisCritiqueImmuable après le premier déploiement ; le modifier recrée l'espace de noms et le stockage, et fait perdre toutes les collections.
max_instance_count1ÉlevéPlusieurs pods Qdrant partageant un même PVC (RWO) ou bucket GCS corrompent les collections. Faites évoluer verticalement, pas horizontalement.
Chemin de liveness_probe/livez (valeur par défaut)ÉlevéFaire pointer la vivacité vers /readyz provoque des redémarrages intempestifs des pods à chaque chargement d'une grande collection depuis le disque.
memory_limit≥ 4Gi en productionÉlevéLa valeur par défaut 1Gi ne prend en charge que de petites collections de test ; les arrêts pour manque de mémoire (OOM) interrompent toutes les requêtes en cours et déclenchent un rechargement complet des index.
stateful_pvc_sizegénéreux (20 Gi+)ÉlevéUn PVC sous-dimensionné se remplit à mesure que les collections grossissent ; un disque plein fait planter Qdrant. La capacité d'un PVC ne peut pas être réduite après sa création.
stateful_pvc_storage_classstandard-rwo ou premium-rwoMoyenNe peut pas être modifiée après la création du PVC sans migration des données ; choisissez-la d'emblée en fonction des besoins en IOPS.
application_versionépingler une version semver en productionMoyenUtiliser latest peut provoquer une mise à niveau involontaire du format de stockage qui rend les collections existantes illisibles.
min_instance_count1MoyenLa mise à l'échelle à zéro entraîne un rechargement à froid de toutes les collections depuis le disque à la requête suivante ; à éviter pour les charges de travail sensibles à la latence.
quota_memory_requests / _limitsunités binairesCritiqueLes entiers bruts sont des octets et bloquent toute planification.
enable_iap / enable_cloud_armorà activer pour les déploiements exposésÉlevéSans contrôles d'accès, l'API REST de Qdrant est joignable par tout appelant à l'intérieur du réseau.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour une rétention de conformité.
pdb_min_available vs min_instance_countprévoir de la margeMoyen1/1 peut bloquer les mises à niveau des nœuds (le pod unique ne peut pas être évincé).

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, mise à l'échelle automatique, entrée et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La configuration applicative propre à Qdrant, partagée avec la variante Cloud Run, est décrite dans Qdrant_Common.

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