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
- Opcional, con Skaffold para el desarrollo local
- De forma opcional, con Skaffold para la integración y la implementación continuas (CI/CD)
¿Por qué Skaffold?
¿Quieres saber por qué Cloud Deploy usa Skaffold y por qué debes administrar una configuración de Skaffold? Más información.
Tengo experiencia en CI/CD, pero actualmente no uso Skaffold
Skaffold es una herramienta de línea de comandos de código abierto para mejorar 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 a fin de implementar la aplicación en cada destino en la progresión. Después de la implementación, Skaffold realiza verificaciones de estado para supervisar el entorno de ejecución de destino y lograr una implementación exitosa.
Skaffold para el desarrollo continuo
Cuando usas Skaffold para el desarrollo continuo, las imágenes se compilan, prueban y, luego, 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 funciones 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 integrar herramientas de administración de manifiestos de terceros, como Helm y Kustomize.
El uso de Skaffold de esta manera te permite usar las funciones de esas herramientas para renderizar manifiestos. kubectl
sigue siendo el deployer de estos manifiestos.
No tengo experiencia en implementaciones 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 sobre la administración de manifiestos, incluidos ejemplos de cómo usar Skaffold y Cloud Deploy con herramientas comunes de plantillas de manifiestos, como Helm y Kustomize.
¿Cuáles son los requisitos para que Cloud Deploy funcione?
Para usar una canalización de entrega básica de Cloud Deploy, el archivo de configuración skaffold.yaml
necesita al menos la siguiente configuración:
La información del 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 enumera todos los manifiestos de Kubernetes sin procesar (a menos que uses una herramienta de administración de manifiestos, como Helm o Kustomize).Este es un ejemplo en el que se usa un manifiesto de Kubernetes sin procesar:
manifests: rawYaml: - deployment.yaml
Si planeas usar un procesador (como Helm o Kustomize) para renderizar manifiestos, consulta Agrega compatibilidad con Helm a tu skaffold.yaml y Agrega compatibilidad con Kustomize a skaffold.yaml para obtener orientación sobre cómo configurar Skaffold a fin de usar estas herramientas.
Para ver ejemplos de Helm y Kustomize, consulta Cómo administrar manifiestos.
Una estrofa
deploy
, condeploy.kubectl
, para implementar en GKE o GKE Enterprise, odeploy.cloudrun
para implementar en Cloud Run.Para los objetivos de GKE y GKE Enterprise:
deploy: kubectl: {}
La estrofa de implementación implementa los manifiestos de la aplicación que se proporcionaron en ella.
Para los destinos de Cloud Run:
deploy: cloudrun: {}
La estrofa de implementación implementa los manifiestos de la aplicación que se proporcionan en la estrofa de manifiestos.
Si usas destinos personalizados, 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 qué se debe incluir en este archivo.
Haz que Cloud Deploy genere tu skaffold.yaml
Si no tienes un archivo skaffold.yaml
, pero tienes un solo 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 etapa de pruebas de origen de Cloud Storage una vez que se complete el lanzamiento.
El siguiente comando incluye la marca --from-k8s-manifest
, que pasa el manifiesto de Kubernetes. Cloud Deploy usa la información del manifiesto a fin de 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 YAML de servicio de Cloud Run, usa el mismo comando, pero con --from-run-manifest
en lugar de --from-k8s-manifest
.
El uso de cualquiera de estas marcas con la marca --skaffold-file
o --source
genera un error.
Usa el archivo skaffold.yaml
generado
El skaffold.yaml
generado es adecuado para la integración, el aprendizaje y la demostración de Cloud Deploy. Una vez que te hayas familiarizado con Cloud Deploy y con las cargas de trabajo de producción, recomendamos una configuración de Skaffold que diferencie tus destinos (con los 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 de origen de renderización, no en el archivo renderizado. La fuente de renderización está disponible para descargar en la pestaña Artefactos en la página **Detalles de la versión **.
Este
skaffold.yaml
generado se incluye en la fuente de renderización almacenada en un bucket de Cloud Storage.Para ver este archivo, puedes descargar y extraer el archivo
.tar.gz
.El
skaffold.yaml
renderizado 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 la CI/CD.
En el modo dev
, Skaffold supervisa tus archivos de origen y, cuando detecta un cambio, vuelve a compilar las imágenes, vuelve a probar y a implementar los contenedores en un clúster de Minikube (por ejemplo) en tu máquina local.
Cuando usas Skaffold de esta manera, puedes utilizar los mismos comandos de forma local que para la implementación remota.
Si usas Skaffold para el desarrollo local, puedes definir perfiles independientes de Skaffold para tus destinos y una estrofa de implementación predeterminada para el desarrollo local.
Cuando detienes el modo dev
, Skaffold borra 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 usar Skaffold para CI/CD. Cloud Deploy usa las funciones de CI/CD de Skaffold para renderizar y aplicar los manifiestos y, luego, implementar la aplicación en los destinos definidos, a partir de imágenes de contenedor compiladas con una herramienta de CI como Cloud Build y un registro de imágenes como Artifact Registry.
Renderiza, implementa y aplica
Skaffold separa el proceso de renderización de manifiestos 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 renderización y aplicación te permite capturar el estado declarativo completo de tu aplicación en la configuración, para que se pueda aplicar de forma segura y repetible (por ejemplo, para reversiones). Esta técnica también facilita las aprobaciones. Debido a que los manifiestos se renderizan para todos los destinos antes del primer lanzamiento, puedes ver el 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 el procesamiento.
Para obtener más información sobre cómo Cloud Deploy se implementa con kubectl
como implementador, consulta Arquitectura del servicio de Cloud Deploy.
Información acerca de los perfiles de Skaffold
Puedes crear perfiles separados de Skaffold, identificados en skaffold.yaml
, en una estrofa profiles:
.
Cuando usas perfiles de Skaffold con Cloud Deploy, puedes crear perfiles separados para todos o algunos de tus destinos. Por ejemplo, perfiles diferentes para dev
, staging
y prod
.
Los perfiles no son necesarios para usar Skaffold en Cloud Deploy, pero son útiles para definir personalizaciones de manifiesto entre tus objetivos, por ejemplo, cuando se usan diferentes archivos kustomization.yaml
de Kustomize por destino.
Agrega asistencia de Kustomize a tu skaffold.yaml
La integración de la configuración de Kustomize con la configuración de Cloud Deploy/Skaffold consiste en lo siguiente:
Incluye un archivo
kustomization.yaml
entre los archivos de configuración.Puedes almacenar tus archivos de configuración en un directorio local o en un bucket de Cloud Storage.
En el archivo
skaffold.yaml
, crea una estrofadeploy
para cada perfil.También puedes tener una estrofa
deploy
fuera de cualquier perfil definido si no usas perfiles o para una configuración de implementación predeterminada no vinculada a un perfil.El siguiente es un ejemplo de configuración de Skaffold que muestra estrofas de
deploy
por 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 independientes para los destinos
test
,staging
yprod
. También muestra un perfil para el desarrollo local. En cada perfil, hay una estrofadeploy.kustomize
con una ruta de acceso que apunta a la ubicación de la personalizació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 tu gráfico o 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: {}
En la referencia de skaffold.yaml
, se muestra lo que se requiere en esta estrofa de helm
.
Funciones no compatibles de Skaffold
Las siguientes funciones de Skaffold no se pueden usar en Cloud Deploy:
-
No se admite el uso de
--module=
a fin de seleccionar módulos específicos parabuild
,render
,apply
, etc. Los módulos estáticos son compatibles. En Helm, la capacidad de crear un espacio de nombres en caso de que no exista uno
¿Qué sigue?
Visita el sitio de Skaffold para descubrir cómo funciona y lo que puede hacer por ti.
Practica cómo usar Cloud Deploy con los perfiles de Kustomize y Skaffold.
Obtén información sobre cómo Cloud Deploy selecciona la versión de Skaffold que se usará, cuándo cambia la versión de Skaffold y cómo determinar qué versión está en uso.
Aprende a usar los perfiles de Skaffold con herramientas avanzadas de administración de manifiestos, como Helm, Kustomize y kpt.