Cloud Code te permite depurar una aplicación implementada en un clúster de Google Kubernetes Engine (GKE) aprovechando skaffold debug.
Puedes depurar tu aplicación en un clúster local (como minikube o Docker Desktop), GKE o cualquier otro proveedor de servicios en la nube.
Con la compatibilidad de Cloud Code para la depuración, no tienes que completar la configuración manual, como configurar la redirección de puertos o insertar argumentos de depuración específicos del lenguaje. La depuración requiere una aplicación de GKE lista para Cloud Code que incluya un archivo de configuración skaffold.yaml y una configuración de inicio cloudcode.kubernetes.
Depura una aplicación de GKE
Para comenzar a depurar tu aplicación de GKE, sigue estos pasos:
En la barra de estado de Cloud Code, haz clic en el nombre del proyecto activo.

En el menú Selección rápida que aparece, selecciona Depurar en Kubernetes.
Si se te solicita, autentica tus credenciales para ejecutar y depurar una aplicación de forma local.
Si tu aplicación no tiene la configuración de
skaffold.yamlo de inicio decloudcode.kubernetesnecesarias, Cloud Code te ayuda a configurarlas.Confirma si deseas usar el contexto de Kubernetes actual para ejecutar la app (o cambiar a uno preferido).
Si elegiste un clúster remoto como contexto, cuando se te solicite, elige un registro de imágenes para enviar las imágenes.
Si tu proyecto tiene la API de Artifact Registry habilitada y al menos un repositorio de Artifact Registry, puedes navegar hasta un repositorio de Artifact Registry existente y seleccionarlo.
En los siguientes ejemplos, se muestra cómo especificar dónde se almacenan las imágenes de contenedor para algunos registros comunes:
Artifact Registry REGION-docker.pkg.dev/PROJECT_ID/REPO_NAMEDocker Hub docker.io/ ACCOUNT
Asegúrate de que estés autenticado correctamente si usas un repositorio privado de Docker Hub.AWS Container Repository (ECR): AWS_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/APPAzure Container Registry (ACR): ACR_NAME.azurecr.io/APPPara generar el nombre final del repositorio de imágenes, Cloud Code concatena este registro de imágenes con el nombre de la imagen especificado en los manifiestos de Kubernetes. Esta elección se almacena en la
cloudcode.kubernetesconfiguración de lanzamiento (que se encuentra en.vscode/launch.json).Para obtener más información, consulta la guía de administración del registro de imágenes.
A continuación, Cloud Code compila los contenedores, los envía al registro, aplica las configuraciones de Kubernetes al clúster y espera el lanzamiento.
Cuando finaliza el lanzamiento, Cloud Code redirecciona automáticamente todos los puertos de contenedor declarados a tu máquina y muestra las URL en la ventana de resultado para que puedas explorar la aplicación en vivo.
Para cada contenedor depurable de tu aplicación, confirma o ingresa el directorio en el contenedor remoto en el que se encuentra el programa que deseas depurar.
Como alternativa, puedes presionar ESC para omitir la depuración del contenedor.

Cloud Code adjunta una sesión de depuración para cada contenedor depurable de la aplicación.
Ahora puedes realizar las mismas tareas que sueles hacer cuando depuras código local, como establecer puntos de interrupción y revisar el código paso a paso, en un clúster activo de Kubernetes.
De forma predeterminada, cuando guardas un cambio en tu aplicación, Cloud Code vuelve a implementarla y configura una nueva sesión de depuración. Puedes activar o desactivar esta función con la marca
watchen la configuración de inicio de tu proyecto.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.
Una vez que finalice la sesión, puedes usar los siguientes comandos del menú contextual:
- Abrir registros de implementación: Abre los registros de la aplicación de una implementación específica con el explorador de registros de Cloud Code.
- Abrir URL de servicio: Abre la URL del servicio de aplicación de un servicio específico en un navegador web.
Si desactivaste el modo de observación en la configuración de inicio y quieres realizar cambios en tu aplicación, y volver a compilarla y reimplementarla, en el panel Development sessions, pausa la acción de ejecución y, luego, haz clic en
Rebuild and redeploy the application.Con el objetivo de finalizar la sesión de depuración, haz clic en
Detener en la barra de herramientas de depuración.Después de que finalices la sesión de depuración, se borrarán del clúster todos los recursos de Kubernetes implementados.
Detalles de configuración
Cloud Code controla automáticamente los siguientes detalles de configuración para todos los lenguajes admitidos:
- Redirección de puertos del puerto de depuración para que se pueda adjuntar el depurador
- Conectar un depurador a uno o más contenedores depurables en tu aplicación.
Si tu aplicación tiene varios contenedores depurables (contenedores cuyo lenguaje es compatible con la depuración de Cloud Code) configurados en
skaffold.yaml, se adjunta un depurador a cada contenedor depurable. - Persistencia de las definiciones de asignación de fuentes en las sesiones: Puedes personalizar estas definiciones editando tu archivo
.vscode/launch.jsondirectamente.
Cloud Code también controla los siguientes detalles de configuración específicos del lenguaje:
Node.js
Reescribe el punto de entrada que se invocará:
node --inspect=localhost:9229
Python
Instala el módulo ptvsd mediante un contenedor Init y reescribe el punto de entrada que se invocará:
python -m ptvsd --host localhost --port 5678
Comienza a usarlo
Instala el depurador dlv mediante un contenedor Init y reescribe el punto de entrada de modo que la sesión de depuración iniciada se ejecute solo con un servidor de depuración (en modo sin interfaz gráfica) continúa el proceso de depuración en el inicio, acepta varias conexiones de clientes y escucha en localhost:56268:
dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
Agrega un entorno JAVA_TOOLS_OPTIONS con la configuración adecuada del protocolo de cable de depuración de Java (JDWP) para que el agente de depuración de JDWP escuche una conexión de socket en el puerto 5005 y permita que la VM comience a ejecutarse antes de que se adjunte el depurador:
jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
Para obtener más detalles sobre la depuración con skaffold debug, consulta la documentación.
Configura tu contenedor
Para preparar tu contenedor para la depuración, sigue las instrucciones del lenguaje que usas:
Node.js
- Inicia la aplicación de Node.js con
--inspect=<debugPort>, dondedebugPortproviene de la configuración de adjuntos. Por ejemplo:CMD ["node", "--inspect=9229", "index.js"]
Python
- Asegúrate de tener instalado el módulo
ptvsden tu máquina y en tu contenedor. - Inicia la aplicación de Python a través de
ptvsd. Haz que coincida el puerto especificado con el campodebugPorten la configuración de adjuntos. Por ejemplo:CMD ["python", "-m", "ptvsd", "--port", "
" , "app.py"]
Go
- Asegúrate de tener instalado el paquete
dlven tu máquina y en tu contenedor de Go. Inicia tu aplicación en Go a través de
dlv debug.El puerto especificado en el comando de inicio debe ser el mismo que el valor del atributo
debugPorten la configuración de adjuntos. 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 la JVM esté instalada en tu máquina.
Inicia la aplicación Java con las siguientes opciones, en las que
debugPortproviene de la configuración de adjuntos.-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 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 /dbg/netcore/vsdbg
Cómo configurar la vinculación
Para adjuntar un contenedor depurable, debes tener una configuración de adjuntos de tipo cloudcode.kubernetes.
Agrega un archivo .vscode/launch.json
Si tu proyecto no tiene un archivo launch.json en su carpeta .vscode, puedes agregar uno con el panel de depuración.
Para navegar al panel de depuración, haz clic en
Ejecutar y depurar en la barra de actividades.Selecciona Agregar configuración en el menú desplegable.
Selecciona Cloud Code: Kubernetes como el entorno.

Selecciona la opción Attach to Kubernetes Pod.

Selecciona el lenguaje de programación que usas.
Esto crea y abre un archivo
launch.jsonpara tu proyecto, y crea una configuración de adjuntos para ti.Actualiza los atributos de configuración en el archivo
launch.jsonpara que coincidan con los de tu proyecto. Para obtener más información sobre los atributos de configuración, consulta Atributos de configuración.
Agrega una configuración de adjuntar al archivo .vscode/launch.json
Para agregar una nueva configuración de adjuntos a un archivo .vscode/launch.json existente, haz lo siguiente:
- Abre el archivo
launch.json. - Para invocar la función Intellisense de fragmentos, haz clic en Agregar configuración.
- Para agregar una configuración de adjuntos, selecciona el fragmento de Cloud Code: Attach to Kubernetes Pod para el lenguaje que usas.
- Actualiza los atributos de 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 | El puerto de depuración que se usa en el contenedor. |
| podSelector | Es un conjunto de pares clave-valor que se usa 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 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). |
Cómo adjuntar un depurador a tu Pod de Kubernetes
Cloud Code para VS Code admite la vinculació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 vinculación de tipo cloudcode.kubernetes.
Para obtener información sobre cómo se diferencia la conexión a un pod de Kubernetes de la depuración de una aplicación de Kubernetes, consulta En qué se diferencia la conexión de un depurador a un pod de la depuración de una aplicación de Kubernetes.
Para adjuntar un depurador a tu Pod de Kubernetes, realiza las siguientes tareas:
- Para navegar al panel de depuración, haz clic en
Ejecutar y depurar en la barra de actividades. Selecciona y lanza la configuración presionando
F5.localhost:${debugPort}se reenvía al puertodebugPorten el contenedor durante la depuración.
La sesión de depuración ahora está configurada correctamente. Puedes realizar las tareas que sueles hacer cuando depuras código local, como establecer puntos de interrupción y ejecutar 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.
En qué se diferencia adjuntar un depurador a un Pod de depurar una aplicación de Kubernetes
| Cómo adjuntar 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 conecta el depurador. |
Usa la configuración (./vscode/launch.json) de tipo cloudcode.kubernetes y la solicitud attach.
|
Usa la configuración (./vscode/launch.json) de tipo cloudcode.kubernetes y la solicitud launch.Para obtener más información, consulta Configuraciones de inicio y de 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
}
|
| 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 no es específica del idioma. |
| Sin comando dedicado | Comando Depurar en Kubernetes. |
| El modo de observación no está disponible, por lo que, después de realizar cambios, debes reiniciar el depurador de forma manual. | El modo de observación permite que Cloud Code reinicie el depurador después de que guardes los cambios. |
¿Qué sigue?
- Usa la sincronización de archivos y la recarga en caliente para acelerar el desarrollo.
- Configura un entorno de desarrollo continuo en Cloud Code.
- Visualiza registros de Kubernetes en Cloud Code.