Implementaciones de versiones canary en Cloud Run

En este documento, se describe cómo configurar y usar las implementaciones de versiones canary para implementar tus aplicaciones en Cloud Run (solo servicios, no trabajos) con Cloud Deploy.

Una implementación de versiones canary es un lanzamiento progresivo de una nueva versión de tu aplicación, en el que aumentas gradualmente el porcentaje de tráfico que se envía a la nueva versión mientras supervisas el rendimiento de la aplicación. Esto te ayuda a detectar posibles problemas con anticipación y minimizar el impacto en tus usuarios.

Cómo funcionan las implementaciones de versiones canary para Cloud Run

Cuando implementas en Cloud Run con una estrategia de implementación de versiones canary, Cloud Deploy actualiza tu servicio existente con una revisión nueva. La revisión nueva recibe un porcentaje específico del tráfico, y la revisión anterior sigue recibiendo el resto. Aumentas gradualmente la división del tráfico hacia la revisión nueva con el tiempo.

Con Cloud Deploy, puedes configurar implementaciones canary en Cloud Run en una sola etapa o en varias.

Las instrucciones que se incluyen aquí solo abarcan lo específico de la configuración de la versión canary. En el documento Implementa un servicio o trabajo de Cloud Run, se incluyen las instrucciones generales para configurar y ejecutar tu canalización de implementación.

Asegúrate de tener los permisos necesarios

Además de otros permisos de Identity and Access Management que necesitas para usar Cloud Deploy, necesitas los siguientes permisos para realizar acciones adicionales que podrían ser necesarias para una implementación de versiones canary:

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

Consulta Roles y permisos de IAM para obtener más información sobre qué roles disponibles incluyen estos permisos.

Prepara tu skaffold.yaml

Tu archivo skaffold.yaml define cómo se renderizan y se implementan las definiciones de tu servicio de Cloud Run. Para que una implementación de versiones canary en Cloud Run funcione correctamente, asegúrate de que apunte de forma correcta a los archivos de definición de servicio y defina los artefactos de compilación necesarios (como las imágenes de contenedor). No se requiere ninguna configuración especial 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 administrar diferentes variaciones de la definición de servicio para las fases de lanzamiento canario personalizadas.

Prepara la definición de tu servicio

Tu archivo de definición de servicio de Cloud Run normal es suficiente, pero sin una sección traffic. Cloud Deploy administra la división del tráfico entre la última revisión correcta y la nueva.

Ejemplo service.yaml (sin 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

Configura una versión canary automatizada

Configura una versión canary automatizada directamente en la definición de tu canalización de entrega para una etapa específica de Cloud Run. Cloud Deploy le indica automáticamente a Cloud Run que divida el tráfico entre la última revisión estable y la nueva 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, se dan las siguientes situaciones:

  • PERCENTAGES es una lista separada por comas de valores de porcentaje que representan tus incrementos de la versión canary, por ejemplo, [25, 50, 75]. Ten en cuenta que esto no incluye 100, ya que se supone una implementación del 100% en la versión canary, y la fase stable se encarga de ello.

  • Puedes habilitar la verificación de la implementación (verify: true). Si lo haces, se agregará un trabajo verify a cada fase de la versión canary.

  • PREDEPLOY_ACTION

    Es el mismo que el ACTION_NAME que usaste en tu skaffold.yaml para definir la acción personalizada que deseas ejecutar antes de la implementación.

  • POSTDEPLOY_ACTION

    Es el mismo ACTION_NAME que usaste en tu skaffold.yaml para definir la acción personalizada que deseas ejecutar después de la implementación.

Configura una versión canary automatizada personalizada

Esto combina la definición de fases personalizadas (nombres, porcentajes, perfiles, verificación, hooks) con la administración automática del tráfico de Cloud Deploy para Cloud Run. Tú defines las fases, pero Cloud Deploy se encarga de indicarle a Cloud Run que cambie el tráfico según los porcentajes.

Para configurar esto, incluye el parámetro de configuración runtimeConfig.cloudRun.automaticTrafficControl: true y la sección customCanaryDeployment (que define phaseConfigs) dentro del bloque strategy.canary. Cloud Deploy usará los perfiles de Skaffold especificados para renderizar la definición del servicio (que aún no debería tener una sección traffic), pero administrará 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

Ejecuta la versión canary de Cloud Run

  1. Registra la canalización y los destinos: Aplica los archivos de configuración de tu canalización de entrega y destino de Cloud Run.

    
    gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION
    gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
    

    La canalización de entrega incluye la configuración de versión canary automatizada o personalizada para el entorno de ejecución que elegiste.

  2. Crea una versión: Inicia la implementación y proporciona el nombre de la imagen.

    
    gcloud deploy releases create RELEASE_NAME \
                                    --delivery-pipeline=PIPELINE_NAME \
                                    --region=REGION
    

    La canalización de entrega identificada por PIPELINE_NAME contiene la configuración de versión canary automatizada o personalizada que se describe en este documento.

  3. Avanza la versión canary:

    gcloud CLI

    gcloud deploy rollouts advance ROLLOUT_NAME \
                                --release=RELEASE_NAME \
                                --delivery-pipeline=PIPELINE_NAME \
                                --region=REGION
    

    Aquí:

    ROLLOUT_NAME es el nombre de la versión actual que se avanza a la siguiente fase.

    RELEASE_NAME es el nombre de la versión de la que forma parte esta implementación.

    PIPELINE_NAME es el nombre de la canalización de entrega que usas para administrar 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 console

    1. Abre la página Canalizaciones de entrega.

    2. Haz clic en tu canalización que se muestra en la lista de canalizaciones de entrega.

      En la página Detalles de la canalización de entrega, se muestra una representación gráfica del progreso de tu canalización de entrega.

    3. En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haz clic en el nombre de tu lanzamiento.

      Se muestra la página de detalles del lanzamiento.

      Detalles del lanzamiento en la consola de Google Cloud

      Observa que, en este ejemplo, la versió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 Adelantar lanzamiento.

      El lanzamiento avanza a la siguiente fase.

Fases omitidas

Si implementas una versión canary y tu aplicación aún no se implementó en ese entorno de ejecución, Cloud Deploy omitirá la fase canary y ejecutará la fase estable. Consulta Cómo omitir fases la primera vez para saber por qué sucede esto.

¿Qué sigue?