Acelera el desarrollo en Cloud Code para VS Code

Si quieres acelerar tu desarrollo local en Cloud Code para VS Code, aprovecha la sincronización de archivos y la recarga en caliente, la implementación automática cuando se guarda y usa los módulos de Skaffold para desarrollar partes de una aplicación por separado.

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

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

En el caso de los archivos estáticos (como HTML y CSS), este 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 los cambios en los archivos compatibles y los sincroniza con el contenedor en ejecución en tu clúster. Los cambios en los tipos de archivos que no admiten la recarga en caliente activan una recompilación de la 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 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 (en orden de preferencia):

  • auto: Skaffold configura la sincronización automáticamente. (solo para artefactos de Jib y Buildpacks). Esta es la configuración predeterminada de los paquetes de compilación.
  • infer: Los destinos de cada archivo modificado se infieren del compilador.
  • manual: Debes especificar los archivos en tu lugar de trabajo local y su destino en el contenedor en ejecución.

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

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

Para obtener un análisis detallado de la sincronización de archivos y especificar las reglas de sincronización, consulta la guía de Skaffold sobre la sincronización de archivos.

Agrega funciones nuevas cuando desarrollas en Kubernetes

Después de configurar la sincronización de archivos y la recarga en caliente, inicia un ciclo de iteración y agrega más funciones a tu proyecto. Los cambios se implementan en tu clúster de Kubernetes sin detener ni quitar la implementación, compilar y etiquetar de forma manual la imagen ni actualizar el clúster.

Un ciclo de iteración estándar se parece al siguiente:

  1. Realiza un cambio en tu proyecto. Por ejemplo, si usas la app de Cloud Code para Java del libro de visitas, agrega un extremo nuevo a la clase FrontendController de la siguiente manera:

    1. Abre el archivo FrontendController.java desde src/main/java/cloudcode/guestbook/frontend y agrega lo siguiente:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. Agrega las importaciones necesarias para las anotaciones nuevas, RequestMapping y ResponseBody.

  2. Guarda los cambios (Ctrl/Cmd+S) o compila el proyecto.

    Puedes mirar el progreso y los registros de la implementación en la ventana de la consola. Después de implementar los cambios, confirma las actualizaciones.

  3. Para finalizar la sesión de desarrollo continuo, haz clic en el ícono Detener.

    Cloud Code borra todos los recursos de Kubernetes que se usan para la sesión de desarrollo.

Desarrolla aplicaciones de microservicios con los parámetros de configuración de Skaffold

Cuando se desarrollan aplicaciones de microservicios, puede ser útil trabajar en secciones separadas de forma independiente para simplificar la depuración y la implementación.

Puedes desarrollar y depurar partes de tu aplicación de forma independiente si la divides en módulos de Skaffold. Por ejemplo, la muestra del Bank of Anthos es una aplicación que contiene diez microservicios. El archivo skaffold.yaml de muestra agrupa estos servicios en cinco módulos de Skaffold llamados setup, db, frontend, backend y loadgenerator.

Cómo definir módulos y dependencias de configuración de Skaffold

Para definir módulos y dependencias de configuración de Skaffold, sigue estos pasos:

  1. Abre el proyecto en el que deseas definir los módulos.

  2. Abre el archivo skaffold.yaml.

  3. Si tu archivo skaffold.yaml tiene varias opciones de configuración, especifica la siguiente línea para que una configuración sea un módulo de Skaffold:

    metadata:
      name: MODULE_NAME_1
    

    Por ejemplo, en skaffold.yaml del Banco de Anthos, el módulo db define las implementaciones de bases de datos:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. Para las configuraciones que dependen de la implementación de otra configuración antes de que se pueda implementar la configuración actual, debes agregar el archivo de configuración a tus dependencias. Para especificar una dependencia de configuración, agrega una lista configs a la sección requires de tu archivo skaffold.yaml.

    Por ejemplo, el archivo skaffold.yaml del Banco de Anthos incluye la dependencia de configuración setup.

    Para definir una dependencia, agrega lo siguiente a tu archivo skaffold.yaml, en el que DEPENDENCY_NAME es el nombre de tu dependencia.

    requires:
        - configs: DEPENDENCY_NAME
    

    Las configuraciones enumeradas de esta manera pueden hacer referencia a dependencias definidas en el mismo archivo o en otros archivos skaffold.yaml en el proyecto actual.

  5. Para probar las dependencias de configuración, compila cada uno de los módulos de Skaffold por separado y asegúrate de que se implementen con sus dependencias. Para ello, sigue los pasos que se indican en Cómo compilar módulos específicos de Skaffold y sus dependencias.

Compila módulos específicos de Skaffold y sus dependencias

Después de definir los módulos y sus dependencias, puedes especificar cuáles quieres ejecutar con Cloud Code en tu archivo launch.json.

Si tu proyecto no tiene un archivo launch.json definido, cuando ejecutes Cloud Code: Run on Kubernetes o Cloud Code: Debug on Kubernetes, se te pedirá que selecciones los módulos que deseas compilar:

  1. Abre la paleta de comandos (Ctrl/Cmd + Shift + P) y, luego, ejecuta Cloud Code: Run on Kubernetes (Cloud Code: Run on Kubernetes).
  2. Haz clic en Select modules.
  3. Elige los módulos que quieres implementar y haz clic en OK. Cada módulo se compila con sus dependencias.
  4. Cuando se te solicite, elige un registro de imágenes y, luego, presiona Enter.

Si tu proyecto tiene un launch.json, sigue estos pasos para elegir los módulos de Skaffold que quieres compilar:

  1. Abre el archivo launch.json de tu proyecto.

  2. Edita la configuración de inicio para agregar la opción skaffoldFlags con una lista delimitada por comas de modules para compilar. Si se omite skaffoldFlags, se compilan todos los módulos.

      {
        "name": "Run on Kubernetes",
        "type": "cloudcode.kubernetes",
        "request": "launch",
        "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
        "skaffoldFlags": {
           "modules": ["MODULE_NAME_2,MODULE_NAME_2"],
        "watch": true,
        "cleanUp": true,
        }
      }
    
  3. Ejecuta la configuración de inicio que editaste.

Desarrollo continuo en Kubernetes

Una vez que hayas configurado tu objetivo de ejecución con las opciones que desees, puedes optar por una ejecución habitual de la aplicación o comenzar un ciclo de iteración de desarrollo en tu IDE para propagar los cambios realizados en la fuente y las dependencias de la aplicación activa.

El objetivo de ejecución Ejecutar en Kubernetes comienza el ciclo de desarrollo en tu clúster de Kubernetes. Después de comenzar el ciclo de desarrollo, Cloud Code mediante Skaffold compila una imagen para el proyecto, la etiqueta, la envía al repositorio configurado y usa kubectl a fin de implementar los manifiestos de Kubernetes del proyecto.

  1. Personaliza la implementación mediante las opciones de configuración disponibles.
  2. Si tu aplicación está configurada para usar módulos de Skaffold, puedes seleccionar módulos específicos para compilar o implementar.
  3. Abre la paleta de comandos (presiona Ctrl/Cmd+Shift+P) y, luego, ejecuta el comando Cloud Code: Run on Kubernetes.
  4. Confirma si quieres usar el contexto de Kubernetes actual para ejecutar la app (o cambia a uno que prefieras). Para obtener más información sobre la configuración de un contexto de Kubernetes, consulta Establece la configuración.
  5. Si elegiste un clúster remoto como contexto, cuando se te solicite, elige un registro de imágenes al cual enviar las imágenes. Si usas Container Registry, puedes navegar a un registro existente o especificar el nombre del registro que deseas crear. Si tu proyecto tiene habilitada la API de Artifact Registry y al menos un repositorio de Artifact Registry, puedes explorar y seleccionar un repositorio de Artifact Registry existente.

    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.

¿Qué sigue?

Obtener asistencia

Para enviar comentarios, informa problemas en GitHub o haz preguntas en Stack Overflow.