Déboguer une application Kubernetes

Cloud Code vous permet de déboguer facilement une application déployée sur un cluster Kubernetes à l'aide de skaffold debug. Vous pouvez déboguer votre application sur un cluster local (tel que Minikube ou Docker Desktop), sur Google Kubernetes Engine (GKE) ou sur tout autre fournisseur cloud.

Vous n'avez pas besoin d'effectuer une configuration manuelle, comme configurer un transfert de port ou injecter des arguments de débogage spécifiques à un langage. Vous avez simplement besoin d'une application Kubernetes prête pour Cloud Code, qui inclut un fichier de configuration skaffold.yaml et une configuration de lancement cloudcode.kubernetes.

Déboguer une application

  1. Dans la barre d'état de Cloud Code, sélectionnez la commande Débogage sur Kubernetes.
  2. Si votre application ne dispose pas de la configuration Skaffold requise ni de la configuration de lancement cloudcode.kubernetes, Cloud Code vous aide à les configurer.
  3. Vérifiez si vous utilisez le contexte Kubernetes actuel pour exécuter l'application (ou changez de version).
  4. Si vous avez choisi un cluster distant en tant que contexte, vous êtes invité à fournir un registre d'images dans lequel transférer les images.

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

    Docker Hub docker.io/{account}
    Si vous utilisez un dépôt Docker Hub privé, assurez-vous d'être correctement authentifié.
    Google Container Repository (GCR) gcr.io/{project_id}
    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 de dépôt de l'image finale, 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 la configuration de lancement cloudcode.kubernetes (disponible dans le fichier .vscode/launch.json).

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

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

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

    Transfert des ports et affichage des URL dans la fenêtre de sortie

  5. Pour chaque conteneur pouvant être débogué dans votre application, confirmez ou saisissez le répertoire dans le conteneur distant où se trouve le programme que vous souhaitez déboguer.

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

    Invite de racine distante

    Cloud Code associe une session de débogage pour chaque conteneur pouvant être débogué dans l'application.

    Vous pouvez désormais effectuer les mêmes tâches que lorsque vous déboguez du code local, comme définir des points d'arrêt et accéder au code d'un cluster Kubernetes actif.

    Par défaut, lorsque vous enregistrez une modification apportée à votre application, Cloud Code redéploie votre 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.

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

  7. Une fois votre session terminée, d'autres options de menu contextuel sont disponibles pour surveiller votre application et ses ressources à l'aide de la barre d'état Cloud Code, y compris:

    • Ouvrir les journaux de déploiement:ouvrez les journaux d'application d'un déploiement spécifique à l'aide de la visionneuse de journaux Cloud Code.
    • URL ouverte du service:ouvrez l'URL du service d'application d'un service spécifique dans un navigateur Web.
    • Activer/Désactiver le mode de lecture:activez ou désactivez le mode de lecture pour la session en cours. Par défaut, Cloud Code surveille en permanence le système de fichiers pour détecter les modifications apportées à vos fichiers, telles que la configuration ou le code Kubernetes, reconstruit des conteneurs, et redéploie l'application sur le cluster afin que votre 101}les modifications sont appliquées quasiment en temps réel.

      Options disponibles à l'aide de la barre d'état Cloud Code: en plus des actions standards de Cloud Code, ouvrez les journaux de déploiement, ouvrez l'URL du service et du mode Lecture,

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

    Arrêter de déboguer l'application Kubernetes

Détails de la configuration

Fourni par Skaffold, Cloud Code 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 pouvant être débogués (conteneurs dont le langage est compatible avec le débogage Cloud Code) configuré dans le fichier skaffold.yaml, un débogueur est associé à chaque conteneur pouvant être débogué.
  • Conservation des définitions de mappage source pour plusieurs sessions. Vous pouvez personnaliser ces définitions en modifiant directement le fichier .vscode/launch.json.

Cloud Code gère également les détails de configuration spécifiques aux langages 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

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

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

Java

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

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

Pour en savoir plus sur le débogage optimisé par Skaffold, consultez la documentation de 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 effectuer une comparaison, consultez la section Associer un pod Kubernetes à un débogage Kubernetes.

Assistance

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