Déboguer des applications Kubernetes avec Cloud Code for VS Code

Cloud Code vous permet de déboguer une application déployée sur un cluster Google Kubernetes Engine (GKE) en utilisant skaffold debug.

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

Grâce à l'assistance au débogage de Cloud Code, vous n'avez pas besoin de suivre configuration manuelle, comme la mise en place d'un transfert de port ou l'injection d'une requête spécifique à un langage les arguments de débogage. Le débogage nécessite Application GKE incluant un skaffold.yaml de configuration et une configuration de lancement cloudcode.kubernetes.

Déboguer une application GKE

Pour commencer à déboguer votre application GKE, procédez comme suit :

  1. Dans la barre d'état Cloud Code, cliquez sur le nom du projet actif.

    Nom du projet actif dans la barre d'état

  2. Dans le menu de sélection rapide qui s'affiche, sélectionnez Déboguer sur Kubernetes.

  3. Si vous y êtes invité, authentifiez vos identifiants pour exécuter et déboguer une application localement.

  4. Si votre application ne dispose pas de la configuration Skaffold ou de la configuration de lancement cloudcode.kubernetes nécessaires, Cloud Code vous aidera à les configurer.

  5. Confirmez que vous souhaitez utiliser le contexte Kubernetes actuel pour exécuter l'application (ou basculez vers le contexte de votre choix).

  6. Si vous avez choisi un cluster distant comme contexte, choisissez une image lorsque vous y êtes invité vers lequel transférer les images. Si vous utilisez Container Registry, vous pouvez accédez à un registre existant ou spécifiez le nom du registre à créer. Si l'API Artifact Registry est activée dans votre projet et qu'il contient au moins un dépôt Artifact Registry, vous pouvez accéder à un dépôt Artifact Registry existant et le sélectionner.

    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/{project_id}/{repo-name}
    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é.
    AWS Container Repository (ECR) {aws_account_id}.dkr.ecr.{region}.amazonaws.com/{my-app}
    Azure Container Registry (ACR) {my_acr_name}.azurecr.io/{my-app}

    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.

  7. 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 joint une session de débogage pour chaque élément 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, lorsque vous enregistrez une modification apportée à votre application, 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.

  8. 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.

  9. 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'une application spécifique déploiement à 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.
  10. Si vous avez désactivé le mode montre dans votre configuration de lancement et que vous souhaitez modifier l'application, puis la recompiler et la redéployer, Dans le volet "Sessions de développement", mettez en pause l'action d'exécution, puis cliquez sur Icône Recréer et redéployer Recompilez et redéployez l'application.

  11. 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, automatiquement gère les détails de configuration suivants pour toutes les langues disponibles:

  • 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 est composée de plusieurs conteneurs débogables (dont le langage est compatible avec le débogage Cloud Code) configurés au format skaffold.yaml, un débogueur est alors associé à chacun des conteneurs débogables.
  • Conserver les définitions de mappage source entre les sessions vous pouvez les personnaliser 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.

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 rattachement. Par exemple, CMD ["node", "--inspect=9229", "index.js"].

Python

  • Assurez-vous de disposer du Module ptvsd installé sur votre machine et dans votre conteneur.
  • Démarrez l'application Python via ptvsd. Correspond au port spécifié le champ debugPort dans associer la configuration. Exemple :
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]

Go

  • Assurez-vous de disposer du Package dlv 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 le même que Valeur de l'attribut debugPort dans associer la configuration. 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 la JVM est installée 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 lancer 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 votre configuration d'association

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 projet ne contient pas de fichier launch.json dans le dossier .vscode, vous pouvez en ajouter un à l'aide du panneau "Débogage".

  1. Pour accéder au panneau de débogage, cliquez sur Icône de débogage Exécuter et déboguer dans la barre "Activité".

  2. Sélectionnez Ajouter une configuration dans le menu déroulant.

  3. Sélectionnez l'environnement Cloud Code: Kubernetes.

    Définir Cloud Code : Kubernetes comme environnement

  4. Sélectionnez l'option Attach to Kubernetes Pod (Associer au pod Kubernetes).

    Sélectionnez l&#39;option de configuration Kubernetes.

  5. 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.

  6. Mettez à jour les attributs de configuration dans le fichier launch.json pour qu'ils correspondent à ceux de votre projet. Pour en savoir plus sur les attributs de configuration, consultez Attributs de configuration.

Ajouter une configuration d'association à votre fichier .vscode/launch.json

Pour ajouter une configuration d'association à un fichier .vscode/launch.json existant:

  1. Ouvrez le fichier launch.json.
  2. Pour appeler l'extrait de code Intellisense, cliquez sur Add Configuration (Ajouter une configuration).
  3. Pour ajouter une configuration d'association, sélectionnez l'extrait Cloud Code : associer à un pod Kubernetes pour la langue que vous utilisez.
  4. 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 Attributs de configuration.

Attributs de configuration

Attribut Description
debugPort Port de débogage utilisé sur le conteneur.
podSelector Ensemble de paires clé/valeur utilisé pour sélectionner le pod de débogage. Pour en savoir plus, consultez le guide sur les sélecteurs. L'exemple suivant montre un podSelector type:

"podSelector": { "app": <deployment-name> }
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

Cloud Code pour VS Code permet de rattacher un débogueur à un pod Kubernetes pour Node.js, Python, Go, Java et .NET. Vous avez seulement besoin d'un conteneur débogable et d'une configuration de rattachement 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 Différences entre l'association d'un débogueur à un pod et le débogage d'une application Kubernetes.

Pour associer un débogueur à votre pod Kubernetes, procédez comme suit :

  1. Pour accéder au panneau de débogage, cliquez sur Icône de débogage Exécuter et déboguer dans la barre "Activité".
  2. Sélectionnez et lancez la configuration en appuyant sur F5.

    • localhost:${debugPort} est transféré vers debugPort sur le port le conteneur pendant le débogage.

    La session de débogage est maintenant correctement configurée. Vous pouvez effectuer les tâches comme vous le faites habituellement lors du débogage du code local, par exemple en définissant des points d'arrêt et pas à pas dans le code.

  3. 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.

  4. 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.

Différences entre l'association d'un débogueur à un pod et le débogage d'une application Kubernetes

Associer à un pod Kubernetes Déboguer une application Kubernetes
Débogue un seul pod Kubernetes Débogue tous les conteneurs débogables dans l'application
L'application doit s'exécuter dans le pod Kubernetes avant le débogage. Exécute l'application sur le cluster Kubernetes et rattache le débogueur.
Utilise la configuration (.vscode/launch.json) de type cloudcode.kubernetes et la requête attach. Utilise une configuration (.vscode/launch.json) de type cloudcode.kubernetes et demande 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 au langage. Cette configuration n'est pas spécifique à une langue.
Aucune commande dédiée. Commande Debug on Kubernetes (Déboguer sur Kubernetes).
Le mode de surveillance n'est pas disponible. Par conséquent, après avoir effectué des modifications, vous devez redémarrer le débogueur manuellement. Le mode de surveillance permet à Cloud Code de redémarrer le débogueur après l'enregistrement des modifications.

Étape suivante

Obtenir de l'aide

Pour envoyer vos commentaires, signalez tout problème sur GitHub ou posez une question sur Stack Overflow.