Déboguer une application Kubernetes dans Cloud Code for Cloud Shell

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Cloud Code vous permet de déboguer facilement une application déployée sur un cluster Kubernetes en utilisant skaffold debug.

Vous pouvez déboguer votre application sur un cluster local (comme minikube ou Docker Desktop), Google Kubernetes Engine (GKE) ou tout autre fournisseur cloud.

Avec l'aide au débogage de Cloud Code, vous n'avez pas besoin d'effectuer une configuration manuelle, comme configurer le transfert de port ou injecter des arguments de débogage spécifiques à un langage. Le débogage nécessite une application Kubernetes compatible avec Cloud Code, qui inclut un fichier de configuration skaffold.yaml et une configuration de lancement cloudcode.kubernetes.

Déboguer une application

  1. Cliquez sur Barre d'état Cloud CodeCloud Code dans la barre d'état, puis sur Debug on Kubernetes (Déboguer sur Kubernetes).
  2. Si votre application ne dispose pas de la configuration Skaffold nécessaire ou de la configuration de lancement cloudcode.kubernetes, Cloud Code vous aide à les définir.
  3. Confirmez que vous souhaitez utiliser le contexte Kubernetes actuel pour exécuter l'application (ou basculez vers le contexte de votre choix).
  4. Si vous avez choisi un cluster distant comme contexte, lorsque vous y êtes invité, choisissez un registre d'images vers lequel transférer les images. Si vous utilisez Container Registry, vous pouvez accéder à un registre existant ou spécifier le nom d'un registre à créer. Si l'API Artifact Registry est activée et au moins un dépôt Artifact Registry est disponible pour votre projet, vous pouvez parcourir et sélectionner un dépôt Artifact Registry existant.

    Les exemples suivants montrent comment spécifier l'emplacement de stockage des images de conteneurs pour certains registres courants :

    Artifact Registry {region}-docker.pkg.dev/{id_projet}/{nom-dépôt}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Assurez-vous que vous êtes correctement authentifié si vous utilisez un dépôt Docker Hub privé.

    Pour générer le nom final du dépôt d'images, Cloud Code concatène ce registre d'images avec le nom d'image spécifié dans les fichiers manifestes Kubernetes. Ce choix est stocké dans votre configuration de lancement cloudcode.kubernetes (disponible dans .vscode/launch.json).

    Pour en savoir plus, consultez le guide de gestion des registres d'images.

    Cloud Code crée ensuite vos conteneurs, les transfère dans le registre, applique les configurations Kubernetes au cluster et attend le déploiement.

    Une fois le déploiement terminé, Cloud Code transfère automatiquement tous les ports de conteneur déclarés vers votre ordinateur et affiche les URL dans la fenêtre de sortie afin que vous puissiez parcourir votre application en ligne.

  5. Pour chaque conteneur débogable dans votre application, vous êtes invité à confirmer ou à saisir le répertoire du conteneur distant dans lequel se trouve le programme à déboguer.

    Vous pouvez également appuyer sur ESC pour ignorer le débogage du conteneur.

    Invite de racine distante

    Cloud Code associe une session de débogage pour chaque conteneur débogable dans l'application.

    Vous pouvez désormais effectuer les mêmes tâches que celles que vous effectuez normalement lors du débogage de code local (définition de points d'arrêt et passage en revue du code, par exemple) sur un cluster Kubernetes en service.

    Par défaut, lorsqu'une modification apportée à votre application est enregistrée automatiquement, Cloud Code redéploie l'application et configure une nouvelle session de débogage. Vous pouvez activer ou désactiver cette fonctionnalité avec l'option watch dans la configuration de lancement de votre projet.

  6. Pour inspecter les variables et les informations de pile, utilisez la barre latérale de débogage. Pour interagir avec la session de débogage, utilisez la console de débogage dans le volet inférieur du débogueur.

  7. Une fois la session terminée, vous pouvez utiliser les commandes du menu contextuel suivantes :

    • Ouvrir les journaux de déploiement : ouvrez les journaux d'application d'un déploiement spécifique à l'aide de l'explorateur de journaux Cloud Code.
    • Ouvrir une URL de service : ouvrez l'URL du service d'application d'un service spécifique dans un navigateur Web.
  8. Si vous avez désactivé le mode de surveillance dans votre configuration de lancement et que vous souhaitez modifier votre application, puis la recompiler et la redéployer, dans le volet des sessions de développement, mettez en pause l'action d'exécution, puis cliquez sur Icône Recréer et redéployerRecompiler et redéployer l'application.

  9. Pour mettre fin à la session de débogage, cliquez sur Icône de débogage Arrêter dans la barre d'outils de débogage.

    Une fois la session de débogage terminée, toutes les ressources Kubernetes déployées sont supprimées du cluster.

Détails de la configuration

Cloud Code, fourni par Skaffold, gère automatiquement les détails de configuration suivants pour tous les langages compatibles:

  • Transfert du port de débogage pour que le débogueur puisse être associé
  • Association d'un débogueur à un ou plusieurs conteneurs débogables dans votre application. Si votre application comporte plusieurs conteneurs débogables (dont le langage est compatible avec le débogage Cloud Code) configurés dans skaffold.yaml, un débogueur est associé à chaque conteneur débogable.
  • Conserver les définitions de mappage source entre les sessions. Vous pouvez personnaliser ces définitions en modifiant directement votre fichier .vscode/launch.json.

Cloud Code gère également les détails de configuration spécifiques au langage suivants :

Node.js

Réécriture du point d'entrée à appeler :

node --inspect=localhost:9229

Python

Installation du module ptvsd à l'aide d'un conteneur d'initialisation et réécriture du point d'entrée à appeler :

python -m ptvsd --host localhost --port 5678

Go

Installation du débogueur dlv à l'aide d'un conteneur init et de la réécriture du point d'entrée, de sorte que la session de débogage lancée s'exécute avec un serveur de débogage uniquement (en mode sans interface graphique), continue le processus débogué au démarrage, accepte plusieurs connexions client et écoute à l'adresse localhost:56268 :

dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

Java

Ajout d'un environnement JAVA_TOOLS_OPTIONS avec la configuration JDWP (Java Debug Wire Protocol) appropriée, de sorte que l'agent de débogage JDWP écoute une connexion de socket sur le port 5005 et permet à la VM de commencer à s'exécuter avant Debugger est associé :

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

Pour en savoir plus sur le débogage basé sur Skaffold, consultez la documentation skaffold debug.

Rattacher un débogueur à un pod Kubernetes

Cloud Code pour VS Code permet également d'associer un débogueur à un pod Kubernetes. Pour obtenir une comparaison, consultez la section Associer un pod Kubernetes et déboguer une application Kubernetes.