En este documento se describe cómo configurar y usar los lanzamientos canary para desplegar tus aplicaciones en Cloud Run (solo servicios, no trabajos) mediante Cloud Deploy.
Un despliegue canary es un lanzamiento progresivo de una nueva versión de tu aplicación, en el que aumentas gradualmente el porcentaje de tráfico enviado a la nueva versión mientras monitorizas el rendimiento de la aplicación. De esta forma, podrás detectar posibles problemas con antelación y minimizar el impacto en tus usuarios.
Cómo funcionan los despliegues canary en Cloud Run
Cuando despliegas en Cloud Run mediante una estrategia de despliegue canary, Cloud Deploy actualiza tu servicio con una nueva revisión. La nueva revisión recibe un porcentaje de tráfico especificado y la antigua sigue recibiendo el resto. Aumenta gradualmente la división del tráfico a la nueva revisión con el tiempo.
Con Cloud Deploy, puedes configurar implementaciones canarias en Cloud Run en una o varias fases.
Las instrucciones que se incluyen aquí solo hacen referencia a la configuración de la versión canary. En el documento Desplegar un servicio o un trabajo de Cloud Run se incluyen las instrucciones generales para configurar y ejecutar tu flujo de procesamiento de despliegue.
Comprueba que tienes los permisos necesarios
Además de otros permisos de gestión de identidades y accesos que necesitas para usar Cloud Deploy, necesitas los siguientes permisos para realizar acciones adicionales que pueden ser necesarias para una implementación canaria:
clouddeploy.rollouts.advance
clouddeploy.rollouts.ignoreJob
clouddeploy.rollouts.cancel
clouddeploy.rollouts.retryJob
clouddeploy.jobRuns.get
clouddeploy.jobRuns.list
clouddeploy.jobRuns.terminate
Para obtener más información sobre los roles disponibles que incluyen estos permisos, consulta Roles y permisos de gestión de identidades y accesos.
Prepara tu skaffold.yaml
El archivo skaffold.yaml
define cómo se renderizan y despliegan las definiciones de tu servicio de Cloud Run. Para que un lanzamiento canary se despliegue en Cloud Run, asegúrate de que apunta correctamente a los archivos de definición de tu servicio y de que define los artefactos de compilación necesarios (como las imágenes de contenedor). No se requiere ninguna configuración específica de la versión canary en skaffold.yaml
, más allá de lo que se necesita para una implementación estándar. Puedes usar perfiles de Skaffold para gestionar diferentes variaciones de la definición de servicio en fases canary personalizadas.
Prepara la definición de tu servicio
El archivo de definición de servicio de Cloud Run normal es suficiente, pero sin una sección traffic
. Cloud Deploy gestiona la división del tráfico entre la última revisión correcta y la nueva.
Ejemplo service.yaml
(sin la estrofa traffic
):
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-cloudrun-service
spec:
template:
spec:
containers:
- image: gcr.io/my-project/my-cloudrun-app
ports:
- containerPort: 8080
Configurar una versión canary automatizada
Configura un lanzamiento canary automatizado directamente en la definición de tu flujo de procesamiento de entrega para una fase específica de Cloud Run. Cloud Deploy indica automáticamente a Cloud Run que divida el tráfico entre la última revisión estable y la nueva revisión según los porcentajes especificados.
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
En esta configuración:
PERCENTAGES es una lista separada por comas de valores de porcentaje que representan tus incrementos de lanzamiento canary. Por ejemplo,
[25, 50, 75]
. Ten en cuenta que esto no incluye100
, ya que se supone que la implementación es del 100% en la versión canary y se gestiona en la fasestable
.Puedes habilitar la verificación de la implementación (
verify: true
). Si lo haces, se añade un trabajoverify
a cada fase canary.PREDEPLOY_ACTION
Es el mismo que el ACTION_NAME que has usado en tu
skaffold.yaml
para definir la acción personalizada que quieres ejecutar antes de la implementación.POSTDEPLOY_ACTION
Es el mismo ACTION_NAME que has usado en tu
skaffold.yaml
para definir la acción personalizada que quieres ejecutar después de la implementación.
Configurar un lanzamiento canary personalizado y automatizado
Combina la definición de fases personalizadas (nombres, porcentajes, perfiles, verificación y ganchos) con la gestión automática del tráfico de Cloud Deploy para Cloud Run. Tú defines las fases, pero Cloud Deploy se encarga de indicar a Cloud Run que desvíe el tráfico en función de los porcentajes.
Para configurar esta opción, incluye tanto el ajuste runtimeConfig.cloudRun.automaticTrafficControl: true
como la sección customCanaryDeployment
(que define phaseConfigs
) en el bloque strategy.canary
. Cloud Deploy usará los perfiles de Skaffold especificados para renderizar la definición del servicio (que no debería tener una sección traffic
), pero gestionará automáticamente el tráfico según los porcentajes de la fase.
serialPipeline:
stages:
- targetId: cloudrun-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
cloudRun:
automaticTrafficControl: true
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup-cr"
percentage: 10
profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
verify: true
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify: true
Ejecutar el lanzamiento canary de Cloud Run
Registra el flujo de procesamiento y los destinos: aplica los archivos de configuración del flujo de lanzamiento y del destino de Cloud Run.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
El flujo de procesamiento de entrega incluye la configuración canary automatizada o personalizada del tiempo de ejecución que elijas.
Crea un lanzamiento: inicia la implementación y proporciona el nombre de la imagen.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
El flujo de procesamiento de entrega identificado por
PIPELINE_NAME
contiene la configuración canary automatizada o personalizada que se describe en este documento.Avanzar la versión canary:
CLI de gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
Donde:
ROLLOUT_NAME
es el nombre del lanzamiento actual al que vas a pasar a la siguiente fase.RELEASE_NAME
es el nombre de la versión a la que pertenece este lanzamiento.PIPELINE_NAME
es el nombre de la canalización de distribución que estás usando para gestionar la implementación de esta versión.REGION
es el nombre de la región en la que se creó la versión, por ejemplo,us-central1
. Este campo es obligatorio.Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando
gcloud deploy rollouts advance
.Google Cloud consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página Detalles del flujo de procesamiento de entrega muestra una representación gráfica del progreso del flujo de procesamiento de entrega.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
En este ejemplo, la implementación tiene una fase
canary-50
y una fasestable
. Es posible que tu lanzamiento tenga más fases o fases diferentes.Haz clic en Avanzar lanzamiento.
El lanzamiento pasa a la siguiente fase.
Fases omitidas
Si despliegas una versión canary y tu aplicación aún no se ha desplegado en ese tiempo de ejecución, Cloud Deploy se saltará la fase canary y ejecutará la fase estable. Consulta la sección Saltar fases la primera vez para saber por qué ocurre esto.
Siguientes pasos
Prueba la guía de inicio rápido de la implementación canary.
Consulta cómo gestionar el ciclo de vida de las implementaciones de tu versión canary.
Consulta más información sobre las estrategias de despliegue de Cloud Deploy.
Consulta más información sobre Cloud Run.