Aller au contenu principal

CloudBeaver sur GKE Autopilot

CloudBeaver sur GKE Autopilot

CloudBeaver est un gestionnaire de bases de données web, accessible depuis un navigateur, issu du projet DBeaver — une console d'administration unique pour se connecter à PostgreSQL, MySQL, SQL Server, Oracle, SQLite et de nombreux autres moteurs, et les interroger. Ce module déploie CloudBeaver 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 CloudBeaver 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​

CloudBeaver s'exécute sous la forme d'une unique charge de travail web JVM. Comme CloudBeaver conserve tout son état dans un espace de travail persistant et ne provisionne aucune base de données applicative, le déploiement assemble un ensemble volontairement restreint de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotUn seul pod JVM, 1 vCPU / 1 GiB par défaut, port 8978
Espace de travail persistantPersistent Disk (PVC en mode bloc) via StatefulSetRecommandé : un PVC en mode bloc par pod, monté sur /opt/cloudbeaver/workspace, héberge le magasin H2 intégré
Base de donnéesAucune provisionnéedatabase_type = "NONE" — CloudBeaver stocke son propre état ; il se connecte aux bases de données que vous configurez dans l'interface
Cache et file d'attenteAucunCloudBeaver n'utilise pas Redis ; enable_redis est forcé à désactivé
SecretsSecret ManagerAucun secret applicatif n'est généré — le compte administrateur est créé via l'assistant de configuration au premier lancement
EntréeCloud Load BalancingClusterIP par défaut (interne au cluster) ; utilisez LoadBalancer / un domaine personnalisé pour un accès externe

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

  • Aucune base de données applicative n'est provisionnée. database_type = "NONE". CloudBeaver conserve ses métadonnées dans un magasin H2 intégré à l'intérieur du volume de l'espace de travail. Les bases de données qu'il gère sont ajoutées par un opérateur dans l'interface après le déploiement.
  • Utilisez un PVC en mode bloc pour l'espace de travail, pas GCS FUSE. stateful_pvc_enabled = true est vivement recommandé : un Persistent Disk en mode bloc — et non GCS FUSE — est le stockage adapté pour la base H2 intégrée de CloudBeaver. Lorsque le PVC est activé, le module ignore automatiquement le volume GCS FUSE sur le même chemin pour éviter un double montage.
  • Le StatefulSet est sélectionné automatiquement. Définir stateful_pvc_enabled = true sans workload_type explicite résout la charge de travail en StatefulSet, pour une identité de pod stable et des redémarrages ordonnés.
  • Une seule instance par conception. min_instance_count = 1 (évite les démarrages à froid lents de la JVM, et GKE ne permet pas la mise à l'échelle à zéro) et max_instance_count = 1 (l'espace de travail est un magasin à écrivain unique). N'augmentez pas max_instance_count.
  • Le Service est de type ClusterIP par défaut. Interne au cluster uniquement — ce qui convient à une console d'administration de bases de données. Pour un accès depuis un navigateur extérieur au cluster, utilisez service_type = "LoadBalancer" ou un Ingress avec un domaine personnalisé (et IAP).
  • Le compte administrateur revient au premier visiteur. CloudBeaver n'a pas d'administrateur préconfiguré — terminez l'assistant de configuration immédiatement dès que le service est accessible.

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 CloudBeaver​

Les pods CloudBeaver sont planifiés sur Autopilot, qui facture le CPU et la mémoire que les pods demandent réellement. Lorsqu'un PVC en mode bloc est activé, la charge de travail s'exécute en tant que StatefulSet (port 8978) pour une identité de pod stable. Comme l'espace de travail est à écrivain unique, maintenez la charge de travail à un seul réplica.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail CloudBeaver pour voir les pods et les événements. Kubernetes Engine → Services & Ingress montre comment elle est exposée.
  • CLI :
    kubectl get pods,svc,statefulset -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" statefulset/<service-name> --tail=100
    kubectl describe statefulset -n "$NAMESPACE"

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

B. Persistent Disk — le volume de l'espace de travail (PVC en mode bloc)​

L'intégralité de l'état de CloudBeaver — sa base de métadonnées H2 intégrée, les connexions enregistrées, les utilisateurs et la configuration — persiste sous /opt/cloudbeaver/workspace. Le stockage recommandé est un Persistent Disk en mode bloc provisionné pour chaque pod par le modèle de PVC du StatefulSet et monté sur ce chemin. C'est le cœur durable du déploiement et le stockage adapté à la base H2 intégrée.

  • Console : Kubernetes Engine → Storage → Persistent Volume Claims.
  • CLI :
    kubectl get pvc -n "$NAMESPACE"
    kubectl describe pvc -n "$NAMESPACE"
    # Inspect the workspace contents inside the pod:
    kubectl exec -n "$NAMESPACE" statefulset/<service-name> -- ls -la /opt/cloudbeaver/workspace

Lorsque stateful_pvc_enabled = true, le module définit enable_gcs_storage_volume = false afin que le volume GCS FUSE ne soit pas également monté sur le même chemin. Un bucket Cloud Storage storage est néanmoins déclaré par CloudBeaver_Common par souci de parité avec la variante Cloud Run.

C. Cloud Storage​

Un bucket Cloud Storage storage est déclaré pour le déploiement. Avec la configuration recommandée en PVC en mode bloc, l'espace de travail réside sur le Persistent Disk plutôt que dans le bucket, mais celui-ci est tout de même provisionné et disponible pour un stockage auxiliaire.

  • Console : Cloud Storage → Buckets.
  • CLI :
    gcloud storage buckets list --project "$PROJECT"

Consultez App_GKE pour les options CMEK et les montages GCS Fuse.

D. Connectivité aux bases de données (aucune instance gérée)​

Ce module ne provisionne aucune instance Cloud SQL — gcloud sql instances list n'en affichera aucune créée par CloudBeaver. CloudBeaver se connecte plutôt aux bases de données que vous enregistrez dans son interface. Pour atteindre le Cloud SQL partagé du déploiement (ou toute base de données privée), la cible doit être accessible sur le VPC depuis le pod.

  • CLI (testez l'accessibilité depuis l'intérieur du pod) :
    kubectl exec -n "$NAMESPACE" statefulset/<service-name> -- sh -c 'nc -zv <db-private-ip> 5432'

E. Secret Manager​

CloudBeaver ne génère aucun secret applicatif — il n'y a ni clé de chiffrement, ni secret JWT, ni mot de passe de base de données à gérer (il n'y a pas de base de données). Le compte administrateur est créé via l'assistant de configuration au premier lancement, et tout l'état réside dans l'espace de travail.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"

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

F. Réseau et entrée​

Par défaut, la charge de travail est exposée sous forme de Service ClusterIP — accessible uniquement depuis l'intérieur du cluster, ce qui convient à une console d'administration de bases de données. Pour un accès depuis un navigateur extérieur au cluster, utilisez service_type = "LoadBalancer" ou activez un Ingress avec un domaine personnalisé et un certificat géré par Google (éventuellement avec IAP, Cloud Armor et une IP statique réservée).

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get svc,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.

G. Cloud Logging et Monitoring​

Les sorties stdout/stderr des pods sont envoyées à Cloud Logging ; les métriques GKE sont envoyées à Cloud Monitoring. Des tests de disponibilité et des règles d'alerte facultatifs sont disponibles (les tests de disponibilité nécessitent un point de terminaison accessible publiquement, par exemple un Service LoadBalancer).

  • 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 CloudBeaver​

  • Aucune configuration de base de données au premier déploiement. Il n'y a ni job db-init ni base de données applicative. CloudBeaver initialise son propre magasin de métadonnées intégré à l'intérieur de l'espace de travail au premier démarrage.
  • L'état réside entièrement dans le volume de l'espace de travail. La base H2 intégrée, les connexions enregistrées, les utilisateurs gérés et la configuration résident tous sous /opt/cloudbeaver/workspace, adossé au PVC en mode bloc. Le PVC survit aux redémarrages et aux replanifications de pod ; c'est pourquoi un StatefulSet + un PVC en mode bloc est vivement recommandé plutôt que GCS FUSE pour le magasin H2 intégré.
  • Assistant de configuration au premier lancement. Au premier accès, CloudBeaver présente un assistant de configuration pour créer la configuration du serveur et le compte administrateur. Il n'y a pas d'administrateur préconfiguré — la première personne qui termine l'assistant devient l'administrateur. Faites-le immédiatement, et gardez le Service interne tant que ce n'est pas fait.
  • Ajouter des bases de données à gérer. Après vous être connecté en tant qu'administrateur, ajoutez des connexions dans l'interface (New Connection → choisissez le pilote → indiquez l'hôte, le port et les identifiants). Pour atteindre des bases de données privées, assurez-vous qu'elles sont accessibles sur le VPC depuis le pod.
  • Chemin de santé. Les sondes de démarrage et de vivacité ciblent / (l'interface web de CloudBeaver), qui renvoie HTTP 200 une fois que la JVM a fini de démarrer.
  • Mise à l'échelle à écrivain unique. Gardez max_instance_count = 1. Le magasin de l'espace de travail ne peut pas être partagé sans risque par des pods concurrents.
  • Inspecter la configuration en cours d'exécution :
    kubectl exec -n "$NAMESPACE" statefulset/<service-name> -- env | sort

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à CloudBeaver 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 un 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_namecloudbeaverNom de base des ressources. Ne pas modifier après le premier déploiement.
application_display_nameCloudBeaverNom lisible affiché dans la console.
application_versionlatestTag de l'image CloudBeaver (construite à partir de dbeaver/cloudbeaver:<version>) ; épinglez-le pour la reproductibilité.

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

VariableValeur par défautDescription
min_instance_count1Gardez 1 réplica à chaud (GKE ne permet pas la mise à l'échelle à zéro ; évite les démarrages à froid lents de la JVM).
max_instance_count1Gardez 1. L'espace de travail est un magasin à écrivain unique ; des pods concurrents le corrompent.
cpu_limit1000mCPU par pod.
memory_limit1GiMémoire par pod. CloudBeaver s'exécute sur la JVM — dimensionnez en conséquence.
container_port8978Fixé par CloudBeaver_Common ; non transmis à App_GKE et sans effet ici.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeClusterIPInterne au cluster par défaut (recommandé pour une console de bases de données). Utilisez LoadBalancer pour un accès externe.
workload_typenullLaissez non défini — avec stateful_pvc_enabled = true, il est résolu automatiquement en StatefulSet.
session_affinity(défini)Routage persistant pour les sessions de l'interface.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullDéfinissez true — un PVC en mode bloc (et non GCS FUSE) est le stockage adapté à la base H2 intégrée de CloudBeaver.
stateful_pvc_size20GiTaille du PVC par pod ; doit contenir l'espace de travail plus une marge.
stateful_pvc_mount_path/opt/cloudbeaver/workspaceDoit être le répertoire de l'espace de travail de CloudBeaver.
stateful_pvc_storage_class(défini)StorageClass Kubernetes du PVC.
stateful_headless_service(défini)Service headless pour des noms DNS de pod stables.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP / délai de 15sSonde de démarrage ciblant l'interface de CloudBeaver.
liveness_probeHTTP / délai de 30sSonde de vivacité ciblant l'interface de CloudBeaver.
uptime_check_config(défini)Test de disponibilité Cloud Monitoring — nécessite un point de terminaison accessible publiquement (par exemple un Service LoadBalancer).

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

VariableValeur par défautDescription
enable_nfsfalseNFS est désactivé — l'espace de travail de CloudBeaver se trouve sur le PVC en mode bloc, pas sur NFS.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne les buckets GCS déclarés.
storage_buckets[]Buckets supplémentaires à provisionner.
enable_image_mirroringtrueMet en miroir l'image CloudBeaver dans Artifact Registry avant le déploiement.

Toutes les autres entrées suivent le comportement standard d'App_GKE. Notez que enable_redis est forcé à false et qu'aucune base de données applicative n'est provisionnée (database_type = NONE) par ce module.


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.

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_ipsTable des ClusterIP des services propres à chaque étape.
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée / que LoadBalancer est utilisé).
service_urlURL permettant d'accéder à CloudBeaver.
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 d'initialisation (vide par défaut).
statefulset_nameNom du StatefulSet.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants 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_nameDétails GitHub du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique 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 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).

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 — workload_type = "Deployment" associé à stateful_pvc_enabled = true, des quota_memory_requests/_limits sans suffixe d'unité binaire, IAP sans identités autorisées. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'apply ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
stateful_pvc_enabledtrue (PVC en mode bloc)CritiqueSans PVC en mode bloc persistant, l'espace de travail (base H2 intégrée, connexions, utilisateurs, configuration) est perdu au redémarrage du pod. GCS FUSE n'est pas un stockage sûr pour la base H2 intégrée.
PVC de l'espace de travailÀ conserver d'un redéploiement à l'autreCritiqueLe PVC contient tout l'état de CloudBeaver ; le supprimer efface toutes les connexions et tous les paramètres enregistrés.
max_instance_count1CritiqueL'espace de travail est à écrivain unique ; deux pods écrivant simultanément dans le magasin H2 intégré le corrompent.
stateful_pvc_mount_path/opt/cloudbeaver/workspaceÉlevéLe chemin de l'espace de travail de CloudBeaver est figé dans l'image ; un montage ailleurs laisse l'état sur un stockage éphémère.
Assistant de configuration au premier lancementÀ terminer immédiatementÉlevéIl n'y a pas d'administrateur préconfiguré — quiconque atteint l'interface en premier peut s'approprier le compte administrateur.
service_typeClusterIP (ou équilibreur de charge + IAP)ÉlevéLoadBalancer sans IAP/Cloud Armor expose une console d'administration de bases de données à l'Internet public.
memory_limit1GiÉlevéCloudBeaver repose sur la JVM ; une mémoire insuffisante provoque des arrêts pour OOM.
min_instance_count1MoyenGKE exige min ≥ 1 ; un réplica à chaud évite les démarrages à froid lents de la JVM.
application_versionÉpingler un tag en productionMoyenlatest peut faire changer la version de CloudBeaver d'un build à l'autre ; épinglez-le pour la reproductibilité.
quota_memory_requests / _limitsunités binaires (4Gi, 8192Mi)CritiqueLes entiers bruts sont interprétés comme des octets et bloquent toute planification de pod dans l'espace de noms.
enable_redis / database_typeLaisser tels quels (désactivé / NONE)FaibleCloudBeaver n'utilise ni l'un ni l'autre ; les surcharger n'apporte rien et n'est pas pris en charge ici.

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 applicative propre à CloudBeaver, partagée avec la variante Cloud Run, est décrite dans CloudBeaver_Common.

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