Nuestro equipo quiere poder ejecutar el depurador de Visual Studio contra instancias implementadas de nuestra aplicación ASP.NET en nuestro clúster interno de Kubernetes. Necesito descubrir cómo terminar el rompecabezas, pero no estoy muy familiarizado con Visual Studio 2019.
- La imagen de Docker se compila con las imágenes oficiales de .NET Core y tiene / vsdbg poblado con la última versión (que no admite --attach).
- Visual Studio funciona con mi escritorio Docker.
- Kubectl está configurado correctamente. Puedo usar el clúster de kubernetes incluido con Docker Desktop o nuestro clúster de kubernetes interno para realizar pruebas.
- Azure actualmente no es una opción. Según la documentación, entiendo que esto es lo que Microsoft prefiere que haga.
¿Cómo debo configurar Visual Studio para poder hacer esto?
c#
visual-studio
kubernetes
visual-studio-debugging
Thorbjørn Ravn Andersen
fuente
fuente
Respuestas:
Okay. Vamos a ponerlo en marcha. En primer lugar, asegúrese de haber publicado su aplicación en modo de depuración. Prefiero usar una nueva construcción de varias etapas de Docker para construir mis imágenes, así que escribiría algo como esto al final de una etapa de construcción en Dockerfile:
Para enviar imágenes a Minikube, uso el registro de contenedor local como se describe aquí. Pero puedes hacerlo como lo haces habitualmente. Cuando tenga su contenedor en funcionamiento, podemos comenzar a piratearlo. Usaré Powershell para ese propósito, pero el mismo se puede reescribir fácilmente en cualquier otro lenguaje de terminal. Puede seguir el tutorial paso a paso y ejecutar comandos en su terminal uno por uno comprobando los valores de var con el comando echo cuando sea necesario. En su archivo * .yml, debe tener un selector que describa algo como esto:
Cógelo y úsalo para definir un $ Selector var en tu terminal Powershell:
Necesita encontrar un pod donde su aplicación en contenedor se ejecuta con su selector:
Suponiendo que solo tiene un contenedor en el pod ahora puede ejecutar comandos en ese contenedor. Por defecto, el contenedor no tiene vsdbg instalado, así que adelante e instálelo:
A continuación, debe encontrar el PID de su aplicación dentro del contenedor:
Normalmente es igual a 1, pero es mejor hacer menos suposiciones. Eso es. Ahora puede iniciar un depurador:
No olvide ejecutar los siguientes comandos antes de cerrar la ventana; de lo contrario, su aplicación se bloqueará para siempre:
Armemos todo, cree un script reutilizable y guárdelo en algún lugar cerca de las raíces, ya que puede usarlo con todos sus proyectos de ASP.NET Core:
Ahora puede ejecutar este script como este cuando el terminal se ejecuta desde la carpeta de script:
¿Pero no se supone que debemos depurar desde Visual Studio? ¡Si! Vayamos más allá e iniciemos nuestro proceso de terminal desde Visual Studio MIEngine. Abre tu proyecto en Visual Studio. Agregue un nuevo archivo XML con el siguiente contenido y asígnele el nombre kubedbg.xml:
En el
-File
parámetro, debe especificar la ruta absoluta al archivo de script que creamos antes. Luego presione Ctrl + Alt + A para abrir la Ventana de comandos y ejecute el siguiente comando:Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Este comando iniciará el proceso de depuración dentro de Visual Studio con todos los beneficios estándar que esperaría. ¡Pero no deje de depurar de otra manera que no sea presionando Separar todo del menú Depurar! Aunque este comando no es muy conveniente para escribir todo el tiempo. Afortunadamente, en Visual Studio, puede especificar alias para comandos con parámetros. Eventualmente, necesitaría un nuevokubedbg.xml
archivo para cada proyecto. Con esto en mente, siga adelante y cree su primer alias escribiendo el siguiente comando en la Ventana de comandos:Después de eso, puede comenzar a depurar simplemente ejecutando kubedbg.mywebapp en la Ventana de comandos. Aún mejor, puede ejecutar el mismo comando desde el cuadro combinado de la barra de herramientas Buscar pero con prefijo:
>kubedbg.mywebapp.
eso no es difícil ya que también hay una finalización de texto. Puede leer más sobre los alias de comandos aquí. Feliz depuración! PD: Como beneficio adicional, de la misma manera puedes depurar tu aplicación incluso cuando se ejecuta dentro de una nube pública. Cuando se asigna kubectl a un clúster en la nube pública, solo funciona con el mismo script y se devuelven menos suposiciones, ya que dentro de la ID del proceso del clúster real no es igual a 1fuente
--attach
bandera se usa en el comando kubectl usado para adjuntar el depurador, lo que me preocupa un poco. ¿Puedes confirmar que esto funcionó para ti al preparar esta respuesta?