Notre équipe souhaite pouvoir exécuter le débogueur Visual Studio sur les instances déployées de notre application ASP.NET sur notre cluster Kubernetes interne. J'ai besoin de comprendre comment terminer le puzzle, mais je ne connais pas très bien Visual Studio 2019.
- L'image Docker est compilée avec les images officielles .NET Core et contient / vsdbg avec la dernière version (qui ne prend pas en charge --attach).
- Visual Studio fonctionne avec mon Docker Desktop.
- Kubectl est correctement configuré. Je peux utiliser le cluster kubernetes inclus avec Docker Desktop ou notre cluster kubernetes interne pour les tests.
- Azure n'est actuellement pas une option. Je comprends de la documentation que c'est ce que Microsoft préfère que je fasse.
Comment dois-je configurer Visual Studio pour pouvoir le faire?
c#
visual-studio
kubernetes
visual-studio-debugging
Thorbjørn Ravn Andersen
la source
la source
Réponses:
D'accord. Commençons. Assurez-vous tout d'abord que vous avez publié votre application en mode débogage! Je préfère utiliser une nouvelle construction à plusieurs étapes de la fonctionnalité Docker pour construire mes images, donc j'écrirais quelque chose comme ça à la fin d'une étape de construction dans Dockerfile:
Pour envoyer des images vers Minikube, j'utilise le registre de conteneurs local comme décrit ici. Mais vous pouvez le faire comme d'habitude. Lorsque votre conteneur est opérationnel, nous pouvons commencer à le pirater. J'utiliserai Powershell à cet effet, mais le même peut être facilement réécrit dans n'importe quelle autre langue du terminal. Vous pouvez suivre le didacticiel étape par étape et exécuter les commandes dans votre terminal une par une en vérifiant les valeurs de var avec la commande echo si nécessaire. Dans votre fichier * .yml, vous devriez avoir un sélecteur décrit quelque chose comme ceci:
Saisissez-le et utilisez pour définir une var $ Selector dans votre terminal Powershell:
Vous devez trouver un pod où votre application conteneurisée s'exécute par son sélecteur:
En supposant que vous n'avez qu'un seul conteneur sur le pod, vous pouvez maintenant exécuter des commandes sur ce conteneur. Par défaut, le conteneur n'a pas installé vsdbg, alors allez-y et installez-le:
Ensuite, vous devez trouver le PID de votre application à l'intérieur du conteneur:
Normalement, il est égal à 1 mais il vaut mieux faire moins d'hypothèses. C'est ça. Vous pouvez maintenant démarrer un débogueur:
N'oubliez pas d'exécuter les commandes suivantes avant de fermer la fenêtre, sinon votre application restera bloquée pour toujours:
Mettons tout ensemble, créons un script réutilisable et enregistrons-le quelque part près des racines car vous pouvez l'utiliser avec tous vos projets ASP.NET Core:
Vous pouvez maintenant exécuter ce script comme ceci lorsque le terminal s'exécute à partir du dossier de script:
Mais ne sommes-nous pas censés déboguer à partir de Visual Studio? Oui! Allons plus loin et lançons notre processus terminal depuis Visual Studio MIEngine. Ouvrez votre projet dans Visual Studio. Ajoutez un nouveau fichier XML avec le contenu suivant et nommez-le kubedbg.xml:
En
-File
paramètre, vous devez spécifier le chemin absolu vers le fichier de script que nous avons créé auparavant. Appuyez ensuite sur Ctrl + Alt + A pour ouvrir la fenêtre de commande et exécutez la commande suivante:Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Cette commande démarrera le processus de débogage dans Visual Studio avec tous les avantages standard que vous attendez. Mais n'arrêtez pas le débogage autrement qu'en appuyant sur Détacher tout du menu Déboguer! Bien que cette commande ne soit pas très pratique pour écrire tout le temps. Heureusement dans Visual Studio, vous pouvez spécifier des alias pour les commandes avec des paramètres. Finalement, vous auriez besoin d'un nouveaukubedbg.xml
fichier pour chaque projet. Gardez cela à l'esprit et créez votre premier alias en tapant la commande suivante dans la fenêtre de commande:Après cela, vous pouvez commencer le débogage simplement en exécutant kubedbg.mywebapp dans la fenêtre de commande. Encore mieux, vous pouvez exécuter la même commande à partir de la barre d'outils de recherche de la zone de liste déroulante, mais avec le préfixe:
>kubedbg.mywebapp.
ce n'est pas difficile car il y a aussi une saisie de texte. Vous pouvez en savoir plus sur les alias de commande ici. Bon débogage! PS: En bonus, de la même manière, vous pouvez déboguer votre application même lorsque vous exécutez à l'intérieur d'un cloud public. Lorsque kubectl est affecté à un cluster dans le cloud public, il fonctionne simplement avec le même script et fait moins d'hypothèses, car l'intérieur de l'ID de processus de cluster réel n'est pas égal à 1la source
--attach
indicateur est utilisé dans la commande kubectl utilisée pour attacher le débogueur, ce qui me préoccupe un peu. Pouvez-vous confirmer que cela a fonctionné pour vous lors de la préparation de cette réponse?