Nesta página, descrevemos como escalonar seu serviço manualmente. Ele também fornece instruções para um caso de uso comum: mudar 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 faz o escalonamento horizontal automático 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 seja necessário definir um número específico de instâncias usando o escalonamento manual.
Com o escalonamento manual, é possível definir uma contagem específica de instâncias, independente do tráfego ou da utilização, sem precisar fazer uma nova implantação. Tudo isso oferece a opção de escrever sua própria lógica de escalonamento usando um sistema externo. Consulte Escalonamento com base em programação para um exemplo.
Configurações mínimas e máximas no nível da revisão e escalonamento manual
Se você definir o escalonamento manual para o serviço, as configurações de instâncias mínimas e máximas no nível da revisão 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 com escalonamento manual. Isso inclui o comportamento das revisões somente com tag de tráfego.
Durante uma divisão de tráfego, cada revisão recebe instâncias 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 manual de instâncias, algumas revisões não terão instâncias. O tráfego enviado a essas revisões receberá o mesmo erro que se elas estivessem desativadas.
Para todas as revisões que recebem tráfego em uma divisão de tráfego, as instâncias mínimas e máximas no nível da revisão são desativadas.
Se uma revisão estiver ativa apenas devido a tags de tráfego:
- Se o número mínimo de instâncias no nível da revisão estiver definido, o número especificado de instâncias será iniciado, mas não será contabilizado na contagem total de instâncias manuais do serviço. A revisão não será escalonada automaticamente.
- Se o número mínimo de instâncias no nível da revisão não estiver definido, 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
Ao usar o escalonamento manual, o comportamento de faturamento é semelhante ao do recurso instâncias mínimas.
Ou seja, com o escalonamento manual e o faturamento com base em instâncias, as instâncias inativas escalonadas manualmente são faturadas como instâncias ativas.
Se você usar o escalonamento manual com faturamento baseado em solicitações, as instâncias inativas escalonadas manualmente serão cobradas como instâncias mínimas inativas. Para detalhes completos sobre 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:
-
Desenvolvedor do Cloud Run (
roles/run.developer
) no serviço Cloud Run -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na identidade do serviço -
Leitor do Artifact Registry (
roles/artifactregistry.reader
) no repositório do Artifact Registry da imagem de contêiner implantada (se aplicável)
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 interage com APIs doGoogle 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 Google Cloud , a Google Cloud CLI, o arquivo YAML ou a API ao criar ou atualizar um serviço:
Console
No Google Cloud console, acesse o Cloud Run:
Se você estiver configurando um novo serviço, selecione Serviços no menu e clique em Implantar contêiner para mostrar o formulário Criar serviço. Se você estiver configurando um serviço atual, clique nele para exibir o painel de detalhes e, em seguida, clique no ícone de caneta ao lado de Escalonamento no canto superior direito do painel de detalhes.
Localize o formulário Escalonamento de serviço (para um novo serviço) ou o formulário Editar escalonamento para um serviço atual.
No campo Número de instâncias, especifique o número de instâncias de contêiner para o serviço.
Clique em Criar para um novo serviço ou em Salvar para um serviço atual.
gcloud
Para especificar o escalonamento de um novo serviço, use o comando deploy:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Substitua:
- SERVICE: o nome do serviço.
- INSTANCE_COUNT: o número de instâncias do serviço.
Isso define o serviço para escalonamento manual. Especifique um valor de
0
para desativar o serviço. Especifique um valor deauto
para usar o comportamento padrão de escalonamento automático do Cloud Run. - IMAGE_URL: 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 segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
Especifique o escalonamento de um serviço atual usando o seguinte comando update:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
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
Atualize os atributos
scalingMode
emanualInstanceCount
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Substitua:
- SERVICE: o nome do seu serviço do Cloud Run
- MODE:
manual
para escalonamento manual ouautomatic
para o comportamento de escalonamento automático padrão do Cloud Run. - INSTANCE_COUNT: 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.
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 '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Substitua:
- ACCESS_TOKEN: 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 usandogcloud 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: o número de instâncias do serviço.
Isso define o serviço para escalonamento manual. Especifique um valor de
0
para desativar o serviço. - SERVICE: o nome do serviço.
- REGION: a região Google Cloud em que o serviço está implantado.
- PROJECT_ID: o ID do projeto do Google Cloud .
Para mudar o modo de escalonamento de manual para automático, envie uma solicitação PATCH
ao endpoint service
da API Cloud Run Admin e defina o campo scalingMode
como AUTOMATIC
.
Por exemplo, execute o seguinte comando curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_service
na configuração do Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "INSTANCE_COUNT"
}
}
Substitua:
- SERVICE_NAME: o nome do seu serviço do Cloud Run.
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: 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 segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - INSTANCE_COUNT: o número de instâncias que você está escalonando manualmente para o serviço. Esse número de instâncias é dividido entre todas as revisões com tráfego especificado com base na porcentagem de tráfego que elas estão recebendo.
Ver 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
No Google Cloud console, acesse o Cloud Run:
Clique no serviço de seu interesse para abrir o painel Detalhes do serviço.
A configuração de escalonamento atual é mostrada no canto superior direito do painel de detalhes do serviço, depois do rótulo Escalonamento, ao lado do ícone de caneta.
gcloud
Use o comando a seguir para conferir a configuração de escalonamento atual do serviço:
gcloud 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 baixar a 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, todas as solicitações em processamento são concluídas.
No entanto, outras solicitações para o URL do serviço vão falhar com um erro Service unavailable
ou Service disabled
.
As solicitações para 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 Google Cloud , a Google Cloud CLI, um arquivo YAML ou a API:
Console
No Google Cloud console, acesse o Cloud Run:
Clique no serviço que você quer desativar para exibir o painel de detalhes e, em seguida, clique no ícone de caneta ao lado de Escalonamento no canto superior direito do painel de detalhes.
Localize o formulário Editar escalonamento e selecione Escalonamento manual.
No campo Número de instâncias, insira o valor
0
(zero).Clique em Salvar.
gcloud
Para desativar um serviço, use o comando a seguir para definir o escalonamento como zero:
gcloud run services update SERVICE --scaling=0
SERVICE pelo nome do serviço;
YAML
Faça o download da configuração YAML do serviço:
gcloud run services describe SERVICE --format export > service.yaml
Defina o atributo
manualInstanceCount
como zero (0
):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
Substitua SERVICE pelo nome do serviço do Cloud Run.
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 '{"scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Substitua:
- ACCESS_TOKEN: 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 usandogcloud 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: o nome do serviço.
- REGION: a região Google Cloud em que o serviço está implantado.
- PROJECT_ID: o ID do projeto do Google Cloud .
Terraform
Para desativar um serviço, defina o atributo manual_instance_count
como zero (0
):
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "0"
}
}
Substitua:
- SERVICE_NAME: o nome do seu serviço do Cloud Run.
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: 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 segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Exemplo de escalonamento com base em 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 jobs, cada um deles invocando a API Cloud Run Admin para escalonar o número de instâncias. O primeiro job do Cloud Scheduler define o escalonamento manual do serviço para um número especificado de instâncias durante o horário comercial (9h às 17h, de segunda a sexta-feira). O segundo job define o serviço para reduzir escala vertical para um número especificado de instâncias durante o horário de folga.
Neste exemplo, usamos o guia de início rápido do Cloud Run por simplicidade, mas você pode usar um serviço de sua escolha.
Para configurar o escalonamento manual com base em programação:
Implante o serviço usando o seguinte comando:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Substitua:
- SERVICE: o nome do serviço do Cloud Run.
- REGION: a região em que o serviço do Cloud Run é implantado.
- PROJECT_ID: o ID do projeto do Google Cloud .
Configure o serviço para escalonamento manual em 10 instâncias usando o seguinte comando:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Crie um job do Cloud Scheduler que faça escalonamento manual para um número especificado de instâncias de serviço 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='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua:
- REGION: a região em que o serviço do Cloud Run é implantado.
- PROJECT_ID: o ID do projeto do Google Cloud .
- INSTANCE_COUNT: o número de instâncias para escalonar. Por exemplo,
10
. - PROJECT_NUMBER: o número do projeto Google Cloud .
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 o número especificado. 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 serviços do Cloud Run.Crie um job do Cloud Scheduler que reduza manualmente as instâncias de serviço durante o horário de folga:
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='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua:
- REGION: a região em que o serviço do Cloud Run é implantado.
- PROJECT_ID: o ID do projeto do Google Cloud .
- INSTANCE_COUNT: o número de instâncias para escalonar.
Para desativar o serviço, defina como
0
. - PROJECT_NUMBER: o número do projeto Google Cloud .
Esse comando cria um job do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo as instâncias de escalonamento manual para o número de instâncias especificado. Definir as instâncias como zero desativa o serviço, mas não os jobs do Cloud Scheduler. Esses jobs continuam sendo executados e vão redefinir (e reativar) o serviço para um número maior de instâncias conforme programado.