Aller au contenu principal

Moodle sur GKE Autopilot

Moodle sur GKE Autopilot

Moodle est le système de gestion de l'apprentissage (LMS) open source le plus populaire au monde, utilisé par des universités, des écoles, des entreprises et des organismes de formation en ligne partout dans le monde. Ce module déploie Moodle 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 Moodle 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, 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 plutôt que de les répéter ici.


1. Vue d'ensemble​

Moodle s'exécute comme une charge de travail web PHP 8.3/Apache adossée à PostgreSQL. Le déploiement associe un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotPods PHP 8.3/Apache, 2 vCPU / 4 GiB par défaut, autoscaling horizontal
Base de donnéesCloud SQL for PostgreSQL 15Obligatoire — Moodle ne prend pas en charge MySQL dans ce déploiement
Fichiers partagésFilestore (NFS)Répertoire Moodle moodledata partagé entre tous les réplicas ; obligatoire
Stockage d'objetsCloud StorageUn bucket de données et tout bucket supplémentaire défini par l'utilisateur
Cache et sessionsRedisActivé par défaut ; se replie sur l'adresse IP de l'hôte NFS lorsqu'aucun hôte Redis n'est indiqué
SecretsSecret ManagerMot de passe cron généré automatiquement, mot de passe SMTP et mot de passe de la base de données
PlanificateurCloud SchedulerJob cron provisionné automatiquement (toutes les minutes) sur /admin/cron.php
EntréeCloud Load BalancingLoadBalancer externe, domaine personnalisé facultatif + certificat géré

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

  • PostgreSQL 15 est obligatoire. Le moteur de base de données est fixe et MOODLE_DB_TYPE = "pgsql" est codé en dur ; sélectionner MySQL ou NONE empêche le démarrage.
  • NFS est obligatoire. Le répertoire Moodle moodledata doit être un système de fichiers partagé, accessible en écriture depuis tous les réplicas. enable_nfs vaut true par défaut.
  • Redis est activé par défaut. Avec plus d'un réplica, un cache partagé est requis pour garder les sessions PHP et l'état applicatif de Moodle cohérents entre les pods.
  • L'affinité de session est ClientIP. Moodle s'appuie sur les sessions PHP ; les requêtes d'un navigateur sont donc rattachées à un seul pod.
  • Le domaine personnalisé est activé par défaut (enable_custom_domain = true) afin que le wwwroot de Moodle se résolve vers une adresse stable plutôt que vers l'adresse IP transitoire d'un pod.
  • Un job Cloud Scheduler est provisionné automatiquement. Il appelle /admin/cron.php toutes les minutes à l'aide d'un mot de passe cron sécurisé, généré automatiquement et stocké dans Secret Manager.
  • Le mot de passe cron et le mot de passe SMTP sont générés automatiquement et stockés dans Secret Manager ; vous ne les saisissez jamais en clair.

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 — la charge de travail Moodle​

Les pods Moodle sont planifiés sur Autopilot, qui facture le CPU et la mémoire que les pods demandent réellement. L'autoscaling horizontal des pods dimensionne le déploiement entre le nombre minimal et le nombre maximal de réplicas.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Moodle pour voir les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche l'adresse IP externe.
  • CLI :
    kubectl get pods,svc,hpa -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
    kubectl describe hpa -n "$NAMESPACE" # current vs target utilisation

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

B. Cloud SQL for PostgreSQL 15​

Moodle stocke toutes les données applicatives (cours, utilisateurs, notes, journaux d'activité) dans une instance gérée Cloud SQL for PostgreSQL 15. Les pods s'y connectent en privé via le sidecar Cloud SQL Auth Proxy sur un socket Unix, si bien qu'aucune adresse IP publique n'est exposée. Lors du premier déploiement, un job d'initialisation crée la base de données et l'utilisateur de l'application, et active l'extension pg_trgm pour la recherche en texte intégral de Moodle.

  • Console : SQL → sélectionnez l'instance pour consulter les connexions, les sauvegardes, les flags et les métriques.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql instances describe <instance-name> --project "$PROJECT"
    # Open an interactive shell to inspect schema/data:
    gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"

Le nom de l'instance, le nom de la base de données, l'utilisateur et le secret Secret Manager contenant le mot de passe figurent tous dans les sorties. Pour le modèle de connexion, les sauvegardes automatiques et la rotation des mots de passe, consultez App_GKE.

C. Filestore (NFS) et Cloud Storage​

Le répertoire moodledata de Moodle est écrit sur un partage Filestore (NFS) monté dans chaque pod, afin que tous les réplicas voient les mêmes fichiers téléversés, supports de cours et devoirs des utilisateurs. Un bucket de données Cloud Storage dédié est également provisionné ; le compte de service de la charge de travail y reçoit automatiquement l'accès.

  • Console : Filestore → Instances pour le partage NFS ; Cloud Storage → Buckets pour le bucket de données.
  • CLI :
    gcloud filestore instances list --project "$PROJECT"
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<data-bucket>/ # bucket name is in the Outputs
    # Confirm the NFS share is mounted inside a pod:
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- df -h | grep nfs

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

D. Cache Redis​

Redis prend en charge la gestion des sessions PHP et le cache applicatif de Moodle. Lorsqu'aucun hôte Redis externe n'est configuré et que NFS est activé, l'adresse IP de l'hôte NFS sert de point de terminaison Redis — ce qui convient au développement. En production avec plusieurs réplicas, définissez redis_host sur l'adresse IP d'une instance Cloud Memorystore.

  • Console : Memorystore → Redis (si vous utilisez une instance gérée).
  • CLI :
    redis-cli -h <redis-host> ping           # from a host with network access
    redis-cli -h <redis-host> info keyspace

E. Secret Manager​

Le mot de passe cron et le mot de passe SMTP de Moodle sont générés automatiquement par Moodle_Common et stockés sous forme de secrets Secret Manager. Le mot de passe de la base de données est généré et géré par le socle. Les trois sont injectés dans les pods à l'exécution ; aucune valeur en clair n'apparaît dans les fichiers de configuration.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"

Le nom du secret du mot de passe de la base de données figure dans les Sorties. Après le déploiement, mettez à jour le secret du mot de passe SMTP avec votre véritable identifiant SMTP :

echo -n "your-smtp-password" | \
gcloud secrets versions add <smtp-password-secret> --data-file=- --project "$PROJECT"

Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.

F. Cloud Scheduler​

Un job Cloud Scheduler est provisionné automatiquement à chaque déploiement pour piloter la file de tâches interne de Moodle. Il s'exécute toutes les minutes et s'authentifie à l'aide du MOODLE_CRON_PASSWORD généré automatiquement.

  • Console : Cloud Scheduler → Jobs.
  • CLI :
    gcloud scheduler jobs list --project "$PROJECT"
    gcloud scheduler jobs describe <job-name> --location "$REGION" --project "$PROJECT"
    # Manually trigger a cron run:
    gcloud scheduler jobs run <job-name> --location "$REGION" --project "$PROJECT"

G. Réseau et entrée​

Par défaut, la charge de travail est exposée via une adresse IP externe Cloud Load Balancing. Un domaine personnalisé avec un certificat géré par Google peut être activé, et une adresse IP statique peut être réservée afin que l'adresse survive aux redéploiements. enable_custom_domain vaut true par défaut afin que le wwwroot de Moodle puisse toujours être résolu vers une adresse stable.

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get ingress,svc -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les adresses IP statiques.

H. Cloud Logging et Monitoring​

Les sorties stdout/stderr des pods sont envoyées à Cloud Logging ; les métriques GKE et Cloud SQL sont envoyées à Cloud Monitoring. Des tests de disponibilité 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 Moodle​

  • Configuration de la base de données au premier déploiement. Deux jobs d'initialisation s'exécutent avant le démarrage de l'application. Le job db-init crée la base de données et l'utilisateur Moodle, active l'extension pg_trgm et accorde les privilèges (idempotent, peut être relancé sans risque). Le job nfs-init crée les sous-répertoires Moodle requis (filedir, temp, cache, localcache) sur le partage NFS et en attribue la propriété à www-data.
  • Planification cron automatique. Un job Cloud Scheduler s'exécute toutes les minutes en ciblant /admin/cron.php?password=<MOODLE_CRON_PASSWORD>. Il pilote toutes les tâches planifiées de Moodle : sauvegardes de cours, notifications par e-mail, traitement des badges et achèvements d'activités. Le job est toujours créé et ne peut pas être désactivé.
  • Chemin de santé. Les sondes de disponibilité (readiness) et de vivacité utilisent /health.php, qui renvoie HTTP 200 lorsque PHP est opérationnel. La sonde de démarrage accorde jusqu'à 10 minutes pour la création du schéma et l'enregistrement des plugins au premier démarrage.
  • E-mail sortant SMTP. Les paramètres SMTP sont injectés sous forme de variables d'environnement. Remplacez les valeurs par défaut via environment_variables (voir le Groupe 5). Le mot de passe SMTP est généré automatiquement et stocké dans Secret Manager ; mettez à jour le secret avec votre véritable identifiant après le déploiement.
  • Résolution de wwwroot. Le config.php de Moodle résout wwwroot à partir de la variable d'environnement APP_URL, avec GKE_SERVICE_URL en repli. Les domaines personnalisés requièrent enable_custom_domain = true (la valeur par défaut) pour produire une URL stable.
  • Connexion administrateur. Le nom d'utilisateur et l'adresse e-mail de l'administrateur initial sont configurables via environment_variables. Le mot de passe administrateur est défini lors de la première installation de Moodle via admin/cli/install_database.php.

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Moodle ou notables pour lui 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 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 recevant l'accès au projet et les 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_namemoodleNom de base des ressources. Ne le modifiez pas après le premier déploiement.
application_display_nameMoodle LMSNom convivial affiché dans la console.
application_descriptionMoodle Learning Management System on GKE AutopilotAnnotation de description de la charge de travail.
descriptionMoodle LMS - Online learning and course management platformTransmis à Moodle_Common comme entrée description ; distinct de application_description ci-dessus.
application_version4.5.1Tag de version de l'image de conteneur ; incrémentez-le pour déployer une nouvelle version.

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

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour provisionner uniquement l'infrastructure.
cpu_limit2000mCPU par pod ; 2 vCPU recommandés pour Moodle.
memory_limit4GiMémoire par pod ; 4 GiB recommandés (évite les erreurs OOM de PHP lors des importations).
min_instance_count0Nombre minimal de réplicas. Définissez 1 en production pour que les tâches planifiées continuent de s'exécuter.
max_instance_count5Nombre maximal de réplicas (plafond de l'autoscaler).
container_port8080Moodle/Apache écoute sur le port 8080.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy pour les connexions par socket Unix.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres supplémentaires non secrets. Remplacez ici les valeurs SMTP injectées automatiquement (par ex. MOODLE_SMTP_HOST, MOODLE_ADMIN_EMAIL).
secret_environment_variables{}Correspondance variable d'environnement → nom du secret Secret Manager.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerMode d'exposition du Service.
session_affinityClientIPRoutage persistant requis pour les sessions PHP de Moodle.
workload_typenullSe résout automatiquement en StatefulSet lorsque le stockage par pod est activé.
network_tags['nfsserver']Tags des nœuds/pods ; nfsserver est requis pour la connectivité NFS.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullActive les modèles de PVC pour un stockage persistant par pod.
stateful_pvc_size10GiTaille de stockage par PVC.
stateful_pvc_mount_path/dataChemin du conteneur où le PVC est monté.

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""Doivent utiliser des unités binaires (4Gi, 8192Mi) — les entiers nus sont lus comme des octets et bloquent toute 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_available1Augmentez min_instance_count au-delà de 1 si vous avez besoin de marge pour les évictions.
enable_topology_spreadfalseRépartit les pods entre les zones.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP /health.php, 20 échecs × 30 sJusqu'à 10 minutes pour que Moodle termine sa configuration au premier démarrage.
liveness_probeHTTP /health.php, délai initial de 120 sContrôle de santé périodique après le démarrage.
uptime_check_configdésactivé, chemin /Test de disponibilité Cloud Monitoring facultatif.
alert_policies[]Règles d'alerte sur métriques facultatives.

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

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser les jobs intégrés db-init et nfs-init.
cron_jobs[]CronJobs Kubernetes complémentaires (le cron Moodle Cloud Scheduler est toujours créé séparément).

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

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

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

VariableValeur par défautDescription
enable_nfstrueVolume Filestore partagé pour le moodledata de Moodle (à laisser activé — requis pour tous les déploiements).
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur ; injecté sous la forme MOODLE_DATA_DIR.
nfs_volume_namenfs-data-volumeNom du volume Kubernetes pour le montage NFS.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne le bucket de données.
storage_buckets[{ name_suffix = "data" }]Buckets GCS supplémentaires à provisionner.
gcs_volumes[]Montages de volumes GCS Fuse pour les thèmes ou les plugins.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 15 — Cache Redis​

VariableValeur par défautDescription
enable_redistrueUtilise Redis pour les sessions PHP et le cache applicatif de Moodle.
redis_host""Laissez vide pour utiliser l'adresse IP de l'hôte NFS (développement uniquement) ; définissez l'adresse IP d'une instance Cloud Memorystore pour la production.
redis_port6379Port Redis (type chaîne).
redis_auth""Mot de passe d'authentification Redis facultatif (sensible).

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
database_typePOSTGRESFixé à PostgreSQL — ne le modifiez pas.
application_database_namegkeappNom de la base de données. Immuable après le premier déploiement.
application_database_usergkeappUtilisateur de l'application. Immuable après le premier déploiement.
db_namemoodleAlias du nom de base de données propre à Moodle ; gardez-le cohérent avec application_database_name.
db_usermoodleAlias de l'utilisateur propre à Moodle ; gardez-le cohérent avec application_database_user.
database_password_length32Longueur du mot de passe généré.
enable_auto_password_rotationfalseRotation du mot de passe de la base de données sans interruption de service.

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron des sauvegardes automatiques (UTC).
backup_retention_days7Durée de conservation ; augmentez à 30–90 pour la production ou la conformité.
enable_backup_import / backup_source / backup_urioptions de restaurationRestaure à partir d'une sauvegarde lors du déploiement.

Groupe 18 — Scripts SQL personnalisés​

enable_custom_sql_scripts, custom_sql_scripts_bucket, custom_sql_scripts_path, custom_sql_scripts_use_root — exécutent du SQL depuis un bucket GCS après le provisionnement. Utilisez-les pour exécuter des extensions PostgreSQL supplémentaires ou injecter des données initiales. Consultez App_GKE.

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

VariableValeur par défautDescription
enable_custom_domaintrueProvisionne un Ingress pour les noms d'hôte personnalisés + certificat géré (requis pour un wwwroot Moodle correct).
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueAdresse IP externe stable d'un redéploiement à l'autre.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google devant Moodle.
iap_authorized_users / iap_authorized_groups[]Personnes autorisées à accéder.
iap_oauth_client_id / iap_oauth_client_secret""Requis lorsque IAP est activé (sensible).
iap_support_email""Affiché sur l'écran de consentement OAuth.

Groupe 21 — Cloud Armor​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocie une règle Cloud Armor (WAF) au backend de l'Ingress.
admin_ip_ranges[]Plages CIDR autorisées pour l'accès privilégié.
cloud_armor_policy_namedefault-waf-policyNom de la règle.

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

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

5. Sorties​

Ces valeurs sont renvoyées lorsqu'un déploiement réussit 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.
service_external_ipAdresse IP externe du LoadBalancer (lorsqu'une adresse IP statique est réservée).
service_urlURL pour accéder à Moodle.
database_instance_nameNom de l'instance Cloud SQL.
database_nameNom de la base de données de l'application.
database_userUtilisateur de base de données de l'application.
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 (via l'Auth Proxy) / port.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
nfs_server_ipAdresse IP privée du serveur NFS Filestore (sensible).
nfs_mount_pathChemin du conteneur où le partage NFS est monté.
nfs_share_pathChemin d'exportation sur le serveur NFS.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux de notification.
initialization_jobs / db_import_job / nfs_setup_jobNoms des jobs de configuration et des jobs (facultatifs) d'importation et NFS.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configurationÉtat et détails CI/CD (dépôt, déclencheur, registre).
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 de 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 / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
database_typePOSTGRESCritiqueMoodle requiert PostgreSQL ; MOODLE_DB_TYPE = "pgsql" est codé en dur — tout autre moteur empêche le démarrage.
enable_nfstrueCritiqueSans stockage NFS partagé, moodledata n'est pas partagé entre les réplicas et les fichiers téléversés sont perdus au redémarrage d'un pod.
application_database_name / db_namedéfinis une seule fois, cohérentsCritiqueImmuables après le premier déploiement ; un renommage recrée la base de données et détruit les données.
enable_backup_importfalse sauf en cas de restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'importation.
quota_memory_requests / _limitsunités binairesCritiqueLes entiers nus sont des octets et bloquent toute planification des pods.
enable_redistrueÉlevéAvec plus d'un réplica, des caches isolés par pod entraînent des incohérences de sessions PHP.
redis_host"" (NFS) ou expliciteÉlevéAucun point de terminaison valide si Redis est activé alors que NFS est désactivé et qu'aucun hôte n'est défini.
memory_limit4GiÉlevéUne mémoire insuffisante provoque des erreurs OOM de PHP lors des importations de cours ou des téléversements de fichiers volumineux.
session_affinityClientIPÉlevéSans persistance de session, les connexions à Moodle sur plusieurs réplicas perdent l'état de session.
min_instance_count1 pour la productionÉlevé0 peut laisser le job cron Cloud Scheduler sans pod destinataire pendant les périodes de réduction à zéro.
enable_custom_domaintrue (par défaut)ÉlevéSans URL stable, le wwwroot de Moodle se résout vers l'adresse IP transitoire d'un pod, ce qui casse les liens absolus et les chemins de fichiers.
nfs_mount_path/mnt/nfsÉlevéDoit correspondre à MOODLE_DATA_DIR ; le modifier après le premier déploiement déplace la racine des données et casse l'installation.
enable_iap / enable_cloud_armorà activer pour l'accès administrateurMoyenSinon, l'interface d'administration est accessible publiquement.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour les exigences de conservation liées à la conformité.
pdb_min_available vs min_instance_countlaisser de la margeMoyen1/1 peut bloquer les mises à niveau des nœuds (un pod unique ne peut pas être évincé).

Pour le comportement du socle mentionné 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 configuration partagée propre à Moodle est décrite dans Moodle_Common.

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