Conecta un depurador a un pod de Kubernetes

Cloud Code admite adjuntar un depurador en un Pod de Kubernetes para Node.js, Python, Go, Java y .NET. Todo lo que necesitas es un contenedor depurable y una configuración de conexión de tipo cloudcode.kubernetes.

Para obtener más información sobre cómo diferenciar la conexión a un Pod de Kubernetes y Depurar una aplicación de Kubernetes, consulta la sección sobre cómo adjuntar un pod de Kubernetes en lugar de depurar una aplicación de Kubernetes.

Configura un contenedor

A fin de preparar tu contenedor para la depuración, sigue las instrucciones correspondientes al lenguaje que usas:

Node.js

  • Inicia la aplicación Node.js con --inspect=<debugPort>, en el que debugPort proviene de la configuración de conexión. Por ejemplo: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Asegúrate de tener el módulo ptvsd instalado en tu máquina y en tu contenedor.
  • Inicia la aplicación de Python a través de ptvsd. Haz coincidir el puerto especificado con el campo debugPort en la configuración de conexión. Por ejemplo:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • Asegúrate de tener el paquete dlv instalado en tu máquina y en el contenedor de Go.
  • Inicia tu aplicación de Go a través de dlv debug.

    El puerto especificado en el comando de inicio debe ser el mismo que el valor del atributo debugPort en la configuración de conexión. Por ejemplo:

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

    Sugerencia para la solución de problemas: Cuando depures una aplicación de Go, esta se detendrá y esperará a que se adjunte un depurador. Adjunta un depurador para que el servicio se inicie.

Java

  • Asegúrate de que JVM esté instalado en tu máquina.
  • Inicia la aplicación de Java con las siguientes opciones, en las que debugPort proviene de la configuración de conexión.

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=,quiet=y
    

    Por ejemplo, para iniciar la aplicación de Java en modo de depuración y escuchar la conexión en el puerto debugPort:

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

.NET Core

  • Asegúrate de tener instalado vsdbg, el depurador de la línea de comandos .NET Core en tu contenedor de Kubernetes.

    Por ejemplo:

    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

Establece una configuración de conexión

Para adjuntar un contenedor depurable, debes tener una configuración de conexión de tipo cloudcode.kubernetes.

Proyectos que no tienen el archivo .vscode/launch.json

Si tu proyecto no tiene un archivo launch.json en la carpeta .vscode, puedes agregar uno mediante el panel Depuración.

  1. Navega al panel "Depurar" (mediante el ícono de vista de depuración Ícono Depurar en la barra de actividades) y selecciona Agregar configuración en el menú desplegable.

  2. Selecciona Cloud Code: Kubernetes como el entorno.

    Configura Cloud Code: Kubernetes como el entorno.

  3. Selecciona la opción Attach to Kubernetes Pod.

    Selecciona la opción de configuración de Kubernetes

  4. Selecciona el lenguaje de programación correspondiente.

    Esto crea y abre un archivo launch.json para el proyecto y crea una configuración de conexión para ti. Ahora puedes actualizar los atributos de configuración de este archivo para que coincidan con los de tu proyecto. Para obtener más información sobre los atributos de configuración, consulta Atributos de configuración.

    Atributos de configuración que aparecen un archivo launch.json abierto

Proyectos que tienen archivo .vscode/launch.json

Para agregar una nueva configuración de conexión a un archivo .vscode/launch.json existente, haz lo siguiente:

  1. Abre el archivo launch.json.
  2. Presiona el botón Add Configuration que invoca el fragmento de Intellisense.
  3. Selecciona uno de los fragmentos Cloud Code: Attach to Kubernetes Pod para el lenguaje deseado.
  4. Esto agregará una configuración de conexión. Ahora puedes actualizar los atributos de esta configuración para que coincidan con los del proyecto. Si quieres obtener más información sobre los atributos de configuración, consulta esta tabla.

Atributos de la configuración

Atributo Descripción
debugPort El puerto de depuración que se usa en el contenedor.
podSelector Conjunto de pares clave-valor que se usan para seleccionar el Pod de depuración (para obtener más información, consulta la guía sobre selectores). El siguiente ejemplo representa un podSelector típico:

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

localRoot La ruta de acceso al directorio local que contiene el programa en depuración. La configuración predeterminada es ${workspaceFolder}.
remoteRoot La ruta de acceso absoluta del directorio remoto que contiene el programa en depuración (en el contenedor de Kubernetes).

Adjunta un depurador a un pod de Kubernetes

Una vez que hayas establecido la configuración y el contenedor, haz lo siguiente:

  1. Abre la vista de depuración Ícono Depurar.
  2. Usa F5 para seleccionar la configuración y dar inicio al proceso.
    • Los puertos de localhost:${debugPort} se redireccionarán a debugPort en el contenedor durante la depuración.
  3. La sesión de depuración ya se encuentra configurada con éxito.
  4. Ahora puedes realizar todas las tareas que sueles hacer cuando depuras el código local, como establecer interrupciones y revisar el código paso a paso.
  5. Usa la barra lateral de depuración para revisar la información sobre las variables y la pila. Usa la consola de depuración ubicada en el depurador del panel inferior si deseas interactuar con la sesión de depuración.

    App detenida en la interrupción, variables y secciones de pila de llamadas propagadas con valores dentro del permiso

  6. Para finalizar la sesión de depuración, haz clic en iconcono de parada de depuración Stop en la barra de herramientas de depuración.

Conectar a un pod de Kubernetes frente a depurar una aplicación de Kubernetes

Adjuntar a un pod de Kubernetes Depura una aplicación de Kubernetes
Depura un solo pod de Kubernetes. Depura todos los contenedores depurables de la aplicación.
La aplicación debe estar en ejecución en el Pod de Kubernetes antes de realizar la depuración. Ejecuta la aplicación en el clúster de Kubernetes y conecta el depurador.
Usa configuration (.vscode/launch.json) de tipo “cloudcode.kubernetes” y solicita “conectar”. Usa configuration (.vscode/launch.json) del tipo “cloudcode.kubernetes” y solicita “iniciar”.
Para obtener más información, consulta Comparación entre el lanzamiento y la configuración de archivos adjuntos.
Configuración de muestra:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
Configuración de muestra:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
Esta configuración no se puede utilizar para ejecutar la aplicación. Esta configuración se puede usar para ejecutar o depurar la aplicación.
Esta configuración es específica para cada lenguaje. Esta configuración es independiente del idioma.
Ningún comando dedicado Depura en Kubernetes.