Todas as instâncias do Cloud Run são isoladas em sandbox. A tecnologia de isolamento e os recursos disponíveis variam de acordo com o ambiente de execução selecionado.
O ambiente de execução de primeira geração é baseado no gVisor e apresenta tempos rápidos de inicialização a frio e emulação da maioria, mas não de todas as chamadas de sistema operacional.
O ambiente de execução de segunda geração é uma microVM e oferece compatibilidade total com o Linux em vez de emulação de chamada do sistema. Esse ambiente de execução fornece:
- Desempenho mais rápido da CPU
- Desempenho de rede mais rápido, principalmente na presença de perda de pacotes
- Compatibilidade total com Linux, incluindo compatibilidade com todas as chamadas do sistema, namespaces e cgroups
- Compatibilidade com sistemas de arquivos de rede
O ambiente de execução de segunda geração geralmente tem um desempenho mais rápido sob carga sustentada, mas ele tem tempos de inicialização a frio mais longos do que a primeira geração para alguns serviços.
Os dois ambientes de execução têm o mesmo preço. Consulte a página de preços do Cloud Run para mais detalhes.
Selecionar um ambiente de execução para um serviço do Cloud Run
Por padrão, os serviços do Cloud Run não têm um ambiente de execução especificado. Isso significa que o Cloud Run seleciona o ambiente de execução com base nos recursos usados. Se você não especificar um ambiente de execução para o serviço, o Cloud Run poderá selecionar o ambiente de primeira ou segunda geração.
Os jobs do Cloud Run e os pools de workers usam apenas o ambiente de execução de segunda geração, e isso não pode ser alterado.
Como escolher um ambiente de execução
Use a primeira geração se uma das seguintes condições se aplicar:
- O serviço do Cloud Run tem tráfego intenso e precisa ser escalonado horizontalmente de forma rápida para muitas instâncias, ou o serviço é sensível a tempos de inicialização a frio.
- O serviço do Cloud Run tem tráfego pouco frequente que faz com que o escalonamento horizontal não seja frequente.
- Você quer usar menos de 512 MiB de memória. O ambiente de execução de segunda geração requer pelo menos 512 MiB de memória.
Use a segunda geração se uma das seguintes condições se aplicar ao serviço do Cloud Run:
- Seu serviço precisa usar o NFS, que só é compatível com a segunda geração.
- O serviço tem tráfego relativamente estável e tolera inicializações a frio um pouco mais lentas.
- O serviço tem cargas de trabalho com uso intensivo da CPU.
- Seu serviço pode se beneficiar com um desempenho de rede mais rápido.
- Seu serviço usa a saída direta de VPC para enviar tráfego a uma rede VPC e exige o melhor desempenho de rede possível.
- Seu serviço precisa usar um software que tenha problemas para ser executado na primeira geração devido a chamadas do sistema não implementadas.
- Seu serviço precisa da funcionalidade cgroup do Linux.
- Seu serviço usa infraestrutura de terceiros para proteger contêineres.
Funções exigidas
Para receber as permissões necessárias para configurar e 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
Se você estiver implantando um serviço ou uma função do código-fonte, também precisará ter outros papéis concedidos a você no projeto e na conta de serviço do Cloud Build.
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 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.
Definir e atualizar o ambiente de execução
Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem essa configuração de modo automático, a menos que você faça atualizações explícitas para alterar esse comportamento.
O padrão para serviços do Cloud Run é não especificado, o que significa que o Cloud Run seleciona um ambiente de execução adequado. Outra opção é especificar um ambiente de execução. Para usar a segunda geração, especifique pelo menos 512 MiB de memória.
É possível definir o ambiente de execução usando o console Google Cloud , a linha de comando gcloud ou um arquivo YAML ao criar um novo serviço ou implantar uma nova revisão:
Console
No Google Cloud console, acesse o Cloud Run:
Selecione Serviços no menu de navegação do Cloud Run e clique em Implantar contêiner para configurar um novo serviço. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.
Ao configurar um novo serviço, preencha a página inicial de configurações de serviço e clique em Contêineres, volumes, Rede e segurança para expandir essa página.
Clique na guia Contêiner.
- Selecione o ambiente de execução desejado usando os botões de opção. Mantenha "Padrão" para permitir que o Cloud Run selecione um ambiente de execução adequado.
Clique em Criar ou Implantar.
gcloud
É possível atualizar o ambiente de execução de um determinado serviço usando o seguinte comando:
gcloud run services update SERVICE --execution-environment ENVIRONMENT
Substitua SERVICE pelo nome do serviço e ENVIRONMENT
pelo ambiente de execução desejado. Especifique o valor gen1 para a primeira
geração ou gen2 para a segunda geração.
Também é possível definir o ambiente de execução durante a implantação usando o comando:
gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT
Substitua:
- 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. ENVIRONMENT: o ambiente de execução desejado. Especifique o valorgen1para a primeira geração ougen2para a segunda geração.
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
defina a anotação
run.googleapis.com/execution-environment:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/execution-environment: ENVIRONMENT
Substitua:
- SERVICE: o nome do seu serviço do Cloud Run.
- ENVIRONMENT: o ambiente de execução selecionado.
Especifique o valor
gen1para a primeira geração ougen2para a segunda geração.
Remova a anotação
run.googleapis.com/execution-environmentdo comportamento padrão.Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
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 = "cloudrun-service-execution-environment"
location = "REGION"
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
execution_environment = "ENVIRONMENT"
}
}
Substitua:
- REGION: a Google Cloud região. Por exemplo,
europe-west1. - ENVIRONMENT:
EXECUTION_ENVIRONMENT_GEN1para a primeira geração ouEXECUTION_ENVIRONMENT_GEN2para a segunda geração.
Ver configurações do ambiente de execução
Para ver as configurações atuais do ambiente de execução do serviço do Cloud Run:
Console
No console do Google Cloud , acesse a página Serviços do Cloud Run:
Clique no serviço de seu interesse para abrir a página Detalhes do serviço.
Clique na guia Revisões.
No painel de detalhes à direita, a configuração "Ambiente de execução" é listada na guia Contêiner.
gcloud
Use o comando a seguir:
gcloud run services describe SERVICE
Localize a configuração do ambiente de execução na configuração retornada.
Encerramentos sem dificuldades
Quando uma instância do Cloud Run está sendo encerrada, ela recebe um
sinal SIGTERM
para permitir um encerramento completo de 10 segundos.
Como processar o sinal SIGTERM
Recomendamos que o contêiner instale um gerenciador SIGTERM, especialmente se você estiver usando o faturamento com base em solicitações.
Ao processar o SIGTERM, o contêiner pode realizar as tarefas de limpeza necessárias, como a limpeza dos registros antes da saída. Se o contêiner não capturar o SIGTERM, ele ainda terá 10 segundos para executar essas tarefas. Esses 10 segundos são faturados.
Como verificar se o seu contêiner processa SIGTERM
Para determinar se o seu contêiner tem um gerenciador de SIGTERM instalado:
Inicie o Cloud Shell. Você pode encontrar
Ativar o Cloud Shell no cabeçalho da página de documentação que você está usando. Talvez seja necessário autorizá-lo e aguardar o provisionamento. Como alternativa, inicie uma sessão independente.
Execute o contêiner localmente no Cloud Shell:
docker run IMAGE_URL
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 segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.Abra outra guia no Cloud Shell e receba uma lista dos contêineres em execução na sessão atual do Cloud Shell:
docker container ls
É necessário localizar o ID do contêiner retornado pelo comando.
Usando o ID do contêiner, envie um sinal SIGTERM para o contêiner.
docker kill -s SIGTERM CONTAINER_ID
Volte à guia em que você invocou
docker runpara ver se o contêiner foi encerrado (interrompido). Se o sinal SIGTERM encerrou o contêiner, ele está processando SIGTERM.
Como processar SIGTERM
Se o contêiner não processa SIGTERM, a maneira mais simples de adicionar um gerenciador SIGTERM
é encapsular o serviço com tini. Isso faz com que o serviço seja executado
como um subprocesso de tini, que assume o papel do processo de init do contêiner.
Consulte as Instruções do Docker.
Outra possibilidade é mudar o aplicativo para processar diretamente SIGTERM.
A seguir
- Para usar o Filestore com o Cloud Run, consulte Como usar o Filestore com o Cloud Run.
- Para usar o Cloud Storage FUSE com o Cloud Run, consulte Como usar o Cloud Storage FUSE com o Cloud Run.