En este documento se describe cómo desplegar tus aplicaciones, incluidos los servicios y los trabajos de Cloud Run.
Cloud Deploy te permite desplegar tus cargas de trabajo basadas en contenedores en cualquier servicio de Cloud Run o trabajo. Todas las funciones de Cloud Deploy se admiten cuando se implementan en destinos de Cloud Run para servicios de Cloud Run, pero las implementaciones canarias no se admiten en las tareas de Cloud Run.
En este documento se describen las tres configuraciones principales que debes completar para desplegar en Cloud Run:
- Crea la 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 desplegar un servicio o un trabajo de Cloud Run por destino.
No puedes ejecutar un despliegue canary en una tarea de Cloud Run.
Sin embargo, los servicios de Cloud Run pueden usar un despliegue canary.
Para desplegar una función de Cloud Run con Cloud Deploy, debes modificar tu flujo de trabajo de integración continua para compilar la función en un contenedor y desplegarla como un servicio de Cloud Run.
Antes de empezar
Asegúrate de que estás usando la versión
401.0.0
o una posterior de gcloud CLI.
Crea la configuración de destino
El destino se puede configurar en el archivo YAML de tu canal de distribución o en un archivo independiente. Además, puedes configurar más de un destino en el mismo archivo.
Los destinos deben definirse en el mismo proyecto y región que el flujo de procesamiento de entrega. Sin embargo, los servicios o los trabajos en los que se implementan los destinos pueden estar en proyectos y regiones diferentes, siempre que la cuenta de servicio tenga acceso a esos proyectos.
En la definición de 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 el 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 utiliza los siguientes elementos:
[
project_name
] es el nombre del Google Cloud proyecto en el que se creará tu servicio o trabajo de Cloud Run.Deberás hacerlo con cada objetivo. Te recomendamos que uses un proyecto diferente para cada servicio o trabajo de Cloud Run. Si quieres 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 el trabajo de Cloud Run que se va a 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 en una definición de flujo de procesamiento de entrega de Cloud Deploy o por separado. De cualquier forma, debes registrar el destino antes de crear la versión para desplegar tu servicio o trabajo de Cloud Run.
Crear la configuración de Skaffold
A continuación, se muestra un ejemplo de archivo skaffold.yaml
para un despliegue 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 desplegará. El nombre de este 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, concretamente, el proyecto y la ubicación. El campodeploy
es obligatorio.Te recomendamos que dejes el
{}
vacío. Cloud Deploy rellena este campo durante el renderizado, en función del proyecto y la ubicación de la definición de 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 de destino, independientemente de si se proporcionan valores aquí.
Crear las definiciones de servicio de Cloud Run
Para crear una definición de servicio de Cloud Run, puedes crear una manualmente o copiarla de un servicio que ya tengas. Ambos se describen en esta sección.
Opción 1: Crear un Cloud Run service.yaml
El archivo service.yaml define tu servicio de Cloud Run. Cuando creas una versión, Skaffold usa esta definición para desplegar tu servicio.
Aquí tienes un ejemplo simplificado:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: [SERVICE_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Donde:
[SERVICE_NAME]
es el nombre de este servicio de Cloud Run.[IMAGE_PATH]
apunta a la imagen o imágenes de contenedor que vas a desplegar con este servicio.
Opción 2: Copiar un service.yaml
de un servicio que ya tengas mediante la consola Google Cloud
Puedes crear un servicio con la consola de Google Cloud o usar uno que ya tengas y copiar tu service.yaml
desde ahí.
Para obtener el service.yaml
con Google Cloud CLI, sigue estos pasos:
gcloud run services describe [service_name] --format=export
Para obtener el service.yaml
desde la consola Google Cloud :
En la consola, ve a la página Servicios de Cloud Run. Google Cloud
Selecciona el servicio cuya definición quieras usar.
También puedes crear uno y seleccionarlo. Cuando selecciones el servicio, se mostrará la página Detalles del servicio:
Selecciona la pestaña YAML.
Haz clic en Editar y, a continuación, copia el contenido del archivo YAML en un archivo nuevo llamado
service.yaml
en tu sistema de archivos para que Skaffold pueda usarlo cuando crees una versión.
Crear definiciones de trabajos de Cloud Run
Para implementar una definición de tarea de Cloud Run, puedes crear una manualmente o copiarla de una tarea que ya tengas. Ambos se describen en esta sección.
Ten en cuenta que los trabajos no se ejecutan necesariamente cuando Cloud Deploy los implementa. Esto es diferente de los servicios, que son aplicaciones que se ejecutan después de implementarse. La forma de invocar un trabajo depende del propio trabajo.
Opción 1: Crear un Cloud Run job.yaml
El archivo job.yaml define tu tarea de Cloud Run. Cuando creas un lanzamiento, Skaffold usa esta definición para desplegar el trabajo.
Aquí tienes un ejemplo simplificado:
apiVersion: run.googleapis.com/v1
kind: Job
metadata:
name: [JOB_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Donde:
[JOB_NAME]
es el nombre de este trabajo de Cloud Run.[IMAGE_PATH]
apunta a la imagen de contenedor que vas a desplegar para este trabajo.
Opción 2: Copiar un job.yaml
de un trabajo que ya tengas con la consola Google Cloud
Puedes crear un trabajo con la Google Cloud consola o usar uno que ya tengas y copiar tu job.yaml
desde ahí.
Para obtener el job.yaml
con Google Cloud CLI, sigue estos pasos:
gcloud run jobs describe [job_name] --format=export
Para obtener el job.yaml
desde la consola Google Cloud :
En la Google Cloud consola, ve a la página Cloud Run Jobs.
Selecciona el trabajo cuyo archivo de definición quieras usar.
También puedes crear uno y seleccionarlo. Cuando selecciones el trabajo, se mostrará la página Detalles del trabajo:
Selecciona la pestaña YAML.
Haz clic en Editar y, a continuación, copia el contenido del archivo YAML en un archivo nuevo llamado
job.yaml
en tu sistema de archivos para que Skaffold pueda usarlo cuando crees una versión.
Visión de conjunto
Ahora que tienes la definición de tu servicio o trabajo de Cloud Run, tu configuración de skaffold.yaml
y tu definición de destino de Cloud Deploy, y que has registrado tu destino como recurso de Cloud Deploy, puedes invocar tu flujo de procesamiento de entrega para crear una versión y hacer que avance por la progresión de los destinos definidos en el flujo de procesamiento.
En la guía de inicio rápido Desplegar una aplicación en Cloud Run con Cloud Deploy se muestra todo esto en acción.
Comportamiento de los servicios en las distintas revisiones
Cuando vuelves a implementar un servicio, la nueva revisión se basa en el service.yaml
recién implementado. No se mantiene nada de la revisión anterior, a menos que sea lo mismo en el archivo YAML recién implementado. Por ejemplo, si hay ajustes de configuración o etiquetas en la revisión anterior que no están en el nuevo archivo YAML, esos ajustes o etiquetas no estarán en la nueva revisión.
Activar tareas de Cloud Run
Una vez que hayas desplegado una tarea, podrás activarla tal como se describe en la documentación de Cloud Run.
Desplegar servicios y trabajos de Cloud Run en varios proyectos
Si necesitas desplegar servicios o trabajos que estén en proyectos diferentes, tu cuenta de servicio de ejecución debe tener permiso para acceder a los proyectos en los que se definan esos servicios o trabajos.
Para obtener más información, consulta Cuenta de servicio de ejecución de Cloud Deploy y Roles y permisos de Gestión de Identidades y Accesos.
Desplegar funciones de Cloud Run
Cloud Run Functions compila el código fuente cada vez que se implementa una función. Por este motivo, cada tiempo de ejecución de destino de tu canalización puede obtener un artefacto ligeramente diferente. Esto no sigue las prácticas recomendadas de Cloud Deploy. En su lugar, te recomendamos que uses un servicio de Cloud Run directamente. De esta forma, puedes crear un solo artefacto y promocionarlo en todos tus entornos.
Consulta la
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
Elimina las siguientes anotaciones, si las hay:
run.googleapis.com/build-base-image
run.googleapis.com/build-name
run.googleapis.com/build-source-location
run.googleapis.com/build-enable-automatic-updates
Sustituye el valor de
spec.spec.containers.image
porIMAGE_TAG
.Crea tu pipeline de entrega y tus destinos, con el servicio de Cloud Run como destino.
Separa el paso de compilación del paso de implementación en tu proceso de integración continua. En lugar de usar Google Cloud CLI para desplegar tu función, sigue estos pasos:
Crea 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=DEPLOY_PROJECT \ --region=REGION \ --delivery-pipeline=DELIVERY_PIPELINE --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
En este comando:
RELEASE_NAME
es el nombre que se le asigna a esta versión. El nombre debe ser único entre todas las versiones de esta canalización de entrega.DEPLOY_PROJECT
es el ID del proyecto en el que has creado la canalización de implementación.DELIVERY_PIPELINE
es el nombre de la canalización de entrega que gestionará la implementación de esta versión a través de la progresión de los objetivos. Este nombre debe coincidir con el camponame
de la definición de la canalización.REGION
es el nombre de la región en la que vas a crear la versión (por ejemplo,us-central1
). Este campo es obligatorio.IMAGE_NAME
es el nombre que le has dado a la imagen en el paso anterior, cuando has creado la función.
Siguientes pasos
Prueba la guía de inicio rápido para desplegar una aplicación en Cloud Run.
Consulta más información sobre cómo configurar destinos de Cloud Deploy.
Consulta información sobre los entornos de ejecución de Cloud Deploy.
Más información sobre la compatibilidad de Skaffold con Cloud Run
Consulta más información sobre Cloud Run.