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. Solo necesitas un contenedor depurable y una configuración de conexión del tipo cloudcode.kubernetes
.
Para obtener más información sobre las diferencias entre vincular un Pod de Kubernetes a una aplicación de Kubernetes y cómo depurarla, consulta cómo conectar una aplicación de Kubernetes a un Pod de Kubernetes.
Configura un contenedor
A fin de preparar el contenedor para la depuración, sigue las instrucciones correspondientes al lenguaje que uses:
Node.js
- Inicia la aplicación Node.js con
--inspect=<debugPort>
, en el quedebugPort
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 campodebugPort
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, si deseas iniciar la aplicación de Java en modo de depuración y escucha para que se conecte 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 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.
Navega al panel “Depurar” (mediante el ícono Vista de depuración
de la barra de actividad) y selecciona Agregar Configuración en el menú desplegable.
Seleccione Cloud Code: Kubernetes como entorno.
Selecciona la opción
Attach to Kubernetes Pod
.Selecciona el lenguaje de programación correspondiente.
Esto crea y abre un archivo
launch.json
para tu proyecto y crea una configuración de adjunto. 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.
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:
- Abre el archivo launch.json.
- Para invocar el fragmento Intellisense, haga clic en Add Configuration.
- Selecciona el fragmento Cloud Code: Attach to Kubernetes Pod del lenguaje que usas.
- 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:
|
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
Una vez que hayas establecido la configuración y el contenedor, haz lo siguiente:
- Abre la vista de depuración
.
- Usa
F5
para seleccionar la configuración y dar inicio al proceso.- Los puertos de
localhost:${debugPort}
se redireccionarán adebugPort
en el contenedor durante la depuración.
- Los puertos de
- La sesión de depuración ya se encuentra configurada con éxito.
- 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.
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.
Para finalizar la sesión de depuración, haz clic en
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 en 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 "&code3.cloud:kubernetes" y solicita | Usa configuration (.vscode/launch.json) del tipo “cloudcode.kubernetes” y solicita “iniciar”. Para obtener más información, consulte Comparación entre la configuración de lanzamiento y la de adjuntar. |
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 usar 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 comandos exclusivos. | Debug on Kubernetes. |