Escalonamento manual

Esta página descreve como dimensionar manualmente seu serviço. Ele também fornece instruções para um caso de uso comum, alterando a contagem de instâncias com base em uma programação usando jobs do Cloud Scheduler e a API Cloud Run Admin.

Visão geral

Por padrão, o Cloud Run escalona automaticamente para um número máximo especificado ou padrão de instâncias, dependendo do tráfego e da utilização da CPU. No entanto, em alguns casos de uso, talvez você queira definir um número específico de instâncias usando o escalonamento manual.

O escalonamento manual permite definir uma contagem de instâncias específica, independentemente do tráfego ou da utilização, sem exigir a nova implantação. Tudo isso oferece a opção de escrever sua própria lógica de escalonamento usando um sistema externo. Consulte Como escalonar com base em programações para conferir um exemplo.

Como alternar entre o escalonamento automático e manual

A mudança de modo de escalonamento afeta a contagem de instâncias e as configurações de instâncias mínimas no nível de serviço e máximas, conforme mostrado na tabela a seguir:

Direção do escalonamento do switch Contagem de instâncias Instâncias mínimas e máximas
De automático para manual Se a contagem de instâncias não for especificada no comando que alterna os modos, herde a configuração de instâncias mínimas no nível de serviço. Após a troca, as instâncias mínimas e máximas no nível de serviço são redefinidas.
De manual para automático A contagem de instâncias manual não está definida É necessário especificar ambas as instâncias mínimas e máximas no nível de serviço ou nenhuma delas. Especificar apenas um retorna um erro. Se você especificar nenhum deles no comando que alterna os modos, as instâncias mínimas e máximas no nível de serviço herdarão a contagem de instâncias manual.

Configurações mínimas e máximas no nível da revisão e escalonamento manual

Se você definir o serviço para escalonamento manual, as configurações de instâncias mínimas no nível da revisão e máximas serão ignoradas.

Divisão de tráfego para escalonamento manual

A lista a seguir descreve como as instâncias são alocadas ao dividir o tráfego no escalonamento manual. Isso inclui o comportamento das revisões somente de tags de tráfego.

  • Durante uma divisão de tráfego, cada revisão recebe instâncias alocadas proporcionalmente, com base na divisão de tráfego, semelhante à divisão de tráfego com instâncias mínimas no nível de serviço.

  • Se o número de revisões que recebem tráfego exceder a contagem de instâncias manuais, algumas das revisões não terão instâncias. O tráfego enviado para essas revisões vai receber o mesmo erro que se as revisões estivessem desativadas.

  • Para todas as revisões que recebem tráfego em uma divisão de tráfego, todas as instâncias mínimas e máximas no nível da revisão são desativadas.

  • Se uma revisão estiver ativa somente devido a tags de tráfego:

    • Se as instâncias mínimas no nível da revisão estiverem definidas, o número especificado de instâncias será iniciado, mas não vai contar para a contagem total de instâncias manuais do serviço. A revisão não vai ser dimensionada automaticamente.
    • Se as instâncias mínimas no nível da revisão não estiverem definidas, a revisão será escalonada para no máximo uma instância, em resposta ao tráfego enviado para o URL da tag.

Comportamento de faturamento usando o escalonamento manual

Quando você usa o escalonamento manual, o comportamento de faturamento é semelhante ao comportamento quando você usa o recurso de instâncias mínimas.

Ou seja, com o escalonamento manual e o faturamento baseado em instâncias, as instâncias inativas com escalonamento manual são faturadas como instâncias ativas.

Se você usar o escalonamento manual com o faturamento baseado em solicitações, as instâncias inativas dimensionadas manualmente serão faturadas como instâncias mínimas inativas. Para detalhes completos de faturamento, consulte a página de preços.

Funções exigidas

Para receber as permissões necessárias para implantar os serviços do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:

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 serviço do Cloud Run interagir com APIsGoogle Cloud , 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.

Configurar o escalonamento

É possível configurar o modo de escalonamento usando o console do Google Cloud, a CLI do Google Cloud, o arquivo YAML ou a API ao criar ou atualizar um serviço:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Se você estiver configurando um novo serviço, clique em Implantar contêiner e selecione Serviço para mostrar o formulário Criar serviço. Se você estiver configurando um serviço atual, clique nele para mostrar o painel de detalhes e, em seguida, clique no ícone de caneta ao lado de Escala no canto superior direito do painel de detalhes.

  3. Localize o formulário Dimensionamento do serviço (para um novo serviço) ou o Editar dimensionamento para um serviço atual.

    imagem

    No campo Número de instâncias, especifique o número de instâncias de contêiner para o serviço.

  4. Clique em Criar para um novo serviço ou em Salvar para um serviço atual.

gcloud

Para especificar a escalação de um novo serviço, use o comando deploy:

gcloud beta run deploy SERVICE \
    --scaling=INSTANCE_COUNT \
    --image IMAGE_URL

Substitua:

  • SERVICE pelo nome do serviço;
  • INSTANCE_COUNT com o número de instâncias do serviço. Isso define o serviço como escalonamento manual. Especifique um valor de 0 para desativar o serviço. Especifique um valor de auto para usar o comportamento padrão de autoescalonamento do Cloud Run.
  • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Especifique o escalonamento para um serviço usando o comando update:

gcloud beta run services update SERVICE \
   --scaling=INSTANCE_COUNT

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize os atributos scalingMode e manualInstanceCount:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/launch-stage: BETA
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run;
    • MODE com manual para escalonamento manual ou automatic para o comportamento padrão de escalonamento automático do Cloud Run.
    • INSTANCE_COUNT com o número de instâncias que você está escalonando manualmente para o serviço. Especifique um valor de 0 para desativar o serviço.
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

API REST

Para atualizar as instâncias mínimas no nível do serviço de um determinado serviço, envie uma solicitação HTTP PATCH para o endpoint service da API Cloud Run Admin.

Por exemplo, usando curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount

Substitua:

  • ACCESS_TOKEN por um token de acesso válido para uma conta com as permissões do IAM para atualizar um serviço. Por exemplo, se você fez login em gcloud, é possível recuperar um token de acesso usando gcloud auth print-access-token. Em uma instância de contêiner do Cloud Run, é possível recuperar um token de acesso por meio do servidor de metadados da instância de contêiner.
  • MANUAL_INSTANCE_COUNT com o número de instâncias do serviço. Isso define o serviço como escalonamento manual. Especifique um valor de 0 para desativar o serviço.
  • SERVICE pelo nome do serviço;
  • REGION pela região Google Cloud em que o serviço foi implantado.
  • PROJECT_ID pelo ID do projeto Google Cloud .

Conferir a configuração de escalonamento do serviço

Para conferir as instâncias de configuração de escalonamento do serviço do Cloud Run:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço de seu interesse para abrir o painel Detalhes do serviço.

  3. A configuração de dimensionamento atual é mostrada no canto superior direito do painel de detalhes do serviço, depois do rótulo Dimensionamento, ao lado do ícone de caneta.

gcloud

Use o comando a seguir para conferir a configuração de escalonamento atual do serviço:

gcloud beta run services describe SERVICE

SERVICE pelo nome do serviço;

Procure o campo Scaling: Manual (Instances: ) perto da parte de cima do texto retornado pelo describe.

YAML

Use o comando a seguir para fazer o download da configuração YAML do serviço:

gcloud run services describe SERVICE --format export > service.yaml

A configuração de escalonamento está contida nos atributos scalingMode e manualInstanceCount.

Desativar um serviço

Quando você desativa um serviço, as solicitações que estão sendo processadas podem ser concluídas. No entanto, qualquer outra solicitação para o URL do serviço falhará com um erro Service unavailable ou Service disabled.

As solicitações de revisões de serviço que estão ativas apenas devido a tags de tráfego não são afetadas, porque essas revisões não são desativadas.

Para desativar um serviço, defina o escalonamento como zero. É possível desativar um serviço usando o console do Google Cloud, a CLI do Google Cloud, o arquivo YAML ou a API:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço que você quer desativar para mostrar o painel de detalhes e, em seguida, clique no ícone de caneta ao lado de Escala no canto superior direito do painel de detalhes.

  3. Localize o formulário Editar escalonamento e selecione Escalonamento manual.

    imagem

    No campo Número de instâncias, insira o valor 0 (zero).

  4. Clique em Salvar.

gcloud

Para desativar um serviço, use o comando a seguir para definir a escala em zero:

gcloud beta run services update SERVICE --scaling=0

SERVICE pelo nome do serviço;

YAML

  1. Faça o download da configuração YAML do serviço:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Defina o atributo manualInstanceCount como zero (0):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/launch-stage: BETA
      run.googleapis.com/scalingMode: manual
      run.googleapis.com/manualInstanceCount: `0`

    Substitua SERVICE pelo nome do serviço do Cloud Run.

  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

API REST

Para desativar um serviço, envie uma solicitação HTTP PATCH ao endpoint service da API Cloud Run Admin.

Por exemplo, usando curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":0 }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount

Substitua:

  • ACCESS_TOKEN por um token de acesso válido para uma conta com as permissões do IAM para atualizar um serviço. Por exemplo, se você fez login em gcloud, é possível recuperar um token de acesso usando gcloud auth print-access-token. Em uma instância de contêiner do Cloud Run, é possível recuperar um token de acesso por meio do servidor de metadados da instância de contêiner.
  • SERVICE pelo nome do serviço;
  • REGION pela região Google Cloud em que o serviço foi implantado.
  • PROJECT_ID pelo ID do projeto Google Cloud .

Exemplo de dimensionamento com base na programação

Um caso de uso comum do escalonamento manual é mudar a contagem de instâncias com base em uma programação predefinida. Neste exemplo, usamos o Cloud Scheduler para programar dois trabalhos, cada um deles invoca a API Cloud Run Admin para dimensionar o número de instâncias. O primeiro job define o serviço para escalonar manualmente para 10 instâncias durante o horário comercial (das 9h às 17h, de segunda a sexta). A segunda tarefa define o serviço para dimensionar para zero instâncias durante o horário de funcionamento.

Observe que definir as instâncias como zero, conforme mostrado no exemplo, desativa o serviço, mas não os jobs do Cloud Scheduler. Esses jobs continuam sendo executados e redefinirão (e reativarão) o serviço para 10 instâncias conforme programado.

Neste exemplo, usamos o guia de início rápido do Cloud Run para simplificar, mas você pode usar um serviço de sua preferência.

Para configurar o escalonamento manual com base na programação:

  1. Implante o serviço usando o seguinte comando:

    gcloud beta run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Substitua as seguintes variáveis:

    • REGION pela região em que o serviço do Cloud Run foi implantado.
    • SERVICE pelo nome do serviço do Cloud Run.
  2. Configure o serviço para escalonamento manual para 10 instâncias usando o seguinte comando:

    gcloud beta run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Crie um job do Cloud Scheduler que dimensione manualmente as instâncias de serviço para 10 instâncias durante o horário comercial:

    gcloud scheduler jobs create http hello-start-instances \
      --location=REGION \
      --schedule="0 9 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Esse comando cria um job do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo o número de instâncias como 10. O exemplo usa a conta de serviço padrão do Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com para os jobs do Cloud Scheduler. É possível usar qualquer conta de serviço que tenha permissões para atualizar os serviços do Cloud Run.

  4. Crie um job do Cloud Scheduler que escalone manualmente as instâncias do serviço para zero instâncias durante o horário de inatividade, desativando o serviço:

    gcloud scheduler jobs create http hello-stop-instances \
      --location=REGION \
      --schedule="0 17 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":0}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Esse comando cria um job do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo as instâncias de dimensionamento manual como zero. Isso desativa o serviço, mas não os jobs do Cloud Scheduler, que continuam sendo executados e redefinindo (e reativando) o serviço para 10 instâncias conforme programado.