Nesta página, descrevemos como escalonar manualmente o 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
Com o escalonamento manual, é possível definir uma contagem de instâncias específica, independentemente do tráfego ou da utilização, sem precisar de uma nova implantação. Tudo isso permite que você escreva sua própria lógica de escalonamento usando um sistema externo. Para ver um exemplo, consulte Escalonamento com base em programação.
Por padrão, o Cloud Run escalona horizontalmente de forma automática para um número máximo especificado ou padrão de instâncias, dependendo do tráfego, da CPU ou das suas próprias metas personalizadas de CPU ou de utilização de simultaneidade. No entanto, para alguns casos de uso, talvez você queira definir um número específico de instâncias usando o escalonamento 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 e máximas no nível da revisão serão ignoradas.
Divisões de tráfego para escalonamento manual
A lista a seguir descreve como as instâncias são alocadas ao dividir o tráfego em escalonamento manual. Isso inclui o comportamento de 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 para essas revisões 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, 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 horizontalmente para no máximo uma instância, em resposta ao tráfego enviado ao URL da tag.
Comportamento de faturamento com escalonamento manual
Quando você usa o escalonamento manual, o comportamento de faturamento é semelhante ao recurso de instâncias mínimas.
Ou seja, com o escalonamento manual e o faturamento baseado em instância, as instâncias inativas escalonadas manualmente são faturadas como instâncias ativas.
Se você usar o escalonamento manual com o faturamento com base em solicitações, as instâncias inativas escalonadas manualmente serão faturadas como instâncias mínimas inativas. Para mais detalhes 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 conta de serviço - Leitor do Artifact Registry (
roles/artifactregistry.reader) no repositório do Artifact Registry da imagem do 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 as APIs doCloud de Confiance , 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 manual
É possível configurar o modo de escalonamento usando o console do Cloud de Confiance , a Google Cloud CLI, o arquivo YAML ou a API ao criar um serviço ou atualizar uma revisão:
Console
No console do Cloud de Confiance by S3NS , acesse o Cloud Run:
Selecione Serviços no menu de navegação do Cloud Run:
Se você estiver configurando um novo serviço, clique em Implantar contêiner e preencha a página de configurações de serviço inicial.
Se você estiver configurando um serviço atual, clique nele e na guia Escalonamento.
Clique em Escalonamento manual.
Especifique o número de instâncias de contêiner para o serviço no campo Número de instâncias.
Clique em Criar para um novo serviço. Clique em Ver diff e reimplantar e em Implantar mudanças 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
0para desativar o serviço. Especifique um valor deautopara usar o comportamento de escalonamento automático padrão do Cloud Run. IMAGE_URL: uma referência à imagem do 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 formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Especifique o escalonamento de um serviço atual usando o seguinte comando de atualização:
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
scalingModeemanualInstanceCount: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 serviço do Cloud Run.
- MODE:
manualpara escalonamento manual ouautomaticpara 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
0para desativar o serviço.
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
O comando
gcloud run services replaceusa o arquivoservice.yamlpor padrão, se ele estiver presente.
API REST
Para atualizar o número de instâncias de um determinado serviço no escalonamento manual, 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
0para desativar o serviço. - SERVICE: o nome do serviço.
- REGION: a região do Cloud de Confiance em que o serviço está implantado.
- PROJECT_ID: o ID do projeto do Cloud de Confiance .
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 região do Cloud de Confiance . Por exemplo,
europe-west1. IMAGE_URL: uma referência à imagem do 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 formato deLOCATION-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 recebem.
Ver a configuração de escalonamento do serviço
Para ver as instâncias de configuração de escalonamento do serviço do Cloud Run:
Console
No console do Cloud de Confiance by S3NS , acesse a página Serviços do Cloud Run:
Clique no serviço de seu interesse para abrir o painel Detalhes do serviço.
Clique na guia Escalonamento para encontrar as configurações de escalonamento.
gcloud
Use o comando a seguir para ver 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 do 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, todas as 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 do Cloud de Confiance , a Google Cloud CLI, o arquivo YAML ou a API:
Console
No console do Cloud de Confiance by S3NS , acesse a página Serviços do Cloud Run:
Clique no serviço que você quer desativar para exibir o painel de detalhes e, em seguida, clique na guia Escalonamento.
Selecione Escalonamento manual.
Insira o valor
0(zero) no campo Número de instâncias.Clique em Ver diferenças e implantar e em Implantar mudanças.
gcloud
Para desativar um serviço, use o seguinte comando 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
manualInstanceCountcomo 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 do Cloud de Confiance em que o serviço está implantado.
- PROJECT_ID: o ID do projeto do Cloud de Confiance .
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 região do Cloud de Confiance . Por exemplo,
europe-west1. IMAGE_URL: uma referência à imagem do 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 formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Exemplo de escalonamento com base em programação
Um caso de uso comum de escalonamento manual é alterar a contagem de instâncias com base em uma programação predefinida. Neste exemplo, usamos o Cloud Scheduler para programar dois jobs, cada um invocando a API Cloud Run Admin para escalonar o número de instâncias. O primeiro job do Cloud Scheduler define o serviço para escalonamento manual para um número especificado de instâncias durante o horário de funcionamento (das 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 período de pausa.
Neste exemplo, usamos o guia de início rápido do Cloud Run para simplificar, mas é possível 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 foi implantado.
- PROJECT_ID: o ID do projeto do Cloud de Confiance .
Configure o serviço para escalonamento manual para 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 o escalonamento manual para um número especificado de instâncias de serviço durante o horário de funcionamento:
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.s3ns-system.iam.gserviceaccount.com
Substitua:
- REGION: a região em que o serviço do Cloud Run foi implantado.
- PROJECT_ID: o ID do projeto do Cloud de Confiance .
- INSTANCE_COUNT: o número de instâncias que você quer escalonar, por
exemplo,
10. - PROJECT_NUMBER: o número do projeto do Cloud de Confiance .
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.s3ns-system.iam.gserviceaccount.compara 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.Crie um job do Cloud Scheduler que reduza manualmente a escala vertical das instâncias de serviço fora do horário de pico:
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.s3ns-system.iam.gserviceaccount.com
Substitua:
- REGION: a região em que o serviço do Cloud Run foi implantado.
- PROJECT_ID: o ID do projeto do Cloud de Confiance .
- INSTANCE_COUNT: o número de instâncias que você quer escalonar.
Para desativar o serviço, defina como
0. - PROJECT_NUMBER: o número do projeto do Cloud de Confiance .
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 como 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 em execução e vão redefinir (e reativar) o serviço para um número maior de instâncias, conforme programado.