Sobre ambientes de execução

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:

  1. Inicie o Cloud Shell. Você pode encontrar Botão "Ativar o Cloud Run" 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.

  2. 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 formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

  3. 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.

  4. Usando o ID do contêiner, envie um sinal SIGTERM para o contêiner.

    docker kill -s SIGTERM CONTAINER_ID
  5. 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