Adjunta un depurador a un pod de Kubernetes en Cloud Code para Cloud Shell

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cloud Code para Cloud Shell admite la conexión de un depurador a 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 del tipo cloudcode.kubernetes.

Para obtener información sobre cómo difiere la vinculación a un pod de Kubernetes de la depuración de una aplicación de Kubernetes, consulta Cómo vincular un pod de Kubernetes y depurar una aplicación de Kubernetes.

Configura un contenedor

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

Node.js

  • Inicia la aplicación de 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 instalado el módulo ptvsd 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 instalado el paquete dlv 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 solucionar problemas: Cuando depures una aplicación de Go, esta se paralizará y esperará a que se adjunte un depurador. Adjunta un depurador para que el servicio se inicie.

Java

  • Asegúrate de que JVM esté instalada 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 para que se establezca la conexión en el puerto debugPort, haz lo siguiente:

    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 línea de comandos de .NET Core de Microsoft, 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 del tipo cloudcode.kubernetes.

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

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

  1. Para navegar al panel Depurar, haz clic en Ícono Depurar Debug en la barra de actividad.

  2. Seleccione Agregar configuración en el menú desplegable.

  3. Selecciona Cloud Code: Kubernetes como el entorno.

    Configura Cloud Code: Kubernetes como el entorno.

  4. Selecciona la opción Adjuntar al pod de Kubernetes.

    Selecciona la opción de configuración de Kubernetes

  5. Selecciona el lenguaje de programación que usas.

    Esto crea y abre un archivo launch.json para tu proyecto y crea una configuración de adjunto.

  6. Actualiza los atributos de configuración en el archivo launch.json 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.

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. Para invocar el fragmento Intellisense, haga clic en Agregar configuración.
  3. Para agregar una configuración de conexión, selecciona el fragmento Cloud Code: Adjuntar a pod de Kubernetes para el lenguaje que estás usando.
  4. Actualiza los atributos en la configuración 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 la configuración

Atributo Descripción
debugPort Puerto de depuración usado 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. En el siguiente ejemplo, se muestra un típico "podSelector":

"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).

Conecta un depurador a un pod de Kubernetes

Después de establecer la configuración y el contenedor, haz lo siguiente:

  1. Para navegar al panel Depurar, haz clic en Ícono Depurar Debug en la barra de actividad.
  2. Presiona F5 para seleccionar la configuración y dar inicio al proceso.

    • Se reenvía localhost:${debugPort} a debugPort en el contenedor durante la depuración.

    La sesión de depuración ya se configuró correctamente. Puedes realizar las tareas que normalmente haces cuando depuras código local, como establecer interrupciones y revisar el código paso a paso.

  3. 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.

  4. Para finalizar la sesión de depuración, haz clic en Ícono de detención de depuración Detener 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 ejecutarse en el pod de Kubernetes antes de la depuración. Ejecuta la aplicación en el clúster de Kubernetes y adjunta el depurador.
Usa configuration (.vscode/launch.json) del tipo &33.cloudcode.kubernetes' y solicitud '. Usa configuration (.vscode/launch.json) del tipo “cloudcode.kubernetes” y solicita “iniciar”.
Para obtener más información, consulte Configuraciones de lanzamiento y de conexión.
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
}
No se puede usar esta configuración para ejecutar la aplicación. Esta configuración se puede usar para ejecutar o depurar la aplicación.
Esta configuración es específica del lenguaje. Esta configuración es independiente del lenguaje.
No hay un comando dedicado. Debug on Kubernetes (Depurar en Kubernetes).