En este documento, se describe cómo implementar tus aplicaciones, incluidos los servicios y los trabajos de Cloud Run.
Cloud Deploy te permite implementar tus cargas de trabajo basadas en contenedores en cualquier servicio o trabajo de Cloud Run. Todas las funciones de Cloud Deploy son compatibles cuando implementas en destinos de Cloud Run para servicios de Cloud Run, pero las implementaciones de versiones canary no son compatibles con los trabajos de Cloud Run.
En este documento, se describen las tres configuraciones principales que debes completar para realizar la implementación en Cloud Run:
- Crea tu configuración de destino
- Crea tu configuración de Skaffold
- Crea tus definiciones de servicio o definiciones de trabajo de Cloud Run
Limitaciones
Solo puedes implementar un trabajo o servicio de Cloud Run por destino.
No puedes ejecutar una implementación canary en un trabajo de Cloud Run.
Sin embargo, los servicios de Cloud Run pueden usar una implementación de versiones canary.
Para implementar una función de Cloud Run con Cloud Deploy, debes modificar tu flujo de trabajo de CI para compilar la función en un contenedor y, luego, implementarla como un servicio de Cloud Run.
Antes de comenzar
Asegúrate de usar la versión
401.0.0
o una posterior de la CLI de gcloud.
Crea tu configuración de destino
El destino se puede configurar en el archivo YAML de la canalización de entrega o en un archivo separado. Además, puedes configurar más de un destino en el mismo archivo.
Los destinos deben definirse en el mismo proyecto y la misma región que la canalización de entrega. Sin embargo, los servicios o trabajos en los que se implementan los destinos pueden estar en diferentes proyectos y regiones, siempre y cuando la cuenta de servicio tenga acceso a esos proyectos.
En la definición del destino, crea una sección run
para identificar la ubicación en la que se creará el servicio de Cloud Run.
La sintaxis para especificar el servicio o trabajo de Cloud Run en la definición de destino es la siguiente:
run:
location: projects/[project_name]/locations/[region_name]
Este identificador de recurso usa los siguientes elementos:
[
project_name
] es el nombre del proyecto Google Cloud en el que se creará tu servicio o trabajo de Cloud Run.Harás esto para cada objetivo. Te recomendamos que uses un proyecto diferente para cada servicio o trabajo de Cloud Run. Si deseas tener más de un servicio o trabajo en el mismo proyecto, debes usar perfiles de Skaffold en tu archivo de configuración
skaffold.yaml
.[
region_name
] es la región en la que se creará el servicio o el trabajo. Tu servicio o trabajo puede estar en cualquier región compatible con Cloud Run.
A continuación, se muestra un ejemplo de configuración de destino que define el servicio o trabajo de Cloud Run que se creará:
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: development service
run:
location: projects/my-app/locations/us-central1
Puedes definir este destino dentro de una definición de canalización de entrega de Cloud Deploy o por separado. De cualquier manera, debes registrar el destino antes de crear la versión para implementar tu servicio o trabajo de Cloud Run.
Crea tu configuración de Skaffold
A continuación, se muestra un archivo skaffold.yaml
de ejemplo para una implementación de Cloud Run:
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: cloud-run-application
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun: {}
En este archivo skaffold.yaml
…
manifests.rawYaml
proporciona los nombres de las definiciones de servicio de Cloud Run.En este ejemplo,
service.yaml
es el archivo que define un servicio de Cloud Run que Skaffold implementará. Este nombre de archivo puede ser cualquiera, pero, por convención, esservice.yaml
para un servicio yjob.yaml
para un trabajo.La sección
deploy
especifica cómo quieres que se implemente el manifiesto, específicamente, el proyecto y la ubicación.deploy
es obligatorio.Te recomendamos que dejes el
{}
vacío. Cloud Deploy completa este campo durante la renderización, según el proyecto y la ubicación de la definición del destino.Sin embargo, para el desarrollo local, puedes proporcionar valores aquí. Sin embargo, Cloud Deploy siempre usa el proyecto y la ubicación de la definición del destino, independientemente de si se proporcionan valores aquí.
Crea las definiciones de tu servicio de Cloud Run
Para crear una definición de servicio de Cloud Run, puedes crear una de forma manual o copiar una de un servicio existente. Ambos se describen en esta sección.
Opción 1: Crea un nuevo service.yaml
de Cloud Run
El archivo service.yaml define tu servicio de Cloud Run. Cuando creas una versión, Skaffold usa esta definición para implementar tu servicio.
A continuación, se muestra un ejemplo simplificado:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: [SERVICE_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Aquí:
[SERVICE_NAME]
es un nombre para este servicio de Cloud Run.[IMAGE_PATH]
apunta a la imagen o las imágenes de contenedor que implementas con este servicio.
Opción 2: Copia un service.yaml
de un servicio existente con la consola de Google Cloud
Puedes crear un servicio con la consola de Google Cloud o usar uno existente y copiar tu service.yaml
desde allí.
Para obtener el service.yaml
con Google Cloud CLI, haz lo siguiente:
gcloud run services describe [service_name] --format=export
Para obtener el service.yaml
de la consola de Google Cloud , haz lo siguiente:
En la consola de Google Cloud , ve a la página Servicios de Cloud Run.
Selecciona el servicio existente cuya definición deseas usar.
O bien, puedes crear uno nuevo y, luego, seleccionarlo. Cuando selecciones el servicio, se mostrará la página Detalles del servicio:
Selecciona la pestaña YAML.
Haz clic en Editar y, luego, copia el contenido del archivo YAML en un archivo nuevo llamado
service.yaml
en tu sistema de archivos, de modo que Skaffold pueda usarlo cuando crees una versión.
Crea tus definiciones de trabajos de Cloud Run
Para implementar una definición de trabajo de Cloud Run, puedes crear una manualmente o copiar una de un trabajo existente. Ambos se describen en esta sección.
Ten en cuenta que los trabajos no necesariamente se ejecutan cuando Cloud Deploy los implementa. Esto es diferente de los servicios, que son aplicaciones en ejecución después de que se implementan. La forma en que se invoca un trabajo depende del trabajo en sí.
Opción 1: Crea un nuevo job.yaml
de Cloud Run
El archivo job.yaml define tu trabajo de Cloud Run. Cuando creas una versión, Skaffold usa esta definición para implementar el trabajo.
A continuación, se muestra un ejemplo simplificado:
apiVersion: run.googleapis.com/v1
kind: Job
metadata:
name: [JOB_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Aquí:
[JOB_NAME]
es el nombre de este trabajo de Cloud Run.[IMAGE_PATH]
apunta a la imagen de contenedor que implementas para este trabajo.
Opción 2: Copia un job.yaml
de un trabajo existente con la consola de Google Cloud
Puedes crear un trabajo con la consola de Google Cloud o usar uno existente y copiar tu job.yaml
desde allí.
Para obtener el job.yaml
con Google Cloud CLI, haz lo siguiente:
gcloud run jobs describe [job_name] --format=export
Para obtener el job.yaml
de la consola de Google Cloud , haz lo siguiente:
En la consola de Google Cloud , ve a la página Trabajos de Cloud Run.
Selecciona el trabajo existente cuya definición deseas usar.
O bien, puedes crear uno nuevo y, luego, seleccionarlo. Cuando selecciones el trabajo, se mostrará la página Detalles del trabajo:
Selecciona la pestaña YAML.
Haz clic en Editar y, luego, copia el contenido del archivo YAML en un archivo nuevo llamado
job.yaml
en tu sistema de archivos, de modo que Skaffold pueda usarlo cuando crees una versión.
Revisión general
Ahora que tienes la definición de tu servicio o trabajo de Cloud Run, tu configuración de skaffold.yaml
y la definición de tu destino de Cloud Deploy, y que registraste tu destino como un recurso de Cloud Deploy, puedes invocar tu canalización de entrega para crear una versión y hacer que avance por la progresión de destinos definidos en la canalización.
En la guía de inicio rápido Implementa una app en Cloud Run con Cloud Deploy, se muestra todo esto en acción.
Comportamiento de los servicios en las diferentes revisiones
Cuando vuelves a implementar un servicio, la revisión nueva se basa en el service.yaml
implementado recientemente. No se mantiene nada de la revisión anterior, a menos que sea igual en el archivo YAML recién implementado. Por ejemplo, si hay parámetros de configuración o etiquetas en la revisión anterior que no están en el nuevo archivo YAML, esos parámetros o etiquetas no estarán en la revisión nueva.
Cómo activar trabajos de Cloud Run
Después de implementar un trabajo, puedes activarlo como se describe en la documentación de Cloud Run.
Implementa servicios y trabajos de Cloud Run en varios proyectos
Si necesitas implementar servicios o trabajos que se encuentran en proyectos diferentes, tu cuenta de servicio de ejecución debe tener permiso para acceder a los proyectos en los que se definen esos servicios o trabajos.
Consulta Cuenta de servicio de ejecución de Cloud Deploy y Permisos y roles de Identity and Access Management para obtener más información.
Implementación de Cloud Run Functions
Cloud Run Functions compila tu código fuente cada vez que se implementa una función. Por este motivo, cada entorno de ejecución objetivo en tu canalización podría obtener un artefacto ligeramente diferente. Esto no coincide con las prácticas recomendadas de Cloud Deploy. En cambio, te sugerimos que uses un servicio de Cloud Run directamente. Esto te permite compilar un solo artefacto y promocionarlo en todos tus entornos.
Verifica el
service.yaml
de tu función de Cloud Run.Para obtenerlo, ejecuta el siguiente comando:
gcloud run services describe FUNCTION_NAME \ --format=export \ --region=REGION \ --project=PROJECT
Quita las siguientes anotaciones, si están presentes:
run.googleapis.com/build-base-image
run.googleapis.com/build-name
run.googleapis.com/build-source-location
run.googleapis.com/build-enable-automatic-updates
Reemplaza el valor en
spec.spec.containers.image
porIMAGE_TAG
.Crea tu canalización y tus destinos de entrega, con el servicio de Cloud Run como destino.
Separa el paso de compilación del paso de implementación en tu proceso de CI. En lugar de usar Google Cloud CLI para implementar tu función, reemplázala por los siguientes pasos:
Compila la función en un contenedor con Cloud Build:
gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \ --project=PROJECT \ --region=REGION
Crea una versión con Cloud Deploy:
gcloud deploy releases create RELEASE_NAME \ --project=PROJECT \ --region=REGION \ --delivery-pipeline=DELIVERY_PIPELINE --image=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
¿Qué sigue?
Prueba la guía de inicio rápido para implementar una aplicación en Cloud Run
Obtén más información para configurar destinos de Cloud Deploy
Obtén información sobre los entornos de ejecución de Cloud Deploy.
Obtén más información sobre la compatibilidad de Skaffold con Cloud Run
Obtén más información sobre Cloud Run