Cloud Code te permite depurar una aplicación desplegada en un clúster de Google Kubernetes Engine (GKE) mediante 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 depuración de Cloud Code, no tienes que completar la configuración manual, como configurar el reenvío de puertos o insertar argumentos de depuración específicos del lenguaje. Para depurar, necesitas una aplicación de GKE preparada para Cloud Code que incluya un archivo de configuración skaffold.yaml
y una configuración de inicio cloudcode.kubernetes
.
Depurar una aplicación de GKE
Para empezar 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ú de selección rápida que aparece, selecciona Depurar en Kubernetes.
Si tu aplicación no tiene la configuración de Skaffold o la configuración de lanzamiento de
cloudcode.kubernetes
necesarias, Cloud Code te ayudará a configurarlas.Confirma si quieres usar el contexto de Kubernetes actual para ejecutar la aplicación (o cambia a otro).
Si has elegido un clúster remoto como contexto, cuando se te pida, elige un registro de imágenes al que enviar las imágenes.
Si tu proyecto tiene la API de Artifact Registry habilitada y al menos un repositorio de Artifact Registry, puedes buscar y seleccionar un repositorio de Artifact Registry.
En los siguientes ejemplos se muestra cómo especificar dónde se almacenan las imágenes de contenedor en algunos registros habituales:
Artifact Registry REGION
-docker.pkg.dev/PROJECT_ID
/REPO_NAME
Docker Hub docker.io/ ACCOUNT
Asegúrate de que te has autenticado correctamente si usas un repositorio privado de Docker Hub.Para generar el nombre del repositorio de imágenes final, Cloud Code concatena este registro de imágenes con el nombre de la imagen especificado en los manifiestos de Kubernetes. Esta opción se almacena en tu
cloudcode.kubernetes
configuración de inicio (que se encuentra en.vscode/launch.json
).Para obtener más información, consulta la guía de gestión de registros de imágenes.
Cloud Code compila tus contenedores, los envía al registro, aplica las configuraciones de Kubernetes al clúster y espera a que se complete el lanzamiento.
Después del lanzamiento, Cloud Code reenvía automáticamente todos los puertos de contenedor declarados a tu máquina y muestra las URLs en la ventana de salida para que puedas navegar por tu aplicación activa.
En cada contenedor depurable de tu aplicación, confirma o introduce el directorio del contenedor remoto en el que se encuentra el programa que quieres depurar.
También puedes pulsar ESC para saltarte la depuración del contenedor.
Cloud Code adjunta una sesión de depuración a cada contenedor depurable de la aplicación.
Ahora puedes realizar las mismas tareas que normalmente haces al depurar código local, como definir puntos de interrupción y recorrer el código, en un clúster de Kubernetes activo.
De forma predeterminada, cuando se guarda automáticamente un cambio en tu aplicación, Cloud Code vuelve a desplegarla y configura una nueva sesión de depuración. Puedes activar o desactivar esta función con la marca
watch
en la configuración de lanzamiento de tu proyecto.Para inspeccionar variables e información de la pila, usa la barra lateral de depuración. Para interactuar con la sesión de depuración, usa la consola de depuración en el panel inferior del depurador.
Una vez que haya finalizado la sesión, puede usar los siguientes comandos del menú contextual:
- Abrir registros de implementación: abre los registros de aplicaciones de una implementación específica con el explorador de registros de Cloud Code.
- Abrir URL de servicio: abre la URL de servicio de la aplicación de un servicio específico en un navegador web.
Si has desactivado el modo de reloj en la configuración de inicio y quieres hacer cambios en la aplicación, así como volver a compilarla y desplegarla, en el panel Sesiones de desarrollo, coloca el cursor sobre la acción de ejecución y haz clic en
Volver a compilar y desplegar la aplicación.
Para finalizar la sesión de depuración, haz clic en
Detener en la barra de herramientas de depuración.
Cuando finalices la sesión de depuración, todos los recursos de Kubernetes implementados se eliminarán del clúster.
Detalles de la configuración
Cloud Code, con la tecnología de Skaffold, gestiona automáticamente los siguientes detalles de configuración de todos los lenguajes admitidos:
- Redirigir el puerto de depuración para que se pueda adjuntar el depurador.
- Adjuntar un depurador a uno o varios contenedores depurables de 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 adjuntará un depurador a cada contenedor depurable. - Persistencia de las definiciones de asignación de origen entre sesiones. Puedes personalizar estas definiciones editando directamente el archivo
.vscode/launch.json
.
Cloud Code también gestiona los siguientes detalles de configuración específicos de cada lenguaje:
Node.js
Reescribir el punto de entrada para invocar:
node --inspect=localhost:9229
Python
Instalar el módulo ptvsd
con un contenedor Init y reescribir el punto de entrada para invocar:
python -m ptvsd --host localhost --port 5678
Go
Instalar el depurador dlv
mediante un contenedor Init y reescribir el punto de entrada de forma que la sesión de depuración iniciada se ejecute solo con un servidor de depuración (en modo sin interfaz gráfica), continúe el proceso depurado al iniciarse, acepte varias conexiones de cliente y escuche en localhost:56268
:
dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
Añade un entorno JAVA_TOOLS_OPTIONS
con la configuración adecuada del protocolo Java Debug Wire Protocol (JDWP) para que el agente de depuración de JDWP espere una conexión de socket en el puerto 5005 y permita que la máquina virtual empiece a ejecutarse antes de que se conecte el depurador:
jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
Para obtener más información sobre la depuración con Skaffold, consulta la documentación de skaffold debug
.
Configurar un contenedor
Para preparar el contenedor para la depuración, sigue las instrucciones del lenguaje que estés usando:
Node.js
- Inicia la aplicación Node.js con
--inspect=<debugPort>
dondedebugPort
procede de la configuración de adjuntos. Por ejemplo:CMD ["node", "--inspect=9229", "index.js"]
Python
- Asegúrate de que el módulo
ptvsd
esté instalado en tu máquina y en tu contenedor. - Inicia la aplicación Python a través de
ptvsd
. El puerto especificado debe coincidir con el campodebugPort
de la configuración de adjuntos. Por ejemplo:CMD ["python", "-m", "ptvsd", "--port", "
" , "app.py"]
Go
- Asegúrate de que el paquete
dlv
esté instalado en tu máquina y en tu contenedor Go. Inicia tu solicitud 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 adjuntar. Por ejemplo:CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
Nota para solucionar problemas: Cuando depures una aplicación Go, la aplicación se detendrá y esperará a que se conecte un depurador. Conecta un depurador para que se inicie el servicio.
Java
- Asegúrate de que la JVM esté instalada en tu máquina.
Inicia la aplicación Java con las siguientes opciones, donde
debugPort
procede 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 Java en modo de depuración y escuchar en el puerto
debugPort
para la conexión: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 que tienes 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
Configurar la conexión
Para asociar un contenedor depurable, debes tener una configuración de asociación de tipo cloudcode.kubernetes
.
Añadir un archivo .vscode/launch.json
Si tu proyecto no tiene un archivo launch.json
en su carpeta .vscode
, puedes añadir uno con el panel Depuración.
Para ir al panel Depuración, haz clic en
Depuración en la barra de actividad.
En el menú desplegable, selecciona Añadir configuración.
Selecciona Cloud Code: Kubernetes como entorno.
Selecciona la opción Attach to Kubernetes Pod (Adjuntar a pod de Kubernetes).
Selecciona el lenguaje de programación que estés usando.
De esta forma, se crea y se abre un archivo
launch.json
para tu proyecto y se crea una configuración de adjuntos.Actualice los atributos de configuración del archivo
launch.json
para que coincidan con los de su proyecto. Para obtener más información sobre los atributos de configuración, consulta Atributos de configuración.
Añade una configuración de adjuntar al archivo .vscode/launch.json
Para añadir una nueva configuración de adjuntos a un archivo .vscode/launch.json
, sigue estos pasos:
- Abre el archivo
launch.json
. - Para invocar el Intellisense del fragmento, haz clic en Añadir configuración.
- Para añadir una configuración de adjuntar, selecciona el fragmento Cloud Code: Attach to Kubernetes Pod (Cloud Code: adjuntar a pod de Kubernetes) del idioma que estés usando.
- Actualice los atributos de la configuración para que coincidan con los de su proyecto. Para obtener más información sobre los atributos de configuración, consulta Atributos de configuración.
Atributos de configuración
Atributo | Descripción |
---|---|
debugPort | Puerto de depuración usado en el contenedor. |
podSelector | 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 | Ruta al directorio local que contiene el programa que se está depurando. El valor predeterminado es ${workspaceFolder}. |
remoteRoot | Ruta absoluta al directorio remoto que contiene el programa que se está depurando (en el contenedor de Kubernetes). |
Adjuntar un depurador a un pod de Kubernetes
Cloud Code para Cloud Shell permite adjuntar 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 adjuntos de tipo cloudcode.kubernetes
.
Para obtener información sobre las diferencias entre adjuntar archivos a un pod de Kubernetes y depurar una aplicación de Kubernetes, consulta Diferencias entre adjuntar un depurador a un pod y depurar una aplicación de Kubernetes.
Para adjuntar un depurador a tu pod de Kubernetes, sigue estos pasos:
- Para ir al panel Depuración, haz clic en
Depuración en la barra de actividad.
Selecciona y lanza la configuración pulsando
F5
.localhost:${debugPort}
se reenvía al puertodebugPort
del contenedor durante la depuración.
La sesión de depuración se ha configurado correctamente. Puedes realizar las tareas que haces normalmente al depurar código local, como definir puntos de interrupción y recorrer el código.
Para inspeccionar variables e información de la pila, usa la barra lateral de depuración. Para interactuar con la sesión de depuración, usa la consola de depuración en el panel inferior del depurador.
Para finalizar la sesión de depuración, haz clic en
Detener en la barra de herramientas de depuración.
Diferencias entre adjuntar un depurador a un pod y depurar una aplicación de Kubernetes
Adjuntar archivos a un pod de Kubernetes | Depurar 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 ejecutándose en el pod de Kubernetes antes de depurarla. | 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 lanzamiento y de adjuntos. |
Configuración de ejemplo:
{ "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 ejemplo:
{ "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 de cada idioma. | Esta configuración no es específica de ningún idioma. |
No hay ningún comando específico. | Comando Depurar en Kubernetes. |
Siguientes pasos
- Usa la sincronización de archivos y la recarga en caliente para acelerar el desarrollo.
- Configura un entorno de desarrollo continuo en Cloud Code.
- Ver registros de Kubernetes en Cloud Code.