Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como anexar um depurador a um pod do Kubernetes

O Cloud Code é compatível com a anexação de um depurador a um pod do Kubernetes. Tudo que você precisa ter é um contêiner de depuração e uma configuração de anexação do tipo cloudcode.kubernetes.

Como configurar um contêiner

Você precisará garantir que o contêiner que quer depurar esteja pronto para depuração. Veja abaixo instruções específicas de linguagem para configurar contêineres.

Node.js

  • Inicie o aplicativo Node.js com --inspect=<debugPort>, em que debugPort vem da configuração de anexação. Exemplo: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Verifique se o módulo ptvsd está instalado na máquina e no contêiner.
  • Inicie o aplicativo Python por meio do ptvsd. Corresponde à porta especificada no campo debugPort na configuração de anexação. Exemplo:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • Verifique se o pacote dlv está instalado na máquina e no contêiner do Go.
  • Inicie o aplicativo Go por meio do dlv debug.

    A porta especificada no comando de inicialização precisa ser igual ao valor do atributo debugPort na configuração de anexação. Exemplo:

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
    

    Dica para solução de problemas: ao depurar um aplicativo em Go, ele será interrompido e aguardará a anexação de um depurador. Anexe um depurador para iniciar o serviço.

Java

  • Verifique se a JVM está instalada na sua máquina.
  • Inicie o aplicativo Java com -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y, em que debugPort vem da configuração de anexação.

    Por exemplo, para iniciar o aplicativo Java no modo de depuração e fazer detecções na porta debugPort para realizar a conexão:

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
    

.NET Core

  • Verifique se o vsdbg, o depurador de linha de comando do .NET Core da Microsoft, está instalado no contêiner do Kubernetes.

    Exemplo:

    RUN apt-get update 
    && apt-get install -y --no-install-recommends unzip
    && apt-get install -y procps
    && rm -rf /var/lib/apt/lists/*
    && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg

Como definir uma configuração de anexação

Para anexar a um contêiner depurável, é necessário ter uma configuração de anexação do tipo cloudcode.kubernetes.

Projetos que não têm o arquivo .vscode/launch.json

Se o projeto não tiver um arquivo launch.json na pasta .vscode, adicione um usando o painel de depuração.

  1. Navegue até o painel de depuração (use o ícone Visualização de depuração Ícone de depuração na barra de atividades) e selecione Add Configuration no menu suspenso.

  2. Selecione Cloud Code: Kubernetes como o ambiente.

    Como definir o Cloud Code: Kubernetes como o ambiente

  3. Selecione a opção Attach to Kubernetes Pod.

    Selecione a opção de configuração do Kubernetes

  4. Selecione a linguagem de programação correspondente.

  5. Isso criará e abrirá um arquivo launch.json para seu projeto, além de criar uma configuração de anexo para você. Agora atualize os atributos de configuração nesse arquivo para que eles correspondam aos atributos do projeto. Para obter mais informações sobre os atributos de configuração, consulte esta tabela.

    Atributos de configuração exibidos em um arquivo launch.json aberto

Projetos que têm o arquivo .vscode/launch.json

Para adicionar uma nova configuração de anexação a um .vscode/launch.json:

  1. Abra o arquivo launch.json.
  2. Pressione o botão Add Configuration que invoca o snippet Intellisense.
  3. Selecione um dos snippets Cloud Code: Attach to Kubernetes Pod para o idioma que você quer.
  4. Isso adicionará uma configuração de anexação. Agora é possível atualizar os atributos nessa configuração para corresponder aos do seu projeto. Para mais informações sobre os atributos de configuração, consulte esta tabela.

Atributos de configuração

Atributo Descrição
debugPort A porta de depuração usada no contêiner.
podSelector O conjunto de pares de chave-valor usado para selecionar o pod de depuração. Para mais informações, consulte o guia sobre seletores. Este é um podSelector comum:

"podSelector": { "app": <deployment-name> }

localRoot O caminho para o diretório local que contém o programa sendo depurado. O padrão é "${workspaceFolder}".
remoteRoot O caminho absoluto para o diretório remoto que contém o programa sendo depurado no contêiner do Kubernetes.

Como anexar um depurador a um pod do Kubernetes

Depois de definir a configuração e o contêiner:

  1. Abra a visualização de depuração Ícone de depuração.
  2. Selecione e lance a configuração com F5.
    • localhost:${debugPort} será encaminhado por portas para debugPort no contêiner durante a depuração.
  3. A sessão de depuração foi configurada.
  4. Depois disso, será possível executar todas as tarefas que você normalmente realiza ao depurar códigos locais, como definir pontos de interrupção e percorrer códigos.
  5. 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.

    Aplicativo pausado no ponto de interrupção e seções de pilha de chamadas e variáveis preenchidas com valores no escopo

  6. Para encerrar a sessão de depuração, clique no ícone de parada na Barra de ferramentas de depuração.

Como anexar a um pod do Kubernetes e depurar um aplicativo do Kubernetes

Como anexar a um pod do Kubernetes Como depurar um aplicativo do Kubernetes
Depura um único pod do Kubernetes Depura todos os contêineres depuráveis no aplicativo.
Você precisará garantir que o aplicativo esteja em execução no pod do Kubernetes antes da depuração. Executa o aplicativo no cluster do Kubernetes e anexa o depurador.
Usa configuração (.vscode/launch.json) do tipo "cloudcode.kubernetes" e solicita "attach". Usa configuração (.vscode/launch.json) do tipo "cloudcode.kubernetes" e solicita "launch".
configurações de lançamento em comparação com anexação.
Exemplo de configuração:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
Exemplo de configuração:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
Essa configuração não pode ser usada para executar o aplicativo. Essa configuração pode ser usada para executar ou depurar o aplicativo.
Essa configuração é específica de um idioma Essa configuração é independente de idioma
Nenhum comando dedicado Comando "Debug on Kubernetes"