Empezar a usar Skaffold en Cloud Deploy

En este documento se describe cómo empezar a usar Skaffold como parte de Cloud Deploy. Se incluye la siguiente información:

  • Configurar Skaffold para usarlo con una canalización de distribución de Cloud Deploy
  • Usar Skaffold y Cloud Deploy con herramientas de renderización de terceros, como Helm y Kustomize
  • Opcional: usar Skaffold para el desarrollo local
  • Opcional: usar Skaffold para la integración continua y el despliegue continuo (CI/CD)

¿Por qué Skaffold?

¿Quieres saber por qué usa Cloud Deploy Skaffold y por qué tienes que gestionar una configuración de Skaffold? Sigue leyendo.

Tengo experiencia con CI/CD, pero no uso Skaffold

Skaffold es una herramienta de línea de comandos de código abierto que mejora la productividad de los desarrolladores. Orquesta el desarrollo continuo, la integración continua (CI) y la entrega continua (CD).

Skaffold ofrece una configuración declarativa y portátil, con una arquitectura conectable, que te permite usar diferentes herramientas en la fase de renderización.

Cuando se crea una versión, Cloud Deploy llama a Skaffold para renderizar los manifiestos. En el momento del despliegue, Cloud Deploy vuelve a llamar a Skaffold para aplicar esos manifiestos y desplegar tu aplicación en cada destino de tu progreso. Después de la implementación, Skaffold realiza comprobaciones del estado para monitorizar el tiempo de ejecución de destino y comprobar que la implementación se ha realizado correctamente.

Skaffold para el desarrollo continuo

Cuando usas Skaffold para el desarrollo continuo, las imágenes se compilan, se prueban y se implementan en un clúster (o en Minikube) a medida que cambias el código. Las extensiones de IDE Cloud Code para VS Code y Cloud Code para IntelliJ integran Skaffold en los IDEs de Visual Studio Code y JetBrains para ofrecer un desarrollo continuo.

Skaffold para la entrega continua

También puedes usar Skaffold para la entrega continua, con pasos de compilación, implementación, renderización y aplicación. Cloud Deploy usa las funciones renderizar y aplicar de Skaffold. Para usar Cloud Deploy, necesitas al menos un archivo de configuración skaffold.yamlválido.

Con Skaffold, también puedes integrar herramientas de gestión de archivos de manifiesto de terceros, como Helm y Kustomize. Si usas Skaffold de esta forma, podrás usar las funciones de esas herramientas para renderizar manifiestos. kubectl sigue siendo el implementador de estos manifiestos.

No tengo experiencia en el despliegue en Kubernetes

Con Skaffold, puedes configurar un conjunto básico de manifiestos para todas tus implementaciones. Después, puedes usar el motor de renderizado de Skaffold a través de Cloud Deploy para renderizar y, a continuación, desplegar cada manifiesto específico de un despliegue a partir de uno de esos manifiestos base.

Consulta más información sobre la gestión de manifiestos, incluidos ejemplos de uso de Skaffold y Cloud Deploy con herramientas de plantillas de manifiestos comunes, como Helm y Kustomize.

¿Qué se necesita para que funcione Cloud Deploy?

Para usar una canalización de distribución básica de Cloud Deploy, el archivo de configuración skaffold.yaml debe tener al menos la siguiente configuración:

  • La información de encabezado que necesitan todas las configuraciones de skaffold.yaml:

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Una estrofa manifests para GKE, GKE Enterprise o Cloud Run que incluya todos los archivos de manifiesto de Kubernetes sin procesar (a menos que uses una herramienta de gestión de archivos de manifiesto, como Helm o Kustomize).

    A continuación, se muestra un ejemplo en el que se usa un manifiesto de Kubernetes sin formato:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Si tienes previsto usar un renderizador (como Helm o Kustomize) para renderizar manifiestos, consulta Añadir compatibilidad con Helm a skaffold.yaml y Añadir compatibilidad con Kustomize a skaffold.yaml para obtener información sobre cómo configurar Skaffold para usar estas herramientas.

    Para ver ejemplos de Helm y Kustomize, consulta Gestionar manifiestos.

  • Una sección deploy con deploy.kubectl para desplegar en GKE o GKE Enterprise, o deploy.cloudrun para desplegar en Cloud Run.

    En el caso de los destinos de GKE y GKE Enterprise:

    deploy:
      kubectl: {}
    

    La estrofa de implementación implementa los manifiestos de la aplicación que se han proporcionado en la estrofa de manifiestos.

    En el caso de los destinos de Cloud Run:

    deploy:
      cloudrun: {}
    

    La estrofa de implementación implementa los manifiestos de la aplicación proporcionados en la estrofa manifests.

Si usa segmentaciones personalizadas, su skaffold.yaml debe tener el encabezado (apiVersion y kind:), además de las acciones personalizadas que usará la segmentación personalizada si el tipo de segmentación personalizada aún no hace referencia a una configuración remota de Skaffold.

Crear un archivo skaffold.yaml

Cloud Deploy usa Skaffold para renderizar y desplegar tus aplicaciones.

En cada lanzamiento, debe proporcionar al menos un archivo skaffold.yaml que identifique los manifiestos que se van a usar. Consulta la sección anterior para obtener información sobre lo que debe incluir este archivo.

Hacer que Cloud Deploy genere tu skaffold.yaml

Si no tienes un archivo skaffold.yaml, pero sí un manifiesto de Kubernetes o un archivo de definición de servicio de Cloud Run, Cloud Deploy puede generar un archivo skaffold.yaml por ti.

El archivo Skaffold generado estará disponible en el directorio de almacenamiento provisional de Cloud Storage una vez que se haya completado el lanzamiento.

El siguiente comando incluye la marca --from-k8s-manifest, que transfiere el manifiesto de Kubernetes. Cloud Deploy usa la información del manifiesto para generar el skaffold.yaml, que se utiliza en el lanzamiento.

gcloud deploy releases create  RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION

Para generar el skaffold.yaml a partir de un archivo YAML de un servicio de Cloud Run, usa el mismo comando, pero con --from-run-manifest en lugar de --from-k8s-manifest.

Si usas cualquiera de estas marcas con la marca --skaffold-file o con la marca --source, se generará un error.

Usar el archivo skaffold.yaml generado

El skaffold.yaml generado es adecuado para la incorporación, el aprendizaje y la demostración de Cloud Deploy. Una vez que te hayas familiarizado con Cloud Deploy y para las cargas de trabajo de producción, puede que quieras una configuración de Skaffold que diferencie tus destinos (mediante perfiles de Skaffold).

Cuando uses el archivo skaffold.yaml generado como punto de partida para crear tu propia configuración de Skaffold diferenciada, asegúrate de usar el archivo del archivo de origen de renderización, no el archivo renderizado. La fuente de renderización se puede descargar desde la pestaña Artefactos de la página Detalles del lanzamiento.

  • Este skaffold.yaml generado se incluye en la fuente de renderización almacenada en un segmento de Cloud Storage.

    Para ver este archivo, descarga el archivo .tar.gz y extráelo.

  • El skaffold.yaml renderizado está disponible en Artefactos de destino.

    En la sección Artefactos de destino, haga clic en Ver artefactos.

    Página de detalles del lanzamiento, que muestra los artefactos de origen y de destino de la renderización

Usar Skaffold para el desarrollo local

Una de las ventajas de Skaffold es que puedes usarlo para el desarrollo local y para la CI/CD. En el modo dev, Skaffold monitoriza los archivos de origen y, cuando detecta un cambio, vuelve a compilar las imágenes, vuelve a probarlas y vuelve a desplegar los contenedores en un clúster de minikube (por ejemplo) en tu máquina local.

Si usas Skaffold de esta forma, puedes usar los mismos comandos de forma local que para la implementación remota.

Si usas Skaffold para el desarrollo local, puedes definir perfiles de Skaffold independientes para tus destinos y una sección de implementación predeterminada para el desarrollo local.

Cuando detienes el modo dev, Skaffold elimina los artefactos implementados del clúster.

Usar Skaffold para CI/CD

Además de usar Skaffold para la compilación y el despliegue locales continuos, puedes usarlo para CI/CD. Cloud Deploy usa las funciones de CI/CD de Skaffold para renderizar y aplicar tus manifiestos, así como para desplegar tu aplicación en los destinos que hayas definido, dadas las imágenes de contenedor creadas con una herramienta de CI como Cloud Build y un registro de imágenes como Artifact Registry.

Renderizar, desplegar y aplicar

Skaffold separa el proceso de renderización del manifiesto de la implementación. Cloud Deploy llama a skaffold render para renderizar los manifiestos y a skaffold apply para aplicarlos al destino.

Esta separación entre la representación y la aplicación te permite capturar el estado declarativo completo de tu aplicación en la configuración, de modo que se pueda aplicar de forma segura y repetible (por ejemplo, para restauraciones). Esta técnica también facilita las aprobaciones. Como los manifiestos se renderizan para todos los destinos antes de la primera implementación, puede ver el archivo YAML renderizado que se aplicará a cada destino.

Cloud Deploy no admite el uso de otros sistemas de implementación para desplegar tu aplicación. Sin embargo, puedes usar herramientas como Helm o Kustomize para renderizar.

Para obtener más información sobre cómo se implementa Cloud Deploy mediante kubectl como implementador, consulta Arquitectura del servicio Cloud Deploy.

Acerca de los perfiles de Skaffold

Puedes crear perfiles de Skaffold independientes, identificados en skaffold.yaml, en una estrofa profiles:.

Cuando usas perfiles de Skaffold con Cloud Deploy, puedes crear perfiles independientes para todos o algunos de tus destinos. Por ejemplo, diferentes perfiles para dev, staging y prod.

No es necesario usar perfiles para usar Skaffold en Cloud Deploy, pero son útiles para definir personalizaciones de manifiestos entre tus destinos. Por ejemplo, puedes usar diferentes archivos kustomization.yaml de Kustomize por destino.

Añadir compatibilidad con Kustomize a tu skaffold.yaml

Para integrar tu configuración de Kustomize con tu configuración de Cloud Deploy o Skaffold, debes hacer lo siguiente:

  1. Incluye un archivo kustomization.yaml entre tus archivos de configuración.

    Puedes almacenar los archivos de configuración en un directorio local o en un segmento de Cloud Storage.

  2. En el archivo skaffold.yaml, crea una sección deploy para cada perfil.

    También puedes tener una sección deploy fuera de cualquier perfil definido si no usas perfiles o para una configuración de implementación predeterminada que no esté vinculada a un perfil.

    A continuación, se muestra un ejemplo de configuración de Skaffold que incluye deploy estrofas por perfil y usa una aplicación de ejemplo ficticia llamada my-app:

    apiVersion: skaffold/v4beta7
    kind: Config
    build:
      artifacts:
        - image: my-app-web-profiles
          context: my-app-web-profiles
        - image: my-app-application-profiles
          context: my-app-application-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/local
    - name: test
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/test
    - name: staging
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/staging
    - name: prod
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/prod
    deploy:
      kubectl: {}
    

    La configuración de Skaffold que se muestra aquí tiene perfiles independientes para los destinos test, staging y prod. También muestra un perfil para el desarrollo local. En cada perfil, hay una estrofa deploy.kustomize con una ruta que apunta a la ubicación de la personalización que se va a usar en ese destino.

Añadir compatibilidad con Helm a tu skaffold.yaml

Puedes usar Helm para renderizar tus manifiestos. Cloud Deploy no usa Helm para desplegar tus aplicaciones y solo admite kubectl como herramienta de despliegue.

Para usar Helm, necesitas tus gráficos de Helm, que deben estar almacenados en cualquier ubicación a la que puedas hacer referencia desde tu skaffold.yaml. Esta ubicación puede ser un sistema de archivos, un repositorio, posiblemente junto con tu skaffold.yaml o un repositorio de Open Container Initiative (OCI).

Para usar un gráfico de Helm, añade una estrofa helm a tu archivo skaffold.yaml.

apiVersion: skaffold/v4beta7
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
manifests:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts
deploy:
  kubectl: {}

La referencia skaffold.yaml muestra lo que se necesita en esta estrofa helm.

Funciones de Skaffold no admitidas

Las siguientes funciones de Skaffold no se pueden usar en Cloud Deploy:

Siguientes pasos

  • Visita el sitio de Skaffold para descubrir cómo funciona y qué puede hacer por ti.

  • Practica con Cloud Deploy y los perfiles de Kustomize y Skaffold.

  • Consulta cómo selecciona Cloud Deploy la versión de Skaffold que se va a usar, cuándo cambia la versión de Skaffold y cómo determinar qué versión se está usando.

  • Consulta cómo usar perfiles de Skaffold con herramientas avanzadas de gestión de archivos de manifiesto, como Helm, Kustomize y kpt.