Ejecute una aplicación de Kubernetes en Cloud Code para Cloud Shell

Con Cloud Code, puedes ejecutar con facilidad tu aplicación en un clúster de Kubernetes y verla activa si aprovechas skaffold dev. Puedes ejecutar 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.

Ejecuta tu aplicación

  1. Abre la paleta de comandos (presiona Ctrl/Cmd+Shift+P) y ejecuta el comando Cloud Code: Run on Kubernetes.
  2. Confirma si deseas usar el contexto de Kubernetes actual para ejecutar la app (o cambia a una que prefieras). Para obtener más información sobre cómo establecer un contexto de Kubernetes, consulta cómo establecer la configuración.
  3. Si eliges un clúster remoto como contexto, cuando se te solicite, elige un registro de imágenes para enviar las imágenes. Si usas Container Registry, puedes navegar a un registro existente o especificar el nombre de un registro que se creará. Si tu proyecto tiene la API de Artifact Registry habilitada y al menos un repositorio de Artifact Registry, puedes explorar y seleccionar un repositorio de Artifact Registry existente.

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

    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Asegúrate de estar autenticado de forma adecuada si usas un repositorio privado de Docker Hub.

    Cloud Code concatena este registro de imágenes con el nombre de imagen especificado en los manifiestos de Kubernetes para generar el nombre final del repositorio de imágenes.

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

    Esta opción se almacena en tu configuración de inicio de cloudcode.kubernetes (que se encuentra en .vscode/lanzamiento.json).

    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.

    Después del 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.

  4. Una vez que se complete la sesión, puedes usar los siguientes comandos del menú contextual:

    • Open Deployment Logs: 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
  5. Si desactivaste el modo de supervisión en tu configuración de inicio y quieres realizar cambios en tu aplicación, volver a compilarla y volver a implementarla, en el panel Sesiones de desarrollo, haz una pausa en la acción de ejecución y, luego, haz clic en Ícono de vuelve a compilar e implementar Volver a compilar e implementar la aplicación.

  6. Para dejar de ejecutar la aplicación, haz clic en Ícono de detención de depuración Detener en la barra de herramientas de depuración.

    Después de detener la aplicación, todos los recursos de Kubernetes implementados se borran del clúster. Puedes cambiar este comportamiento con la marca cleanUp en la configuración de inicio.

Habilita la sincronización de archivos de Skaffold y la recarga en caliente

Para mejorar la eficiencia de tu flujo de trabajo de desarrollo local y evitar tener que volver a compilar, implementar y reiniciar tus Pods, Skaffold admite la copia de archivos modificados en un contenedor implementado. Esto significa que, cuando realizas cambios en los archivos de código fuente y estáticos, puedes ver los cambios en cuestión de segundos, lo que genera un ciclo de reacción acelerado.

En el caso de los archivos estáticos (como archivos HTML y CSS), el comportamiento de copia de archivos se denomina sincronización de archivos.

Para los archivos de código fuente, este comportamiento se denomina recarga en caliente y admite los siguientes tipos de archivos:

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json

Con la recarga en caliente configurada, Skaffold detecta cambios en los archivos compatibles y los sincroniza con el contenedor en ejecución del clúster. Los cambios en los tipos de archivo que no admiten la recarga en caliente activan la recompilación de una imagen y el reinicio del Pod.

La sincronización automática de archivos y la recarga en caliente están habilitadas de forma predeterminada cuando trabajas con Buildpacks como tu compilador preferido. Para otros compiladores como Docker, puedes especificar una sección sync en tu archivo skaffold.yaml para el artefacto que personalizas.

La configuración de sincronización puede ser una de las siguientes opciones (en orden de preferencia):

  • auto (solo para artefactos de Jib y Buildpacks) Este es el valor predeterminado si no se especifica para Buildpacks).
  • infer
  • manual

En la siguiente sección sync de ejemplo de un archivo skaffold.yaml, se especifica una sincronización manual para sincronizar todos los archivos HTML /static-html con la carpeta static en un contenedor:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

Para obtener una descripción detallada de la sincronización de archivos y especificar reglas de sincronización, consulta la guía de Skaffold sobre la sincronización de archivos.

Cómo elegir un entorno de compilación y compilación

En un proyecto que no contiene un archivo skaffold.yaml en la raíz o no hace referencia a uno skaffold.yaml en su archivo .vscode/launch.json, puedes usar la IU de Cloud Code para elegir un entorno de compilación y compilación. La compilación local es gratuita, ya que usa tus propios recursos. La compilación con Cloud Build es ideal para máquinas más lentas o para las que no coinciden con la arquitectura del procesador del clúster de destino. Para obtener información sobre el costo de compilación de tu aplicación con Cloud Build, consulta Precios de Cloud Build.

Si usas una de las muestras, borra el archivo skaffold.yaml para usar la IU antes de ejecutar una acción de compilación. Si quieres conocer los pasos para elegir un compilador y un entorno de compilación sin la IU, consulta Cómo crear una configuración de Skaffold de forma manual.

  1. En un proyecto sin un archivo skaffold.yaml, abre la paleta de comandos (presiona Ctrl/Cmd+Shift+P) y ejecuta Cloud Code: Run on Kubernetes o Cloud Code: Debug on Kubernetes.

  2. Elige un entorno de compilación.

    Si eliges Cloud Build, especifica el registro de imágenes.

  3. Especifica un compilador (Docker o Buildpack) para cada imagen y su configuración.

  4. Marca o desmarca una de las opciones de configuración y, luego, haz clic en Debug (Depurar) o Run (Ejecutar).

Las opciones que elijas se guardarán en un archivo skaffold.yaml que puedes editar directamente para personalizarlas más.

Personaliza la configuración de inicio

Para configurar la forma en que se ejecuta tu aplicación, puedes personalizar el archivo skaffold.yaml.

También puedes configurar el inicio si especificas los siguientes campos en la configuración de cloudcode.kubernetes del archivo .vscode/launch.json:

  • skaffoldConfig: Especifica el archivo de configuración de skaffold que contiene los parámetros de configuración de compilación y de implementación.
  • perfil: Especifica tu perfil de skaffold preferido. Si no está definido, se usa el perfil predeterminado.
  • imageRegistry: Especifica el registro de imágenes al que se enviarán las imágenes.
  • watch: Especifica si se deben observar los cambios en el lugar de trabajo y vuelve a ejecutar la aplicación. A menos que se establezca en falso de forma explícita, el valor predeterminado es verdadero.
  • cleanUp: Especifica si se deben borrar los recursos de Kubernetes implementados en el clúster después de que se cierra la aplicación. A menos que se establezca en falso de forma explícita, la configuración es verdadera de forma predeterminada.
  • portForward: especifica si se deben reenviar puertos para los recursos expuestos de Kubernetes en el clúster en tu máquina local. A menos que se establezca en falso de forma explícita, el valor predeterminado es verdadero.