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 (tel que 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
- Dans la barre d'état, cliquez sur
Cloud Code, puis sur Déboguer sur Kubernetes.
- Si votre application ne dispose pas de la configuration Skaffold ou de la configuration de lancement
cloudcode.kubernetes
nécessaire, Cloud Code vous aide à les définir. - Confirmez que vous souhaitez utiliser le contexte Kubernetes actuel pour exécuter l'application (ou basculez vers le contexte de votre choix).
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 que vous disposez d'au moins un dépôt Artifact Registry, 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 d'être 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.
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.Cloud Code associe une session de débogage à chaque conteneur débogable de 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.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.
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.
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 "Sessions de développement", mettez en veille l'action d'exécution, puis cliquez sur
Recompiler et redéployer l'application.
Pour mettre fin à la session de débogage, cliquez sur
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. - Conservation des 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
.
Associer un débogueur à un pod Kubernetes
Cloud Code pour Cloud Shell permet d'associer un débogueur à un pod Kubernetes pour Node.js, Python, Go, Java et .NET. Il vous suffit de disposer d'un conteneur pouvant être débogué et d'une configuration associée de type cloudcode.kubernetes
.
Pour en savoir plus sur les différences entre l'association à un pod Kubernetes et le débogage d'une application Kubernetes, consultez la section Associer à un pod Kubernetes vs déboguer une application Kubernetes.
Configurer votre conteneur
Pour préparer votre conteneur au débogage, suivez les instructions relatives au langage que vous utilisez :
Node.js
- Démarrez l'application Node.js avec
--inspect=<debugPort>
, oùdebugPort
provient de la configuration de l'association. Par exemple,CMD ["node", "--inspect=9229", "index.js"]
.
Python
- Assurez-vous que le module
ptvsd
est installé sur votre ordinateur et dans votre conteneur. - Démarrez l'application Python via
ptvsd
. Faites correspondre le port spécifié avec le champdebugPort
de la configuration de l'association. Exemple :CMD ["python", "-m", "ptvsd", "--port", "
", "app.py"]
Go
- Assurez-vous que le package
dlv
est installé sur votre machine et votre conteneur Go. Démarrez votre application Go via
dlv debug
.Le port spécifié dans la commande de démarrage doit être identique à la valeur de l'attribut
debugPort
dans la configuration de l'association. Exemple :CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
Conseil de dépannage : Lors du débogage d'une application Go, celle-ci s'arrête et attend la liaison à un débogueur. Rattachez un débogueur pour que le service démarre.
Java
- Assurez-vous que JVM est installé sur votre ordinateur.
Démarrez l'application Java avec les options suivantes, où
debugPort
provient de la configuration de rattachement.-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=
,quiet=y Par exemple, pour démarrer l'application Java en mode débogage et écouter le port
debugPort
pour la connexion:ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
.NET Core
Assurez-vous que
vsdbg
, le débogueur de ligne de commande .NET Core de Microsoft, est installé sur votre conteneur Kubernetes.Exemple :
RUN apt-get update
&& apt-get install -y --no-install-recommends unzip
&& apt-get install -y procps
&& rm -rf /var/lib/apt/lists/*
&& curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /dbg/netcore/vsdbg
Définir la configuration de vos rattachements
Pour vous rattacher à un conteneur débogable, vous devez disposer d'une configuration de rattachement de type cloudcode.kubernetes
.
Ajouter un fichier .vscode/launch.json
Si votre dossier .vscode
ne contient pas de fichier launch.json
, vous pouvez en ajouter un à l'aide du panneau de débogage.
Pour accéder au panneau "Débogage", cliquez sur
Débogage dans la barre Activité.
Sélectionnez Ajouter une configuration dans le menu déroulant.
Sélectionnez l'environnement Cloud Code: Kubernetes.
Sélectionnez l'option Attach to Kubernetes Pod (Associer au pod Kubernetes).
Sélectionnez le langage de programmation que vous utilisez.
Cela a pour effet de créer et d'ouvrir un fichier
launch.json
pour votre projet, puis de créer une configuration de rattachement pour vous.Mettez à jour les attributs de configuration du fichier
launch.json
pour qu'ils correspondent à ceux de votre projet. Pour en savoir plus sur les attributs de configuration, consultez la page Attributs de configuration.
Ajouter une configuration de rattachement à votre fichier .vscode/launch.json
Pour ajouter une configuration de rattachement à un fichier .vscode/launch.json
existant:
- Ouvrez le fichier
launch.json
. - Pour appeler l'extrait Intellisense, cliquez sur Add Configuration (Ajouter une configuration).
- Pour ajouter une configuration de liaison, sélectionnez l'extrait Cloud Code: Associer au pod Kubernetes pour le langage que vous utilisez.
- Mettez à jour les attributs de la configuration pour qu'ils correspondent à ceux de votre projet. Pour en savoir plus sur les attributs de configuration, consultez la page Attributs de configuration.
Attributs de configuration
Attribut | Description |
---|---|
debugPort | Port de débogage utilisé sur le conteneur. |
podSelector | Ensemble de paires clé-valeur utilisées pour sélectionner le pod de débogage. Pour en savoir plus, consultez le guide sur les sélecteurs.
L'exemple suivant présente un "podSelector" type:
|
local-racine | Chemin du répertoire local contenant le programme en cours de débogage. La valeur par défaut est "${workspaceFolder}". |
remoteRoot | Chemin absolu du répertoire distant contenant le programme en cours de débogage (sur le conteneur Kubernetes). |
Associer un débogueur à votre pod Kubernetes
Une fois la configuration et le conteneur définis:
- Pour accéder au panneau "Débogage", cliquez sur
Débogage dans la barre Activité.
Sélectionnez et lancez la configuration en appuyant sur
F5
.localhost:${debugPort}
est transféré versdebugPort
sur le conteneur lors du débogage.
La session de débogage est maintenant correctement configurée. Vous pouvez effectuer les tâches habituelles, comme définir des points d'arrêt et parcourir le code.
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.
Pour mettre fin à la session de débogage, cliquez sur
Arrêter dans la barre d'outils de débogage.
Associer un débogueur à un pod ou déboguer une application Kubernetes
Associer à un pod Kubernetes | Déboguer une application Kubernetes |
---|---|
Débogue un pod Kubernetes unique. | Débogue tous les conteneurs débogables de l'application. |
L'application doit s'exécuter dans le pod Kubernetes avant le débogage. | Il exécute l'application sur le cluster Kubernetes et associe le débogueur. |
Utilise le fichier configuration (.vscode/launch.json) de type "cloudcode.kubernetes" et demande "attach". | Utilise la configuration (.vscode/launch.json) de type "cloudcode.kubernetes" et la requête "launch". Pour en savoir plus, consultez la section Configurations de lancement et configurations de rattachement. |
Exemple de configuration:
{ "name": "Attach to Kubernetes Pod (NodeJS)", "type": "cloudcode.kubernetes", "request": "attach", "language": "Node", "debugPort": 9229, "podSelector": { "app": "hello-world" }, "localRoot": "${workspaceFolder}", "remoteRoot": "/app" } |
Exemple de configuration:
{ "name": "Run/Debug on Kubernetes", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}/skaffold.yaml", "watch": true, "cleanUp": true, "portForward": true } |
Cette configuration ne peut pas être utilisée pour exécuter l'application. | Cette configuration peut être utilisée pour exécuter ou déboguer l'application. |
Cette configuration est spécifique à chaque langage. | Cette configuration est indépendante du langage. |
Aucune commande dédiée. | Commande Debug on Kubernetes (Déboguer sur Kubernetes). |
Étapes suivantes
- Utilisez la synchronisation de fichiers et l'actualisation à chaud pour accélérer le développement.
- Configurez un environnement de développement continu dans Cloud Code.
- Affichez les journaux Kubernetes dans Cloud Code.