Depura una aplicación de Kubernetes

Cloud Code te permite depurar fácilmente una aplicación implementada en un clúster de Kubernetes si aprovechas skaffold debug.

Puedes depurar tu aplicación en un clúster local (como Minikube o Docker Desktop), Google Kubernetes Engine o cualquier otro proveedor de servicios en la nube.

Además, con la compatibilidad de depuración de Cloud Code, no necesitas completar la configuración manual, como configurar la redirección de puertos o inyectar argumentos de depuración específicos de un idioma. Solo necesitas una aplicación de Kubernetes lista para usar con 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 Depurar en Kubernetes.
  2. Si tu aplicación no tiene la configuración necesaria de Skaffold o de la configuración de lanzamiento cloudcode.kubernetes, Cloud Code te permite configurarlas.
  3. Confirma si deseas usar el contexto de Kubernetes actual para ejecutar la app (o cambiar a una preferida)
  4. Si el contexto elegido es de un clúster remoto, se te solicitará que proporciones un registro de imágenes para enviar las imágenes.

    Los siguientes ejemplos muestran cómo especificar dónde se almacenan las imágenes de contenedor en algunos registros comunes:

    Docker Hub docker.io/{account}
    Asegúrate de estar autenticado correctamente si usas un repositorio privado de Docker Hub.
    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 especificado en los manifiestos de Kubernetes. Esta opción se almacena en la configuración de lanzamiento cloudcode.kubernetes (que se encuentra en .vscode/launch.json).

    Si deseas obtener más información, consulta la guía de administración del registro de imágenes.

    Cloud Code compila tus contenedores, los envía al registro, aplica las configuraciones de Kubernetes al clúster y espera el lanzamiento.

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

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

  6. Para cada contenedor depurable en tu aplicación, confirma o ingresa el directorio en el contenedor remoto donde 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 haces normalmente cuando depuras código local, como configurar interrupciones y revisar el código paso a paso en un clúster de Kubernetes en vivo.

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

  8. Una vez completada la sesión, estará disponible la opción de menú contextual adicional para supervisar tu aplicación y sus recursos con la barra de estado de Cloud Code, incluidos los siguientes:

    • Abrir registros de implementación: abre los registros de la aplicación de una implementación específica con el visor de registros de Cloud Code.
    • URL de servicio abierta:abre la URL de servicio de la aplicación de un servicio específico en un navegador web.
    • Activar o desactivar el modo de reloj: activa o desactiva el modo de reloj para la sesión actual (no está disponible para las sesiones de depuración). De forma predeterminada, Cloud Code observa de manera continua el sistema de archivos para detectar cambios en tus archivos, como la configuración o el código de Kubernetes, reconstruye los contenedores y vuelve a implementar la aplicación en el clúster para que tus ediciones. se reflejan casi en tiempo real.

      Opciones disponibles a través de la barra de estado de Cloud Code: Abrir registros de implementación, URL de servicio abierto y activar el modo de supervisión, además de acciones normales de Cloud Code

  9. Con el objetivo de finalizar la sesión de depuración, haz clic en el ícono para detener en la barra de herramientas de depuración.

    Después de finalizar la sesión de depuración, todos los recursos de Kubernetes implementados se borran del clúster.

Detalles de configuración

De forma interna, Cloud Code, con la tecnología de Skaffold, controla 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 cuyos lenguajes son compatibles con la depuración de Cloud Code) configurados en skaffold.yaml, se adjunta un depurador a cada uno de los contenedores depurables.
  • 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 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

Instalar el depurador dlv con un contenedor init y reescribir el punto de entrada de modo que la sesión de depuración iniciada solo se ejecute con un servidor de depuración (en modo sin interfaz gráfica) y continúa el proceso depurado al 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 de protocolo de depuración de Java (JDWP) apropiada, de modo que el agente de depuración JDWP escuche para una conexión de socket en el puerto 5005 y permita que la VM comience a ejecutarse antes de Debugger se adjunta:

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 VS Code también admite adjuntar un depurador a un pod de Kubernetes. Para obtener una comparación, consulta Cómo adjuntar a un pod de Kubernetes frente a depurar una aplicación de Kubernetes.