En este documento, se describe cómo comenzar a usar Skaffold como parte de Cloud Deploy, lo que incluye lo siguiente:
- Configura Skaffold para usarlo con una canalización de entrega de Cloud Deploy
- Usar Skaffold y Cloud Deploy con herramientas de renderización de terceros, como Helm y Kustomize
- De manera opcional, usa Skaffold para el desarrollo local
- De manera opcional, usa Skaffold para la integración continua y la implementación continua (CI/CD)
¿Por qué usar Skaffold?
¿Quieres saber por qué Cloud Deploy usa Skaffold y por qué necesitas administrar una configuración de Skaffold? Sigue leyendo.
Tengo experiencia en CI/CD, pero no uso Skaffold actualmente
Skaffold es una herramienta de línea de comandos de código abierto que mejora la productividad de los desarrolladores. Organiza el desarrollo continuo, la integración continua (CI) y la entrega continua (CD).
Skaffold proporciona una configuración declarativa y portátil con una arquitectura conectable, lo que te permite usar diferentes herramientas para la fase de renderización.
Cuando se crea una versión, Cloud Deploy llama a Skaffold para renderizar tus manifiestos. En el momento de la implementación, Cloud Deploy vuelve a llamar a Skaffold para aplicar esos manifiestos y, así, implementar tu aplicación en cada destino de tu progresión. Después de la implementación, Skaffold realiza verificaciones de estado para supervisar el tiempo de ejecución de destino y garantizar que la implementación se haya realizado correctamente.
Skaffold para el desarrollo continuo
Cuando usas Skaffold para el desarrollo continuo, las imágenes se compilan, prueban y se implementan en un clúster (o Minikube) a medida que cambias el código. Las extensiones de IDE de Cloud Code para VS Code y Cloud Code para IntelliJ integran Skaffold en los IDE de Visual Studio Code y JetBrains para el 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 capacidades de renderización y aplicación de Skaffold. Para usar Cloud Deploy, necesitas al menos un archivo de configuración skaffold.yaml válido.
A través de Skaffold, también puedes realizar integraciones con herramientas de administración de manifiestos de terceros, como Helm y Kustomize.
Usar Skaffold de esta manera te permite usar las funciones de esas herramientas para renderizar manifiestos. kubectl sigue siendo el implementador de estos manifiestos.
No tengo experiencia en la implementación en Kubernetes
Con Skaffold, puedes configurar un conjunto base de manifiestos para todas tus implementaciones. Luego, puedes usar el motor de renderización de Skaffold, a través de Cloud Deploy, para renderizar y, luego, implementar cada manifiesto específico de la implementación desde uno de esos manifiestos base.
Obtén más información para administrar manifiestos, incluidos ejemplos del uso de Skaffold y Cloud Deploy con herramientas comunes de plantillas de manifiestos, como Helm y Kustomize.
¿Qué se necesita para que Cloud Deploy funcione?
Para usar una canalización de entrega básica de Cloud Deploy, el archivo de configuración skaffold.yaml debe tener, al menos, la siguiente configuración:
Información del encabezado que necesitan todas las configuraciones de
skaffold.yaml:apiVersion: skaffold/v4beta7 kind: ConfigUna sección
manifests, para GKE, clústeres adjuntos de GKE o Cloud Run, que enumera todos los manifiestos sin procesar de Kubernetes (a menos que uses una herramienta de administración de manifiestos, como Helm o Kustomize).A continuación, se muestra un ejemplo con un manifiesto de Kubernetes sin procesar:
manifests: rawYaml: - deployment.yamlSi planeas usar un renderizador (como Helm o Kustomize) para renderizar manifiestos, consulta Cómo agregar compatibilidad con Helm a tu archivo skaffold.yaml y Cómo agregar compatibilidad con Kustomize a tu archivo skaffold.yaml para obtener orientación sobre cómo configurar Skaffold para usar estas herramientas.
Para ver ejemplos de Helm y Kustomize, consulta Administra manifiestos.
Una sección
deploy, condeploy.kubectlpara implementar en GKE o en clústeres adjuntos de GKE, odeploy.cloudrunpara implementar en Cloud Run.En el caso de los clústeres de GKE y los clústeres conectados de GKE, haz lo siguiente:
deploy: kubectl: {}La estrofa deploy implementa los manifiestos de la aplicación que se proporcionaron en la estrofa manifests.
Para destinos de Cloud Run, haz lo siguiente:
deploy: cloudrun: {}La sección deploy implementa los manifiestos de la aplicación proporcionados en la sección manifests.
Si usas destinos personalizados, tu skaffold.yaml debe tener el encabezado (apiVersion y kind:), además de las acciones personalizadas que usará el destino personalizado si el tipo de destino personalizado aún no hace referencia a una configuración remota de Skaffold.
Crea un archivo skaffold.yaml
Cloud Deploy usa Skaffold para renderizar e implementar tus aplicaciones.
Para cada versión, debes proporcionar al menos un archivo skaffold.yaml que identifique los manifiestos que se usarán. Consulta la sección anterior para obtener orientación sobre lo que debe incluirse en este archivo.
Haz 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 de Skaffold generado estará disponible en el directorio de etapa de pruebas de la fuente de Cloud Storage una vez que se complete la versión.
El siguiente comando incluye la marca --from-k8s-manifest, que pasa el manifiesto de Kubernetes. Cloud Deploy usa la información del manifiesto para generar el skaffold.yaml, que luego se usa para la versión.
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 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 la marca --source, se generará un error.
Cómo 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. Después de que te familiarices con Cloud Deploy y para las cargas de trabajo de producción, es posible que desees una configuración de Skaffold que diferencie tus destinos (con perfiles de Skaffold).
Cuando uses el archivo skaffold.yaml generado como punto de partida para crear tu propia configuración diferenciada de Skaffold, asegúrate de usar el archivo en el archivo fuente de renderización, no el archivo renderizado. La fuente de renderización se puede descargar desde la pestaña Artifacts en la página Release details.
Este
skaffold.yamlgenerado se incluye en la fuente de renderización almacenada en un bucket de Cloud Storage.Para ver este archivo, descarga el archivo
.tar.gzy extráelo.El
skaffold.yamlrenderizado está disponible en Artefactos de destino.En la sección Artefactos de destino, haz clic en Ver artefactos.

Usa 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 supervisa tus archivos fuente y, cuando detecta un cambio, vuelve a compilar las imágenes, vuelve a realizar las pruebas y vuelve a implementar los contenedores en un clúster de minikube (por ejemplo) en tu máquina local.
Cuando usas Skaffold de esta manera, 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 separados para tus destinos y una sección de implementación predeterminada para el desarrollo local.
Cuando detienes el modo dev, Skaffold limpia los artefactos implementados del clúster.
Usa Skaffold para CI/CD
Además de usar Skaffold para la compilación y la implementación locales continuas, puedes usarlo para CI/CD. Cloud Deploy usa las funciones de CI/CD en Skaffold para renderizar y aplicar tus manifiestos, y para implementar tu aplicación en los destinos definidos, dadas las imágenes de contenedor compiladas con una herramienta de CI como Cloud Build y un registro de imágenes como Artifact Registry.
Renderizar, implementar 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 renderizació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 reversiones). Esta técnica también facilita las aprobaciones. Dado que los manifiestos se renderizan para todos los destinos antes del primer lanzamiento, puedes ver el código YAML renderizado que se aplicará a cada destino.
Cloud Deploy no admite el uso de otros implementadores para implementar tu aplicación. Sin embargo, puedes usar herramientas como Helm o Kustomize para la renderización.
Para obtener más información sobre cómo Cloud Deploy realiza implementaciones con kubectl como implementador, consulta Arquitectura del servicio de Cloud Deploy.
Acerca de los perfiles de Skaffold
Puedes crear perfiles de Skaffold separados, identificados en skaffold.yaml, en una sección profiles:.
Cuando usas perfiles de Skaffold con Cloud Deploy, puedes crear perfiles separados para todos tus destinos o algunos de ellos. Por ejemplo, diferentes perfiles para dev, staging y prod.
Los perfiles no son necesarios para usar Skaffold en Cloud Deploy, pero son útiles para definir personalizaciones de manifiestos entre tus destinos, por ejemplo, usando diferentes archivos kustomization.yaml de Kustomize por destino.
Agrega 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:
Incluye un archivo
kustomization.yamlentre tus archivos de configuración.Puedes almacenar tus archivos de configuración en un directorio local o en un bucket de Cloud Storage.
En tu archivo
skaffold.yaml, crea una estrofadeploypara cada perfil.También puedes tener una sección
deployfuera 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 cláusulas
deploypor perfil y usa una app de ejemplo ficticia llamadamy-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 separados para los destinos
test,stagingyprod. También muestra un perfil para el desarrollo local. En cada perfil, hay una seccióndeploy.kustomizecon una ruta que apunta a la ubicación de la kustomización que se usará para ese destino.
Agrega compatibilidad con Helm a tu skaffold.yaml
Puedes usar Helm para renderizar tus manifiestos. Cloud Deploy no usa Helm para implementar tus aplicaciones y solo admite kubectl como implementador.
Para usar Helm, necesitas tus gráficos de Helm, almacenados en cualquier ubicación a la que puedas hacer referencia desde tu skaffold.yaml. Esta ubicación puede estar en 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, agrega 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 de skaffold.yaml muestra lo que se requiere en este fragmento helm.
Funciones de Skaffold no compatibles
Las siguientes funciones de Skaffold no se pueden usar en Cloud Deploy:
-
No se admite el uso de
--module=para seleccionar módulos específicos parabuild,render,apply, etcétera. Se admiten módulos estáticos. En Helm, la capacidad de crear un espacio de nombres si no existe uno.
¿Qué sigue?
Visita el sitio de Skaffold para obtener información sobre cómo funciona y qué puede hacer por ti.
Practica el uso de Cloud Deploy con perfiles de Kustomize y Skaffold.
Obtén información sobre cómo Cloud Deploy selecciona las versiones de las herramientas que se usarán y cómo determinar qué versiones están en uso.
Obtén más información para usar los perfiles de Skaffold con herramientas avanzadas de administración de manifiestos, como Helm, Kustomize y kpt.