Depura una aplicación de Kubernetes

Cloud Code te permite depurar con facilidad una aplicación implementada en un clúster de Kubernetes mediante el uso de skaffold debug. Puedes depurar tu aplicación en un clúster local (como Minikube o Docker Desktop), Google Kubernetes Engine (GKE) o cualquier otro proveedor de servicios en la nube.

No es necesario que completes la configuración manual, como la configuración de la redirección de puertos o la inserción de argumentos de depuración específicos del lenguaje. Solo necesitas una aplicación de Kubernetes lista para Cloud Code que incluya un archivo de configuración skaffold.yaml y una configuración de lanzamiento cloudcode.kubernetes.

Depura una aplicación

  1. En la barra de estado de Cloud Code, elige el comando Debug on Kubernetes (Depurar en Kubernetes).
  2. Si tu aplicación no tiene la configuración necesaria de Skaffold o de configuración de inicio de cloudcode.kubernetes, Cloud Code te ayudará a definirla.
  3. Confirma si quieres usar el contexto de Kubernetes actual para ejecutar la app (o cambia al que prefieras).
  4. Si eliges un clúster remoto como contexto, se te solicitará que proporciones un registro de imágenes para enviar las imágenes.

    En los siguientes ejemplos, se muestra cómo especificar dónde se almacenan las imágenes de contenedor para algunos registros comunes:

    Docker Hub docker.io/{account}
    Si usas un repositorio privado de Docker Hub, asegúrate de tener la autenticación autenticada.
    Google Container Repository (GCR) gcr.io/{project_id}

    Para 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 opción se almacena en la configuración de lanzamiento cloudcode.kubernetes (se encuentra en .vscode/launch.json).

    Para obtener más información, consulta la guía de control del registro de imágenes.

    Cloud Code compila tus contenedores, los envía al registro, aplica la configuración de Kubernetes al clúster y espera el lanzamiento.

    Después del lanzamiento, Cloud Code reenvía automáticamente todos los puertos del contenedor declarados a tu máquina y muestra las URL en la ventana de salida para que puedas explorar la aplicación activa.

    Redirecciona los puertos y muestra las URL en la ventana de resultados

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

    De forma alternativa, puede presionar ESC para omitir la depuración del contenedor.

    Solicitud raíz remoto

    Cloud Code adjunta una sesión de depuración para cada contenedor depurable en la aplicación.

    Ahora puedes realizar las mismas tareas que sueles hacer cuando depuras código local, como establecer interrupciones y revisar el código paso a paso, en un clúster de Kubernetes en vivo.

    De forma predeterminada, cuando se guarda de forma automática un cambio en la aplicación, Cloud Code vuelve a implementar la aplicación 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 del proyecto.

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

  7. Una vez que se completa la sesión, hay opciones adicionales del menú contextual disponibles para supervisar la aplicación y los recursos mediante la barra de estado de Cloud Code, que incluye lo siguiente:

    • Abrir registros de implementaciones: abre los registros de aplicaciones de una implementación específica con el visor de registros de Cloud Code.
    • Abrir URL del servicio: Abre la URL del servicio de la aplicación de un servicio específico en un navegador web.
    • Activar o desactivar el modo de reproducción: Activa o desactiva el modo de reproducción para la sesión actual. De forma predeterminada, Cloud Code observa de forma continua el sistema de archivos en busca de cambios en los archivos, como la configuración o el código de Kubernetes, vuelve a compilar los contenedores y vuelve a implementar la aplicación en el clúster para que tu { Los cambios se reflejan casi en tiempo real.
  8. 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.

    Cuando termines la sesión de depuración, todos los recursos implementados de Kubernetes se borrarán del clúster.

Detalles de configuración

Cloud Code, que funciona con Skaffold, maneja automáticamente los siguientes detalles de configuración para todos los lenguajes compatibles:

  • Redireccionar el puerto de depuración para poder conectar 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.
  • Conserva las definiciones de asignación de origen en las sesiones. Para personalizar estas definiciones, edita directamente tu .vscode/launch.json.

Cloud Code también maneja 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

La instalación del depurador dlv mediante un contenedor Init y la reescritura del punto de entrada para 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 depurado durante 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

Agregar un entorno JAVA_TOOLS_OPTIONS con la configuración adecuada del protocolo de depuración de Java (JDWP) para que el agente de depuración de JDWP detecte una conexión de socket en el puerto 5005 y permita que la VM comience a ejecutarse antes del depurador:

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

Para obtener más detalles sobre la depuración con tecnología de Skaffold, consulta la documentación de skaffold debug.

Adjunta el depurador a un Pod de Kubernetes

Cloud Code para VS Code también admite la adjunción de un depurador a un Pod de Kubernetes. Para obtener una comparación, consulta Adjunta a un pod de Kubernetes en lugar de depurar una aplicación de Kubernetes.