Depurar um aplicativo Kubernetes no Cloud Code para VS Code

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Cloud Code permite depurar facilmente um aplicativo implantado em um cluster do Kubernetes usando o skaffold debug.

É possível depurar o aplicativo em um cluster local (como o minikube ou o Docker Desktop), o Google Kubernetes Engine (GKE) ou qualquer outro provedor de nuvem.

Com o suporte à depuração do Cloud Code, você não precisa concluir a configuração manual como configurar o encaminhamento de portas ou injetar argumentos de depuração específicos da linguagem. A depuração requer um aplicativo do Kubernetes pronto para o Cloud Code que inclua um arquivo de configuração skaffold.yaml e uma configuração de inicialização cloudcode.kubernetes.

Como depurar um aplicativo

  1. Clique em Barra de status do Cloud Code Cloud Code na barra de status e em Depurar no Kubernetes.
  2. Se o aplicativo não tiver a configuração necessária do Skaffold ou a de lançamento de cloudcode.kubernetes, o Cloud Code vai ajudar você a configurá-lo.
  3. Confirme se você quer usar o contexto do Kubernetes atual para executar o aplicativo (ou alternar para um preferido).
  4. Se você escolheu um cluster remoto como contexto, quando solicitado, escolha um registro de imagem para enviar as imagens. Se você estiver usando o Container Registry, poderá navegar até um registro atual ou especificar o nome de um registro a ser criado. Se o projeto tiver a API Artifact Registry ativada e pelo menos um repositório do Artifact Registry, é possível navegar e selecionar um repositório existente do Artifact Registry. de dados.

    Os exemplos a seguir demonstram como especificar onde as imagens de contêiner são armazenadas para alguns registros comuns:

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Verifique se você tem a autenticação correta se estiver usando um repositório particular do Docker Hub.
    Repositório de contêineres da AWS (ECR, na sigla em inglês) {aws_account_id}.dkr.ecr.{region}.amazonaws.com/{meu-app}
    Azure Container Registry (ACR) {my_acr_name}.azurecr.io/{my-app}

    Para gerar o nome final do repositório de imagem, o Cloud Code concatena esse registro de imagem com o nome da imagem especificado nos manifestos do Kubernetes. Essa escolha é armazenada na configuração de inicialização cloudcode.kubernetes (encontrada em .vscode/launch.json).

    Para mais informações, consulte o guia de processamento de registros de imagem.

    O Cloud Code, em seguida, cria os contêineres, os envia para o registro, aplica as configurações do Kubernetes ao cluster e aguarda o lançamento.

    Após a conclusão do lançamento, o Cloud Code encaminha automaticamente todas as portas de contêiner declaradas à sua máquina e exibe os URLs na janela de saída para que seja possível procurar seu aplicativo ativo.

  5. Para cada contêiner depurável no seu aplicativo, confirme ou insira o diretório no contêiner remoto em que o programa que você quer depurar está localizado.

    Outra opção é pressionar ESC para pular a depuração do contêiner.

    Solicitação de raiz remota

    O Cloud Code anexa uma sessão de depuração para cada contêiner depurável no aplicativo.

    Agora é possível realizar as mesmas tarefas realizadas ao depurar código local, como definir pontos de interrupção e avançar o código, em um cluster ativo do Kubernetes.

    Por padrão, quando você salva uma alteração no aplicativo, o Cloud Code o implanta novamente e configura uma nova sessão de depuração. Alterne esse recurso com a sinalização watch na configuração de inicialização do seu projeto.

  6. Para inspecionar informações de pilha e variáveis, use a barra lateral de depuração (em inglês). Para interagir com a sessão, use o Console de depuração (em inglês) no depurador do painel inferior.

  7. Depois que a sessão for concluída, use os seguintes comandos do menu de contexto:

    • Abrir os registros de implantação: abra os registros do aplicativo de uma implantação específica com o Explorador de registros de código do Cloud.
    • Open Service URL: abra o URL do serviço do aplicativo de um serviço específico em um navegador da Web.
  8. Se você tiver desativado o modo de exibição na configuração do lançamento e quiser mudar o aplicativo, recriar e reimplantar o aplicativo, no painel "Sessões de desenvolvimento", pause a ação de execução e clique em Ícone "Recriar e reimplantar" Recriar e reimplantar o aplicativo.

  9. Para encerrar a sessão de depuração, clique em Ícone de parada de depuração Stop na barra de ferramentas de depuração.

    Depois de terminar a sessão de depuração, todos os recursos implantados do Kubernetes são excluídos do cluster.

Detalhes da configuração

O Cloud Code, com a tecnologia do Skaffold, processa automaticamente os seguintes detalhes de configuração para todas as linguagens compatíveis:

  • Faça o encaminhamento de portas de depuração para que o depurador seja anexado.
  • Como anexar um depurador a um ou mais contêineres depuráveis no aplicativo. Se o aplicativo tiver vários contêineres depuráveis (contêineres com linguagem compatível com a depuração do Cloud Code) configurados em skaffold.yaml, um depurador será anexado a cada contêiner depurável.
  • Mantenha as definições de mapeamento de origem em todas as sessões. É possível personalizar essas definições editando o arquivo .vscode/launch.json diretamente.

O Cloud Code também processa os seguintes detalhes de configuração específicos da linguagem:

Node.js

Como reescrever o ponto de entrada para invocar:

node --inspect=localhost:9229

Python

Como instalar o depurador do módulo ptvsd usando um contêiner de inicialização e reescrever o ponto de entrada para invocar:

python -m ptvsd --host localhost --port 5678

Go

Instalar o depurador dlv usando um contêiner de inicialização e reescrever o ponto de entrada para que a sessão de depuração iniciada seja executada somente com um servidor de depuração (no modo headless) o processo depurado no início, aceita várias conexões de clientes e escuta em localhost:56268:

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

Java

Adicionar um ambiente JAVA_TOOLS_OPTIONS com a configuração apropriada do Java Debug Wire (JDWP) para que o agente de depuração JDWP detecte uma conexão de soquete na porta 5005 e permita que a VM comece a ser executada antes do depurador anexado:

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

Para mais detalhes sobre a depuração com tecnologia Skaffold, consulte a documentação do skaffold debug.

Como anexar o depurador a um pod do Kubernetes

O Cloud Code VS Code também é compatível com a anexação de um depurador a um pod do Kubernetes. Para uma comparação, consulte Como anexar a um pod do Kubernetes vs. depurar um aplicativo do Kubernetes.

Como conseguir suporte

Para enviar feedback, informe problemas no GitHub ou faça uma pergunta no Stack Overflow.