Despliegues canary en Cloud Run

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 incluye 100, ya que se supone que la implementación es del 100% en la versión canary y se gestiona en la fase stable.

  • Puedes habilitar la verificación de la implementación (verify: true). Si lo haces, se añade un trabajo verify 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

  1. 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.

  2. 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.

  3. 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

    1. Abre la página de canalizaciones de entrega.

    2. 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.

    3. 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.

      Detalles del lanzamiento en la consola Google Cloud

      En este ejemplo, la implementación tiene una fase canary-50 y una fase stable. Es posible que tu lanzamiento tenga más fases o fases diferentes.

    4. 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