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. Portanto, a menos que você especifique um ambiente de execução para seu serviço, o Cloud Run poderá selecionar o ambiente de primeira ou segunda geração.
Os jobs do Cloud Run usam apenas o ambiente de execução de segunda geração, e isso não pode ser alterado em jobs.
O ambiente de execução de primeira geração conta com tempos rápidos de inicialização a frio e emulação da maior parte, mas não de todas as chamadas do sistema operacional. Originalmente, esse era o único ambiente de execução disponível para serviços no Cloud Run.
O ambiente de execução de segunda geração fornece 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 a maioria dos serviços.
É possível selecionar o ambiente de execução do serviço do Cloud Run ao implantar um novo serviço ou uma nova revisão do serviço. Se você não especificar um ambiente de execução, a primeira geração será usada por padrão.
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 um sistema de arquivos de rede, 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 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.
Práticas recomendadas para usar o ambiente de execução de segunda geração
Recomendamos que o contêiner instale um gerenciador SIGTERM, especialmente se você estiver usando o modelo de faturamento sob demanda da CPU.
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 faturáveis.
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 tem 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 run
para 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 é alterar seu aplicativo para processar diretamente SIGTERM.
A seguir
- Para especificar um ambiente de execução para os serviços do Cloud Run, consulte Selecionar um ambiente de execução.
- Para especificar a memória dos serviços do Cloud Run, consulte Limites de memória.
- 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.
- Para usar sistemas de arquivos de rede, como NFS, NDB, 9P, CIFS/Samba e Ceph com o Cloud Run, consulte Como usar sistemas de arquivos de rede.