Nossa equipe deseja executar o depurador do Visual Studio em instâncias implantadas do aplicativo ASP.NET em nosso cluster Kubernetes interno. Preciso descobrir como terminar o quebra-cabeça, mas não estou muito familiarizado com o Visual Studio 2019.
- A imagem do Docker é compilada com as imagens oficiais do .NET Core e possui / vsdbg preenchido com a versão mais recente (que não suporta --attach).
- O Visual Studio funciona com o meu Docker Desktop.
- O Kubectl está configurado corretamente. Posso usar o cluster kubernetes incluído no Docker Desktop ou nosso cluster interno kubernetes para teste.
- Atualmente, o Azure não é uma opção. Entendo pela documentação que é isso que a Microsoft prefere que eu faça.
Como devo configurar o Visual Studio para poder fazer isso?
c#
visual-studio
kubernetes
visual-studio-debugging
Thorbjørn Ravn Andersen
fonte
fonte
Respostas:
Está bem. Vamos começar. Antes de tudo, verifique se você publicou seu aplicativo no modo de Depuração! Prefiro usar uma nova compilação de vários estágios do Docker para criar minhas imagens, para escrever algo assim no final de um estágio de compilação no Dockerfile:
Para enviar imagens ao Minikube, eu uso o registro de contêiner local, conforme descrito aqui. Mas você pode fazê-lo como costuma fazer. Quando você tiver seu contêiner em funcionamento, podemos começar a invadir ele. Usarei o Powershell para esse fim, mas o mesmo pode ser facilmente reescrito em qualquer outro idioma do terminal. Você pode seguir o tutorial passo a passo e executar comandos no seu terminal, um por um, verificando os valores de var com o comando echo quando necessário. No seu arquivo * .yml, você deve ter um seletor descrito algo como isto:
Agarre-o e use-o para definir um $ Selector var no seu terminal Powershell:
Você precisa encontrar um pod em que seu aplicativo em contêiner esteja em execução pelo seletor:
Supondo que você tenha apenas um contêiner no pod agora você pode executar comandos nesse contêiner. Por padrão, o contêiner não possui o vsdbg instalado, então vá em frente e instale-o:
Em seguida, você precisa encontrar o PID do seu aplicativo dentro do contêiner:
Normalmente é igual a 1, mas é melhor fazer menos suposições. É isso aí. Agora você pode iniciar um depurador:
Não se esqueça de executar os seguintes comandos antes de fechar a janela, caso contrário, seu aplicativo ficará bloqueado para sempre:
Vamos juntar tudo, criar um script reutilizável e salvá-lo em algum lugar próximo das raízes, pois você pode usá-lo com todos os seus projetos do ASP.NET Core:
Agora você pode executar este script assim quando o terminal estiver sendo executado a partir da pasta de scripts:
Mas não devemos estar depurando do Visual Studio? Sim! Vamos além e lançar nosso processo de terminal no Visual Studio MIEngine. Abra seu projeto no Visual Studio. Adicione um novo arquivo XML com o seguinte conteúdo e denomine-kubedbg.xml:
No
-File
parâmetro, você precisa especificar o caminho absoluto para o arquivo de script que criamos anteriormente. Em seguida, pressione Ctrl + Alt + A para abrir a Janela de Comando e execute o seguinte comando:Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Este comando iniciará o processo de depuração no Visual Studio com todos os benefícios padrão que você esperaria. Mas não pare de depurar de outra maneira senão pressionando Desanexar tudo no menu Debug! Embora este comando não seja muito conveniente para escrever o tempo todo. Felizmente, no Visual Studio, você pode especificar aliases para comandos com parâmetros. Eventualmente, você precisaria de um novokubedbg.xml
arquivo para cada projeto. Com isso em mente, vá em frente e crie seu primeiro alias digitando o seguinte comando na Janela de Comando:Depois disso, você pode começar a depurar executando kubedbg.mywebapp na Janela de Comando. Ainda melhor, você pode executar o mesmo comando na caixa de combinação Localizar da barra de ferramentas, mas com prefixo:
>kubedbg.mywebapp.
isso não é difícil, pois também há um preenchimento de texto. Você pode ler mais sobre aliases de comando aqui. Feliz depuração! PS: como um bônus absolutamente da mesma maneira que você pode depurar seu aplicativo mesmo quando executado em uma nuvem pública. Quando o kubectl é atribuído a um cluster na nuvem pública, ele trabalha com o mesmo script e faz menos suposições pagas, uma vez que o ID do processo real do cluster não é igual a 1fonte
--attach
sinalizador é usado no comando kubectl usado para anexar o depurador, o que me preocupa um pouco. Você pode confirmar que isso funcionou para você ao preparar esta resposta?