Speedtest Tracker sur GKE Autopilot
Speedtest Tracker est un outil gratuit, open source et auto-hébergé de surveillance des tests de débit Internet, construit sur Laravel (PHP). Il exécute des tests de débit Ookla selon une planification récurrente, stocke les résultats dans une base de données et les présente sous forme de graphiques historiques via un tableau de bord web et une API REST. Ce module déploie Speedtest Tracker sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.
Ce guide se concentre sur les services cloud utilisés par Speedtest Tracker 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 plutôt que de les répéter ici.
1. Vue d'ensemble
Speedtest Tracker s'exécute sous forme de charge de travail web PHP sur GKE Autopilot. Le déploiement assemble un ensemble ciblé de services Google Cloud :
| Fonctionnalité | Service Google Cloud | Remarques |
|---|---|---|
| Calcul | GKE Autopilot | Pod PHP (LinuxServer), 1 vCPU / 1 GiB par défaut, réplica unique |
| Base de données | Cloud SQL for MySQL 8.0 | Obligatoire — ce module impose MySQL ; la valeur par défaut SQLite de l'image amont est contournée |
| Cache et sessions | Redis (facultatif) | Désactivé par défaut ; Speedtest Tracker utilise le pilote de cache local file/sync |
| Secrets | Secret Manager | APP_KEY Laravel généré automatiquement ; mot de passe de la base de données |
| Entrée | Cloud Load Balancing | LoadBalancer externe, domaine personnalisé + certificat géré + adresse IP statique par défaut |
Valeurs par défaut judicieuses à connaître d'emblée :
- MySQL 8.0 est obligatoire. Le moteur de base de données est fixé par la couche
applicative partagée (
database_typese résout enMYSQL_8_0) ; PostgreSQL n'est pas pris en charge. - L'image préconstruite
linuxserver/speedtest-trackerest utilisée directement. Il n'y a pas de Cloud Build personnalisé ; l'image officielle LinuxServer.io est mise en miroir dans Artifact Registry (enable_image_mirroring = true) et déployée telle quelle. Solution de repli :ghcr.io/alexjustesen/speedtest-tracker(basée sur Alpine) si un environnement d'exécution particulier se révélait un jour incompatible avec l'image LinuxServer s6-overlay. - Le conteneur écoute sur le port 80 (
container_port = 80,container_protocol = "http1"). - Un réplica unique est maintenu (
min_instance_count = 1,max_instance_count = 1; GKE ne propose pas de mise à l'échelle à zéro). Ce choix est structurant, et pas seulement une valeur par défaut liée au coût — le planificateur LaravelSPEEDTEST_SCHEDULEne dispose d'aucun verrouillage entre pods ; plusieurs réplicas risquent donc de déclencher des tests de débit planifiés en double. APP_KEYest immuable après le premier démarrage. La clé d'application Laravel est générée une seule fois et stockée dans Secret Manager ; sa rotation rend toutes les valeurs chiffrées de la base de données indéchiffrables.- L'image exécute automatiquement
php artisan migrate --forceau démarrage ; le schéma est donc créé au premier démarrage, une fois quedb-inita provisionné la base de données et l'utilisateur — il n'y a pas de job de migration distinct. - Pas de stockage par défaut. Speedtest Tracker stocke tous les résultats et la
configuration dans Cloud SQL —
create_cloud_storageetenable_nfssont désactivés par défaut. - GKE se connecte à Cloud SQL via le sidecar Auth Proxy sur
127.0.0.1:3306(enable_cloudsql_volume = true), et le câblage GKE remplaceDB_HOST = "127.0.0.1". - Un domaine personnalisé, un certificat géré et une adresse IP statique réservée
sont activés par défaut (
enable_custom_domain = true,reserve_static_ip = true), avecsession_affinity = "ClientIP".
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 Speedtest Tracker
Le pod de Speedtest Tracker est planifié sur Autopilot, qui facture le CPU et la mémoire réellement demandés par le pod. La charge de travail s'exécute sous forme de Deployment à réplica unique, afin que le planificateur cron intégré au processus ne s'exécute jamais simultanément sur plusieurs pods.
- Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Speedtest Tracker 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 -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
kubectl describe deploy/<service-name> -n "$NAMESPACE" # strategy, events
Consultez App_GKE pour la gestion d'Autopilot, de la mise à l'échelle et du type de charge de travail (Deployment ou StatefulSet).
B. Cloud SQL for MySQL 8.0
Speedtest Tracker stocke tous les résultats des tests de débit et la configuration de
l'application dans une instance gérée Cloud SQL for MySQL 8.0. Les pods y accèdent de
manière privée via le sidecar Cloud SQL Auth Proxy sur 127.0.0.1:3306
(enable_cloudsql_volume = true) ; 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.
- Console : SQL → sélectionnez l'instance pour 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=speedtesttracker --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 automatisées et la rotation des mots de passe, consultez App_GKE.
C. Redis (cache et sessions facultatifs)
Redis est désactivé par défaut (enable_redis = false) ; Speedtest Tracker utilise
ses pilotes locaux de cache et de sessions file/sync, ce qui convient à un déploiement
à réplica unique. Lorsque enable_redis = true est défini, la couche partagée injecte
REDIS_HOST et REDIS_PORT.
- Console : Memorystore → Redis (si vous utilisez une instance gérée).
- CLI :
redis-cli -h <redis-host> ping
# Confirm the DB/schedule wiring injected into the running pod:
kubectl exec -n "$NAMESPACE" deploy/<service-name> -- env | grep -E 'DB_|REDIS_|SPEEDTEST_'
D. Secret Manager
Un secret cryptographique est généré automatiquement et stocké dans Secret Manager :
l'APP_KEY Laravel (base64:<44-char base64>), utilisée pour chiffrer toutes les
données que Speedtest Tracker stocke sous forme chiffrée. Le mot de passe de la base
de données est géré séparément par le socle.
- 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. Consultez App_GKE pour l'intégration du Secret Store CSI et la rotation.
E. Réseau et entrée
Par défaut, la charge de travail est exposée via une adresse IP externe Cloud Load
Balancing avec un domaine personnalisé et un certificat géré par Google
(enable_custom_domain = true), et une adresse IP statique est réservée
(reserve_static_ip = true) afin que l'adresse survive aux redéploiements.
- 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 détails sur les domaines personnalisés, Cloud CDN et les adresses IP statiques.
F. Cloud Logging et Monitoring
Les flux stdout/stderr des pods sont envoyés vers Cloud Logging ; les métriques de GKE et de Cloud SQL sont envoyées vers 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 Speedtest Tracker
- Configuration de la base de données au premier déploiement. Un job
d'initialisation exécute
db-init.shavecmysql:8.0-debian. Il détecte le socket Cloud SQL ou le point de terminaison TCP, attend que MySQL soit joignable, crée la base de données et l'utilisateur de l'application, accorde les privilèges, vérifie que l'utilisateur de l'application peut se connecter et arrête proprement le sidecar Cloud SQL Auth Proxy. Le job est idempotent et peut être relancé sans risque (max_retries = 3). - Migration automatique du schéma au démarrage. L'image LinuxServer de Speedtest
Tracker exécute automatiquement
php artisan migrate --forceà chaque démarrage du conteneur ; le schéma est donc créé au premier démarrage et mis à niveau lors des démarrages suivants — il n'y a pas de job de migration distinct. APP_KEYest immuable après le premier démarrage. La clé d'application Laravel est générée une seule fois et écrite dans Secret Manager. Sa rotation rend toutes les valeurs chiffrées de la base de données définitivement indéchiffrables. N'effectuez de rotation que pendant une fenêtre de maintenance planifiée, avec un plan de rechiffrement.- Planificateur cron intégré au processus.
SPEEDTEST_SCHEDULE(par défaut"0 * * * *", toutes les heures) pilote le propre planificateur Laravel de Speedtest Tracker pour exécuter des tests de débit automatisés. Contrairement à Cloud Run, les pods GKE s'exécutent en continu (aucun problème de mise à l'échelle à zéro) ; il se déclenche donc de manière fiable tant que le pod unique est en cours d'exécution. - Élagage des résultats.
PRUNE_RESULTS_OLDER_THAN(par défaut"0", désactivé) supprime automatiquement les résultats de tests de débit antérieurs au nombre de jours configuré. - Chemin de santé. La sonde de vivacité cible par défaut
/api/healthcheck— le point de terminaison de santé JSON non authentifié de Speedtest Tracker. La sonde de démarrage est un contrôle TCP. Prévoyez une fenêtre généreuse pour le premier démarrage (délai initial de 30 secondes, seuil d'échec élevé) afin de laisser le temps aux migrations automatiques. - Configuration au premier lancement. L'interface web de Speedtest Tracker guide la création du compte lors de la première visite — il n'existe aucun compte administrateur par défaut préchargé à modifier.
- Inspecter l'exécution des jobs :
kubectl get jobs -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" job/<job-name>
4. Variables de configuration
Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Speedtest Tracker 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é
| Variable | Valeur par défaut | Description |
|---|---|---|
project_id | (obligatoire) | Projet Google Cloud cible. |
region | us-central1 | Région de la charge de travail et des ressources régionales. |
Groupe 2 — Environnement de déploiement
| Variable | Valeur par défaut | Description |
|---|---|---|
tenant_id | demo | Suffixe 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
| Variable | Valeur par défaut | Description |
|---|---|---|
application_name | speedtesttracker | Nom de base des ressources. Ne pas modifier après le premier déploiement. |
application_display_name | Speedtest Tracker | Nom lisible affiché dans la console. |
application_description | Speedtest Tracker — automated internet speed test monitoring and history on GKE Autopilot | Description de la charge de travail. |
application_version | latest | Étiquette de l'image linuxserver/speedtest-tracker ; à figer (par ex. version-v1.6.3) en production. |
speedtest_schedule | 0 * * * * | Expression cron de la planification automatisée des tests de débit. |
prune_results_older_than | 0 | Nombre de jours au-delà duquel les anciens résultats sont élagués ; 0 désactive l'élagage. |
Groupe 4 — Exécution et mise à l'échelle
| Variable | Valeur par défaut | Description |
|---|---|---|
deploy_application | true | Définissez false pour provisionner uniquement l'infrastructure. |
container_image_source | prebuilt | Déploie directement l'image LinuxServer mise en miroir — aucun build personnalisé. |
container_image | "" | Remplace la référence de l'image ; laissez vide pour utiliser l'image mise en miroir par défaut. |
enable_image_mirroring | true | Met en miroir l'image LinuxServer dans Artifact Registry avant le déploiement. |
min_instance_count | 1 | Nombre minimal de réplicas ; à maintenir à 1. |
max_instance_count | 1 | Nombre maximal de réplicas. Ne l'augmentez pas tant que speedtest_schedule est défini — risque de tests de débit planifiés en double. |
container_port | 80 | Speedtest Tracker écoute sur le port 80. |
container_protocol | http1 | HTTP/1.1. |
cpu_limit | 1000m | CPU par pod ; 1 vCPU par défaut. |
memory_limit | 1Gi | Mémoire par pod. |
timeout_seconds | 300 | Durée maximale d'une requête (0–3600 secondes). |
enable_cloudsql_volume | true | Sidecar Cloud SQL Auth Proxy (127.0.0.1:3306) ; obligatoire sur GKE. |
Groupe 5 — Variables d'environnement et secrets
| Variable | Valeur par défaut | Description |
|---|---|---|
environment_variables | {} | Paramètres supplémentaires non secrets (par ex. DISPLAY_TIMEZONE, SPEEDTEST_SERVERS). Ne définissez pas APP_KEY ni DB_* ici. |
secret_environment_variables | {} | Association variable d'environnement → nom du secret Secret Manager. |
secret_propagation_delay | 30 | Nombre de secondes d'attente après la création d'un secret avant de poursuivre. |
secret_rotation_period | 2592000s | Fréquence des notifications de rotation de Secret Manager. |
Groupe 6 — Backend GKE et cluster
| Variable | Valeur par défaut | Description |
|---|---|---|
service_type | LoadBalancer | Mode d'exposition du Service Kubernetes. |
workload_type | null | Se résout en Deployment (valeur par défaut). |
session_affinity | ClientIP | Le routage persistant maintient la session d'interface d'un client sur un même pod. |
enable_network_segmentation | false | Crée des ressources NetworkPolicy Kubernetes. |
termination_grace_period_seconds | 30 | Nombre de secondes d'attente après SIGTERM avant SIGKILL. |
Groupe 7 — StatefulSet
| Variable | Valeur par défaut | Description |
|---|---|---|
stateful_pvc_enabled | null | Non nécessaire — Speedtest Tracker n'a besoin d'aucun stockage en mode bloc par pod. |
stateful_pvc_size | 10Gi | Taille de stockage du PVC par pod (s'il est activé). |
stateful_pvc_mount_path | /data | Chemin de montage du PVC dans le conteneur. |
stateful_pvc_storage_class | standard-rwo | StorageClass Kubernetes des PVC. |
Groupe 8 — Quota de ressources
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_resource_quota | false | Applique un ResourceQuota à l'espace de noms. |
quota_cpu_requests / quota_cpu_limits | "" | Quota de CPU. |
quota_memory_requests / quota_memory_limits | "" | Quota de mémoire — utilisez des unités binaires (4Gi, 8192Mi). |
quota_max_pods / quota_max_services / quota_max_pvcs | "" | Quotas sur le nombre d'objets. |
Groupe 9 — Fiabilité
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_pod_disruption_budget | false | Protège la disponibilité pendant les mises à niveau des nœuds. |
pdb_min_available | 1 | Nombre minimal de pods disponibles lors des interruptions volontaires. |
enable_topology_spread / topology_spread_strict | false | Répartit les pods entre les zones. |
Groupe 10 — Observabilité et santé
| Variable | Valeur par défaut | Description |
|---|---|---|
startup_probe | TCP, chemin /api/healthcheck, 30s | Sonde de démarrage (contrôle d'écoute du port). |
liveness_probe | HTTP /api/healthcheck, délai de 300s | Sonde de vivacité sur le point de terminaison de santé non authentifié de Speedtest Tracker. |
startup_probe_config / health_check_config | Sondes au niveau d'App_GKE | Sondes au niveau de l'infrastructure. |
uptime_check_config | désactivé | Test de disponibilité Cloud Monitoring facultatif. |
alert_policies | [] | Règles d'alerte facultatives sur les métriques. |
Groupe 11 — Jobs et tâches planifiées
| Variable | Valeur par défaut | Description |
|---|---|---|
initialization_jobs | [] | Laissez vide pour utiliser le job db-init intégré. |
cron_jobs | [] | Pour des tâches de maintenance sans rapport — la planification des tests de débit de Speedtest Tracker s'exécute dans le processus via SPEEDTEST_SCHEDULE. |
additional_services | [] | Services sidecar ou auxiliaires déployés aux côtés de Speedtest Tracker. |
Groupe 12 — CI/CD et Binary Authorization
Intégration standard Cloud Build / Cloud Deploy 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 — Système de fichiers (NFS)
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_nfs | false | Non requis par défaut — tout l'état réside dans Cloud SQL. |
nfs_mount_path | /config | Chemin de montage si NFS est activé (par ex. pour des certificats personnalisés). |
nfs_volume_name | nfs-data-volume | Nom du volume Kubernetes pour le montage NFS. |
nfs_instance_name / nfs_instance_base_name | "" / app-nfs | Découverte/nommage du serveur NFS. |
Groupe 14 — Cloud Storage et Artifact Registry
| Variable | Valeur par défaut | Description |
|---|---|---|
create_cloud_storage | true | Crée les buckets déclarés dans storage_buckets (vide par défaut). |
storage_buckets | [] | Buckets GCS à provisionner. Non nécessaires par défaut. |
gcs_volumes | [] | Montages de volumes GCS Fuse via le pilote CSI. |
manage_storage_kms_iam / enable_artifact_registry_cmek | false | Options CMEK. |
max_images_to_retain | 7 | Nombre maximal d'images récentes Artifact Registry à conserver. |
delete_untagged_images | true | Supprime automatiquement les images sans étiquette. |
image_retention_days | 30 | Nombre de jours au-delà duquel les images peuvent être supprimées. |
Groupe 15 — Cache et sessions Redis
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_redis | false | Injecte REDIS_HOST/REDIS_PORT afin que Speedtest Tracker puisse utiliser Redis pour le cache et les sessions. Non requis par défaut. |
redis_host | "" | Point de terminaison Redis. Laissez vide pour utiliser l'adresse IP du serveur NFS (nécessite enable_nfs = true). |
redis_port | 6379 | Port Redis. |
redis_auth | "" | Mot de passe d'authentification Redis facultatif (sensible). |
Groupe 16 — Backend de base de données
| Variable | Valeur par défaut | Description |
|---|---|---|
database_type | null → MYSQL_8_0 | Fixe — Speedtest Tracker requiert MySQL 8.0 dans ce module. |
application_database_name | speedtesttracker | Nom de la base de données MySQL (préfixé par le tenant). Immuable après le premier déploiement. |
application_database_user | speedtesttracker | Utilisateur de base de données de l'application (préfixé par le tenant). Immuable après le premier déploiement. |
database_password_length | 32 | Longueur du mot de passe généré. |
enable_auto_password_rotation | false | Rotation du mot de passe de la base de données sans interruption de service. |
rotation_propagation_delay_sec | 90 | Nombre de secondes d'attente après la rotation avant le redémarrage progressif des pods. |
Groupe 17 — Sauvegarde et maintenance
| Variable | Valeur par défaut | Description |
|---|---|---|
backup_schedule | 0 2 * * * | Cron des sauvegardes automatisées (UTC). |
backup_retention_days | 7 | Rétention ; à porter à 30–90 pour la production/la conformité. |
enable_backup_import / backup_source / backup_file / backup_format | options de restauration | Restaure à 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. Voir App_GKE.
Groupe 19 — Domaine personnalisé, IP statique et réseau
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_custom_domain | true | Provisionne un Ingress pour les noms d'hôte personnalisés + un certificat géré. |
application_domains | [] | Noms d'hôte à servir. |
reserve_static_ip | true | Adresse IP externe stable d'un redéploiement à l'autre. |
network_tags | ["nfsserver"] | Tags réseau des nœuds/pods (pertinents uniquement si enable_nfs = true). |
Groupe 20 — Identity-Aware Proxy (IAP)
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_iap | false | Exige une connexion Google devant Speedtest Tracker. |
iap_authorized_users / iap_authorized_groups | [] | Personnes autorisées à accéder. |
iap_oauth_client_id / iap_oauth_client_secret | "" | Obligatoires lorsque IAP est activé (sensibles). |
Groupe 21 — Cloud Armor
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_cloud_armor | false | Associe une règle Cloud Armor (WAF) au backend de l'Ingress. |
admin_ip_ranges | [] | CIDR autorisés à un accès privilégié. |
cloud_armor_policy_name | default-waf-policy | Nom de la règle. |
enable_cdn | false | Active Cloud CDN sur le backend de l'Ingress GKE. |
Groupe 22 — VPC Service Controls et journalisation d'audit
| Variable | Valeur par défaut | Description |
|---|---|---|
enable_vpc_sc | false | Applique un périmètre VPC-SC (nécessite organization_id). |
vpc_cidr_ranges / vpc_sc_dry_run | (définis) | CIDR du niveau d'accès / mode simulation (dry-run). |
enable_audit_logging | false | Journaux Cloud Audit Logs détaillés. |
5. Sorties
Ces valeurs sont renvoyées à l'issue 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.
| Sortie | Description |
|---|---|
service_name | Nom du Service Kubernetes. |
namespace | Espace de noms dans lequel s'exécute la charge de travail. |
service_cluster_ip | ClusterIP interne au cluster. |
stage_service_cluster_ips | Association des ClusterIP des services propres à chaque étape. |
service_external_ip | Adresse IP externe du LoadBalancer (lorsqu'une adresse IP statique est réservée). |
service_url | URL permettant d'accéder à Speedtest Tracker. |
database_instance_name | Nom de l'instance Cloud SQL. |
database_name | Nom de la base de données de l'application. |
database_user | Utilisateur de la base de données de l'application. |
database_password_secret | Secret Secret Manager contenant le mot de passe de la base de données. |
database_host / database_port | Point de terminaison de la base de données (127.0.0.1 via l'Auth Proxy) / port. |
storage_buckets | Buckets Cloud Storage créés (vide par défaut). |
network_name / network_exists / regions | Réseau VPC, présence, régions disponibles. |
container_image / container_registry | Image déployée et dépôt Artifact Registry. |
monitoring_enabled / monitoring_notification_channels | État de la surveillance et canaux. |
initialization_jobs / db_import_job | Noms des jobs de configuration et d'import (facultatif). |
deployment_id / tenant_id / resource_prefix | Identifiants de nommage. |
project_id / project_number | Identifiants du projet. |
cicd_enabled / cicd_configuration | État et détails du CI/CD (dépôt, déclencheur, registre). |
github_repository_url / github_repository_owner / github_repository_name | Détails GitHub du CI/CD. |
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_id | Registre et déclencheur de build. |
kubernetes_ready | Indique si le cluster/la charge de travail est prêt. |
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 héritée au moment du plan. Ce module transmet sa configuration au moteur du socle App_GKE, qui valide les valeurs et leurs combinaisons au moment du plan — un réplica en lecture sans son instance principale, IAP sans identités autorisées, un environnement d'exécution
gen1avec des montages NFS/GCS, undatabase_typequi ne correspond pas au moteur requis par Speedtest Tracker, unredis_port/backup_retention_dayshors plage. Ce module vérifie en outre quemax_instance_count <= 1dès quespeedtest_scheduleest défini. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource.
| Paramètre | Valeur judicieuse | Risque | Conséquence en cas d'erreur |
|---|---|---|---|
APP_KEY (généré automatiquement) | Ne jamais effectuer de rotation après le premier démarrage | Critique | Sa rotation rend toutes les valeurs chiffrées de la base de données définitivement indéchiffrables. |
application_database_name / application_database_user | Définis une seule fois | Critique | Immuables après le premier déploiement ; les renommer recrée la base de données/l'utilisateur et détruit toutes les données. |
enable_backup_import | false sauf en cas de restauration | Critique | L'activer sans backup_uri valide fait échouer le job d'import. |
database_type | MYSQL_8_0 | Critique | Speedtest Tracker requiert MySQL dans ce module ; tout autre moteur empêche le démarrage. |
quota_memory_requests / _limits | unités binaires (4Gi, 8192Mi) | Critique | Des entiers sans unité sont interprétés en octets et bloquent la planification de tous les pods de l'espace de noms. |
max_instance_count | 1 | Élevé | Dépasser 1 avec un speedtest_schedule actif risque de déclencher des tests de débit en double au même déclenchement de la planification — le planificateur Laravel ne dispose d'aucun verrouillage entre pods. |
memory_limit | 1Gi | Élevé | Des valeurs inférieures exposent à des arrêts OOM pendant les migrations ou en cas d'utilisation simultanée du tableau de bord. |
enable_cloudsql_volume | true | Élevé | Le sidecar Auth Proxy est requis pour la connectivité MySQL sur GKE ; sa désactivation est bloquée par une validation au moment du plan. |
min_instance_count | 1 | Élevé | GKE exige un minimum ≥ 1 ; conserver 1 maintient également le planificateur cron en fonctionnement continu. |
Chemin de liveness_probe | /api/healthcheck (par défaut) | Moyen | Pointer la sonde vers tout autre chemin ne renvoie jamais un état sain — /api/healthcheck est le point de terminaison de santé JSON non authentifié de Speedtest Tracker. |
enable_iap | uniquement lorsque les lecteurs doivent s'authentifier | Élevé | IAP bloque tout accès anonyme. |
backup_retention_days | 7 (à augmenter en production) | Moyen | Trop court pour une rétention réglementaire. |
Pour le comportement du socle évoqué tout au long de cette page — 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 applicative propre à Speedtest Tracker partagée avec la variante Cloud Run est décrite dans SpeedtestTracker_Common.
Guides associés
- Lab pratique : Speedtest Tracker sur GKE Autopilot — déployez-le pas à pas, avec les écrans de la console et les commandes à chaque étape.
- Speedtest Tracker sur Google Cloud Run — la même application sur Cloud Run, lorsque vous avez besoin de l'autre cible de déploiement.
- Speedtest Tracker Common — Configuration applicative partagée — la configuration partagée par les deux cibles de déploiement.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.