Depura aplicaciones de Kubernetes en Cloud Code para Cloud Shell

Cloud Code te permite depurar una aplicación implementada en un clúster de Google Kubernetes Engine (GKE) si aprovechas 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 asistencia para la depuración de Cloud Code, no tienes que completar configuración manual, como la redirección de puertos o la incorporación de configuraciones los argumentos de depuración. La depuración requiere de Cloud Code aplicación de GKE que incluye un skaffold.yaml de configuración de Terraform y una configuración de inicio cloudcode.kubernetes.

Cómo depurar una aplicación de GKE

Para comenzar a depurar tu aplicación de GKE, sigue estos pasos: pasos:

  1. En la barra de estado de Cloud Code, haz clic en el nombre del proyecto activo.

    Nombre del proyecto activo en la barra de estado

  2. En el menú de Selección rápida que aparece, selecciona Debug on Kubernetes.

  3. Si tu aplicación no tiene la configuración de Skaffold necesaria o Configuración de inicio de cloudcode.kubernetes, Cloud Code te ayuda a configurarlos.

  4. Confirma si quieres usar el Contexto de Kubernetes para ejecutar la app (o cambiar a una preferida).

  5. Si elegiste un clúster remoto como contexto, elige una imagen cuando se te solicite. al que se enviarán las imágenes. Si usas Container Registry, puedes explorar un registro existente o especificar el nombre de un registro para crearlo. Si tu proyecto tiene La API de Artifact Registry está habilitada y al menos un repositorio de Artifact Registry puedes navegar hasta un repositorio existente de Artifact Registry y seleccionarlo.

    En los siguientes ejemplos, se muestra cómo especificar la ubicación de las imágenes de contenedor almacenados en algunos registros comunes:

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Asegúrate de lo siguiente: se autenticó correctamente si usas un repositorio privado de Docker Hub.

    Para generar el nombre final del repositorio de imágenes, Cloud Code concatena este registro de imágenes con el nombre de imagen especificado en los manifiestos de Kubernetes. Esta elección está almacenada 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 manejo 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.

  6. Para cada contenedor depurable de tu app, confirma o ingresa el en el contenedor remoto donde está el programa que quieres depurar ubicado.

    También puedes presionar ESC para omitir la depuración del contenedor.

    Solicitud raíz remoto

    Cloud Code adjunta una sesión de depuración para cada depuración contenedor en 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 un cambio en tu aplicación se guarda automáticamente, Cloud Code vuelve a implementar tu aplicación y configura una nueva depuración sesión. Puedes activar o desactivar esta función con la marca watch en el bucket iniciar la configuración.

  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.

  8. Una vez finalizada la sesión, puedes usar el siguiente menú contextual comandos:

    • Abrir registros de implementación: abre los registros de la aplicación de un con el Explorador de registros de Cloud Code.
    • Abrir URL de servicio: abre la URL de servicio de la aplicación de una dirección servicio en un navegador web
  9. Si desactivaste el modo de supervisión en la configuración de inicio y quieres realizar cambios en tu aplicación y volver a compilarla e implementarla, en el panel Development sessions, pausa la acción de ejecución y, luego, haz clic Ícono de vuelve a compilar e implementar Vuelve a compilar y a implementar la aplicación.

  10. Con el objetivo de finalizar la sesión de depuración, haz clic en Ícono de detención de depuración 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

Cloud Code, con la tecnología de Skaffold, se activa automáticamente controla los siguientes detalles de configuración para todos los idiomas 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 compatible con la depuración de Cloud Code) configurado en skaffold.yaml, luego se adjunta un depurador a cada contenedor depurable.
  • Definiciones persistentes de asignación de fuentes entre sesiones puedes personalizarlos las definiciones editando directamente tu archivo .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

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 depuración de Java adecuada configuración del protocolo Wire (JDWP), de modo que el agente de depuración de JDWP escuche para una conexión de socket en el puerto 5005 y permite que la VM comience a ejecutarse antes de adjuntar el 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

Configura tu contenedor

Para preparar tu contenedor para la depuración, sigue las instrucciones de la idioma que utilizas:

Node.js

  • Inicia la aplicación de Node.js con --inspect=<debugPort> en la que debugPort proviene de adjuntar configuración. Por ejemplo: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Asegúrate de tener el módulo ptvsd instalado 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 campo debugPort en la configuración de conexión. Por ejemplo:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]

Go

  • Asegúrate de tener las Paquete dlv instalar en tu máquina y en tu contenedor de Go.
  • Inicia tu aplicación de Go con dlv debug

    El puerto especificado en el comando de inicio debe ser el mismo que el El valor del atributo debugPort en el Adjunta la configuració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é instalado en tu máquina.
  • Inicia la aplicación de Java con las siguientes opciones, en las que debugPort proviene de Adjunta la configuración.

    -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 la línea de comandos .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

Establece la configuración de conexión

Para adjuntar a un contenedor depurable, debes tener un adjuntar configuración del tipo cloudcode.kubernetes.

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

  1. Para navegar al panel Depurar, haz clic en Ícono Depurar Depurar en la barra de actividades.

  2. Selecciona Add Configuration en el menú desplegable.

  3. Selecciona Cloud Code: Kubernetes como entorno.

    Configura Cloud Code: Kubernetes como el entorno.

  4. Selecciona la opción Attach to Kubernetes Pod.

    Selecciona la opción de configuración de Kubernetes

  5. Selecciona el lenguaje de programación que usas.

    Esto creará y abrirá un archivo launch.json para tu proyecto, además de una adjuntar configuración por ti.

  6. Actualiza los atributos de configuración en el archivo launch.json 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.

Agrega una configuración de conexión a tu archivo .vscode/launch.json

Para agregar una nueva configuración de conexión a un archivo .vscode/launch.json existente, haz lo siguiente:

  1. Abre el archivo launch.json.
  2. Para invocar el fragmento Intellisense, haz clic en Agregar configuración (Add Configuration).
  3. Para agregar una configuración de conexión, selecciona la Fragmento Cloud Code: Adjunta al Pod de Kubernetes del lenguaje en el que te encuentras. usan.
  4. Actualiza los atributos de la configuración para que coincidan con los de tu en un proyecto final. 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 el 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. 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 conectar un depurador a tu pod de Kubernetes

Cloud Code para Cloud Shell admite adjuntar un depurador a un Pod de Kubernetes para para Node.js, Python, Go, Java y .NET. Solo necesitas un contenedor depurable y una Attach configuration de tipo cloudcode.kubernetes

Para obtener información sobre cómo se diferencia adjuntar a un Pod de Kubernetes depurar una aplicación de Kubernetes, consulta Diferencias entre adjuntar un depurador a un Pod y depurar una aplicación de Kubernetes

Para conectar un depurador a tu pod de Kubernetes, realiza las siguientes tareas:

  1. Para navegar al panel de depuración, haz clic en Ícono Depurar Depurar en la barra de actividad.
  2. Presiona F5 para seleccionar y, luego, iniciar la configuración.

    • Se reenvió el puerto de localhost:${debugPort} a debugPort el el contenedor durante la depuración.

    La sesión de depuración ya se encuentra configurada correctamente. Puedes realizar las tareas que normalmente haces cuando depuras código local, como establecer puntos de interrupción y recorrer el código.

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

  4. Para finalizar la sesión de depuración, haz clic en Ícono de detención de depuración 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

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 estar ejecutándose 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) del tipo cloudcode.kubernetes y solicita attach. Usa la configuración (.vscode/launch.json) del tipo cloudcode.kubernetes y solicita launch.
Para obtener más información, consulta Configuración de inicio y conexión.
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 no es específica del lenguaje.
Sin comando dedicado Comando Depurar en Kubernetes.

¿Qué sigue?