Rattacher un débogueur à un pod Kubernetes

Cloud Code permet d'associer 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 d'association de type cloudcode.kubernetes.

Pour découvrir en quoi la connexion à un pod Kubernetes diffère de la procédure de débogage d'une application Kubernetes, consultez la section Associer à un pod Kubernetes et déboguer une application Kubernetes.

Configurer un conteneur

Pour préparer votre conteneur au débogage, suivez les instructions correspondant 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

  • Vérifiez 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é au champ debugPort dans la configuration de rattachement. Exemple :
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • Vérifiez que le package dlv est installé sur votre ordinateur et sur 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 de la configuration de rattachement. 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 l'association d'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 d'association.

    -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

  • Vérifiez 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 /vsdbg

Configurer une configuration de rattachement

Pour associer un conteneur débogable, vous devez disposer d'une configuration d'association de type cloudcode.kubernetes.

Projets dépourvus de fichier .vscode/launch.json

Si votre projet ne contient pas de fichier launch.json dans son dossier .vscode, vous pouvez en ajouter un à l'aide du panneau Debug (Débogage).

  1. Accédez au panneau Debug (Débogage), à l'aide de l'icône de débogage Icône de débogage dans la barre des activités, et sélectionnez Add Configuration (Ajouter une configuration) dans le menu déroulant.

    Ajouter des configurations à l&#39;aide du panneau de débogage

  2. Sélectionnez Cloud Code: Kubernetes comme environnement.

    Définir Cloud Code : Kubernetes comme environnement

  3. Sélectionnez l'option Attach to Kubernetes Pod.

    Sélectionner l&#39;option de configuration Kubernetes

  4. Sélectionnez le langage de programmation correspondant.

    Sélectionner un langage de programmation préféré

    Cette opération crée et ouvre un fichier launch.json pour votre projet, et crée une configuration d'association pour vous. Vous pouvez maintenant mettre à jour les attributs de configuration de ce fichier pour qu'ils correspondent à ceux de votre projet. Pour en savoir plus sur les attributs de configuration, consultez la section Attributs de configuration.

    Configurer les attributs affichés dans un fichier launch.json

Projets comportant un fichier .vscode/launch.json

Pour ajouter une configuration de rattachement à un fichier .vscode/launch.json existant, procédez comme suit :

  1. Ouvrez le fichier launch.json.
  2. Appuyez sur le bouton Add Configuration pour appeler l'extrait de code Intellisense.
  3. Sélectionnez l'un des extraits Cloud Code: Attach to Kubernetes Pod pour le langage souhaité.
  4. Une configuration d'association sera ajoutée. Vous pouvez maintenant mettre à jour les attributs de cette configuration pour qu'ils correspondent à ceux de votre projet. Pour plus d'informations sur les attributs de configuration, reportez-vous à ce tableau.

    Ajouter une configuration de rattachement Kubernetes

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 plus d'informations, consultez le guide sur les sélecteurs). Un podSelector se présente généralement comme ceci :

"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).

Rattacher un débogueur à un pod Kubernetes

Une fois la configuration et le conteneur configurés :

  1. Ouvrez le panneau de débogage Icône de débogage.
  2. Sélectionnez et lancez la configuration à l'aide de la touche F5.
    • Lors du débogage, localhost:${debugPort} sera transféré vers debugPort sur le conteneur.
  3. La session de débogage est maintenant correctement configurée.
  4. Vous pouvez désormais effectuer toutes vos tâches habituelles de débogage de code local, telles que la définition de points d'arrêt et le passage en revue du code.
  5. 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.

    Application interrompue au niveau du point d&#39;arrêt, sections variables et pile des appels remplies avec des valeurs couvertes

  6. Pour mettre fin à la session de débogage, cliquez sur Icône de l&#39;arrêt du débogage Arrêter dans la barre d'outils de débogage.

Rattacher à un pod Kubernetes et débogage d'une application Kubernetes

Se connecter à un pod Kubernetes Déboguer une application Kubernetes
Déboguer un pod Kubernetes unique Déboguer tous les conteneurs débogables dans l'application.
L'application doit être exécutée 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 la configuration (.vscode/launch.json) de type "cloudcode.kubernetes" et la requête "launch".
Pour en savoir plus, consultez la section Déployer ou associer des configurations.
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 propre à chaque langage de programmation. Cette configuration ne dépend pas d'un langage.
Aucune commande dédiée. La commande **Debug on Kubernetes** (Déboguer avec Kubernetes).
Le mode de surveillance n'est pas disponible. Par conséquent, après avoir apporté 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.

Assistance

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