Divisões de instâncias e rollbacks para pools de workers do Cloud Run

Os pools de workers processam cargas de trabalho que não são de solicitação. Para casos de uso que precisam dividir o trabalho entre várias revisões, como a implantação de uma nova revisão, os pools de workers usam a divisão de instâncias.

O Cloud Run permite especificar quais revisões recebem instâncias e definir porcentagens de alocação de instâncias para cada revisão. Esse recurso permite reverter para uma revisão anterior, dividir instâncias entre várias revisões e alocar instâncias para a revisão mais recente. Esta página descreve como usar esse recurso para gerenciar a alocação de instâncias para as revisões do Cloud Run.

Os ajustes de alocação de instâncias não são instantâneos. Quando você altera a alocação de instâncias para revisões, todas as solicitações em processamento continuam até a conclusão. As solicitações em andamento não são descartadas, e o Cloud Run pode direcionar essas solicitações para uma nova revisão ou uma revisão anterior durante o período de transição.

Ciclo de vida das divisões de instâncias

Se você dividir instâncias entre várias revisões ou atribuir instâncias a uma revisão anterior, todas as implantações subsequentes usarão esse padrão de divisão de instâncias. Para voltar a usar apenas a revisão mais recente sem divisão de instâncias, envie todas as instâncias para a revisão mais recente.

Funções exigidas

Se quiser ter as permissões necessárias para gerenciar os pools de workers e as revisões do pool de workers do Cloud Run, peça ao administrador para conceder a você o papel do IAM de Desenvolvedor do Cloud Run (roles/run.developer) no pool de workers do Cloud Run.

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o pool de workers do Cloud Run interage com Google Cloud APIs, como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Reverter para uma revisão anterior

Para reverter para uma revisão anterior, use o Google Cloud console, ou a Google Cloud CLI:

Console

  1. Noconsole, acesse os pools de workers do Cloud Run: Google Cloud

    Acessar o Cloud Run

  2. Localize o pool de workers na lista e clique nele.

  3. Clique na guia Revisões para mostrar a lista de revisões atuais desse pool de workers.

  4. Clique em Gerenciar divisões de instâncias para mostrar o formulário de gerenciamento de instâncias. O Cloud Run lista a revisão de serviço mais recente. No formulário, configure os seguintes detalhes:

    1. Adicionar revisão e use a lista suspensa para selecionar uma revisão anterior.
    2. Defina a porcentagem de instâncias da revisão anterior como 100.
    3. Defina a porcentagem da revisão de serviço mais recente como 0.
    4. Clique em Salvar.

gcloud

Especifique as revisões para reverter executando o seguinte comando.

   gcloud run worker-pools update-instance-split WORKER_POOL --to-revisions=REVISION=100

Substitua:

  • WORKER_POOL: o nome do pool de workers.
  • REVISION: o nome da revisão para a qual você está revertendo.

YAML

  1. Se você estiver criando um novo pool de workers, pule esta etapa. Se você estiver atualizando um pool de workers existente, faça o download da configuração YAML correspondente:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. O exemplo a seguir contém a configuração YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
      instanceSplits:
      - revisionName: REVISION
        percent: 100
    

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • REGION: a Google Cloud região—por exemplo, us-central1.
    • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • REVISION: o nome da revisão para a qual você está revertendo.
  3. Crie ou atualize o pool de workers usando o seguinte comando:

    gcloud run worker-pools replace worker-pool.yaml

    O comando gcloud run worker-pools replace usa o arquivo worker-pool.yaml por padrão, se presente.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

import {
  id = "projects/PROJECT_ID/locations/REGION/workerPools/WORKER_POOL"
  to = google_cloud_run_v2_worker_pool.default
}

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }

  instance_splits {
    type     = "INSTANCE_SPLIT_ALLOCATION_TYPE_REVISION"
    revision = "REVISION"
    percent  = 100
  }
}

Substitua:

  • PROJECT_ID: o ID doprojeto. Google Cloud
  • REGION: a Google Cloud região—por exemplo, us-central1.
  • WORKER_POOL: o nome do pool de workers.
  • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • REVISION: o nome da revisão para a qual você está revertendo.

Dividir instâncias entre várias revisões

Para dividir instâncias entre duas ou mais revisões, use o Google Cloud console, ou a Google Cloud CLI:

Ao dividir instâncias entre várias revisões, verifique se a porcentagem total em todas as revisões é igual a 100% e se o número de instâncias manuais deve ser maior que o número de divisões de instâncias que atendem à carga de trabalho.

Console

  1. Noconsole, acesse os pools de workers do Cloud Run: Google Cloud

    Acessar o Cloud Run

  2. Localize o pool de workers na lista e clique nele.

  3. Clique na guia Revisões para mostrar a lista de revisões atuais desse pool de workers.

  4. Clique em Gerenciar divisões de instâncias para mostrar o formulário de gerenciamento de instâncias. O Cloud Run lista a revisão de serviço mais recente. No formulário, configure os seguintes detalhes:

    1. Defina a porcentagem da revisão de serviço mais recente para a divisão necessária. Por exemplo, reduza de 100%.

    2. Clique em Adicionar revisão e use a lista suspensa para selecionar uma revisão anterior e definir a divisão de porcentagem correspondente.

    3. Para dividir instâncias com outras revisões, clique em Adicionar revisão, e selecione outra revisão e defina a porcentagem dela.

    4. Clique em Salvar.

gcloud

Especifique as revisões e a porcentagem de instâncias executando o seguinte comando. Alocar instâncias para cada revisão em uma lista delimitada por vírgulas:

   gcloud run worker-pools update-instance-split WORKER_POOL --to-revisions=LIST

Substitua:

  • WORKER_POOL: o nome do pool de workers.

  • LIST: lista delimitada por vírgulas de revisões e porcentagens:

    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx.

    Por exemplo, my-worker-pool-s5sxn=10,my-worker-pool-cp9kw=90.

YAML

  1. Se você estiver criando um novo pool de workers, pule esta etapa. Se você estiver atualizando um pool de workers existente, faça o download da configuração YAML correspondente:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. O exemplo a seguir contém a configuração YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      labels:
        cloud.googleapis.com/location: REGION
      annotations:
        run.googleapis.com/scalingMode: manual
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
      instanceSplits:
      - revisionName: REVISION1
        percent: PERCENTAGE1
      - revisionName: REVISION2
        percent: PERCENTAGE2
    

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • REGION: a Google Cloud região—por exemplo, us-central1.
    • INSTANCE_COUNT: o número de instâncias.
    • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • REVISION1 e REVISION2: o nome das revisões.
    • PERCENTAGE1 e PERCENTAGE2: a porcentagem de instâncias a serem alocadas para cada uma dessas revisões. Esses valores precisam somar 100.
  3. Crie ou atualize o pool de workers usando o seguinte comando:

    gcloud run worker-pools replace worker-pool.yaml

    O comando gcloud run worker-pools replace usa o arquivo worker-pool.yaml por padrão, se presente.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

import {
  id = "projects/PROJECT_ID/locations/REGION/workerPools/WORKER_POOL"
  to = google_cloud_run_v2_worker_pool.default
}

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }

  instance_splits {
    type     = "INSTANCE_SPLIT_ALLOCATION_TYPE_REVISION"
    revision = "REVISION1"
    percent  = PERCENTAGE1
  }
  instance_splits {
    type     = "INSTANCE_SPLIT_ALLOCATION_TYPE_REVISION"
    revision = "REVISION2"
    percent  = PERCENTAGE2
  }
}

Substitua:

  • PROJECT_ID: o ID doprojeto. Google Cloud
  • REGION: a Google Cloud região—por exemplo, us-central1.
  • WORKER_POOL: o nome do pool de workers.
  • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • REVISION1 e REVISION2: o nome das revisões.
  • PERCENTAGE1 e PERCENTAGE2: a porcentagem de instâncias a serem alocadas para cada uma dessas revisões. Esses valores precisam somar 100.

Alocar instâncias para a revisão mais recente

Ao implantar uma nova revisão, é possível alocar 100% das instâncias para essa revisão e todas as futuras, substituindo qualquer divisão de instâncias estabelecida.

gcloud

Para alocar 100% das instâncias para a revisão mais recente, execute os seguintes comandos:

  • Use a flag --to-latest para direcionar 100% das instâncias para a revisão mais recente e alocar automaticamente todas as instâncias para qualquer nova revisão que você implantar:

    gcloud run worker-pools update-instance-split WORKER_POOL --to-latest
    
  • Opcionalmente, use a flag --to-revisions com a palavra-chave LATEST para sempre alocar uma porcentagem flutuante de instâncias para a revisão mais recente quando você implantar uma. Para definir uma porcentagem de instâncias que sempre flutuam para a revisão mais recente, execute o seguinte comando:

    gcloud run worker-pools update-instance-split WORKER_POOL --to-revisions=LATEST=PERCENTAGE
    

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • PERCENTAGE: a porcentagem de instâncias a serem alocadas para as revisões mais recentes e futuras.

YAML

  1. Se você estiver criando um novo pool de workers, pule esta etapa. Se você estiver atualizando um pool de workers existente, faça o download da configuração YAML correspondente:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. O exemplo a seguir contém a configuração YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
      instanceSplits:
      - latestRevision: true
        percent: 100
    

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • REGION: a Google Cloud região—por exemplo, us-central1.
    • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  3. Crie ou atualize o pool de workers usando o seguinte comando:

    gcloud run worker-pools replace worker-pool.yaml

    O comando gcloud run worker-pools replace usa o arquivo worker-pool.yaml por padrão, se presente.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }

  instance_splits {
    type = "INSTANCE_SPLIT_ALLOCATION_TYPE_LATEST"
    percent  = 100
  }
}

Substitua:

  • WORKER_POOL: o nome do pool de workers.
  • REGION: a Google Cloud região—por exemplo, us-central1.
  • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest

A seguir