Configurar um disco temporário para pools de workers do Cloud Run

O Cloud Run oferece um volume de disco temporário que persiste apenas durante a instância. Com esse recurso, é possível especificar a quantidade de disco necessária e o local para montá-lo. O Cloud Run alocará essa quantidade de disco ao recurso.

Os discos são provisionados automaticamente, pré-formatados para ext4 e criptografados com chaves específicas da instância na inicialização. O disco temporário cria o volume para que qualquer usuário possa ler ou gravar nele. Como o armazenamento é temporário, todos os dados são excluídos permanentemente quando a instância é encerrada. Isso inclui encerramentos causados por:

  • Falhas de instância
  • Migração de tráfego para uma nova revisão

Os discos são dedicados a uma instância específica e não são compartilhados entre outras instâncias ou revisões. Você tem controle sobre a estrutura do sistema de arquivos com um ponto de montagem configurável para cada volume.

Antes de encerrar uma instância, o Cloud Run envia um sinal SIGTERM para todos os contêineres em uma instância, indicando o início de um período de 10 segundos antes que o encerramento real ocorra. Nesse ponto, o Cloud Run envia um sinal SIGKILL. É possível usar essa janela de 10 segundos para realizar operações de limpeza, como fazer uma rodada final de cópia do conteúdo do disco para o armazenamento permanente.

Casos de uso

É possível usar o disco temporário para:

  • Cargas de trabalho de processamento de dados: ao processar arquivos de dados grandes no Cloud Run, normalmente você armazena o arquivo inteiro na memória ou organiza a divisão dele em partes menores. Com o armazenamento temporário, não é necessário pagar por grandes quantidades de memória para fazer uma cópia local temporária dos dados. Também é possível processar conjuntos de dados maiores.
  • Armazenamento em cache: em casos de uso de exibição da Web, o armazenamento de dados em cache no disco em vez de buscar no armazenamento remoto pode otimizar a latência do aplicativo.

Limites de armazenamento e instância

Os seguintes limites são aplicáveis:

  • Limite de armazenamento de instância: cada instância é limitada a 10 GB de espaço total por padrão. Se necessário, solicite um aumento de cota.
  • Limite de volume de instância: cada instância é limitada a um máximo de 10 volumes.
  • Limite de projeto: cada projeto é limitado a 100 GB por região por padrão. Se necessário, solicite um aumento de cota.

Solicitar aumento de cota

Os projetos que usam um disco temporário do Cloud Run em uma região pela primeira vez recebem automaticamente 10 GB por instância, por limite de região e 100 GB por projeto, por limite de região.

Se você precisar de capacidade extra, solicite um aumento de cota para o pool de workers do Cloud Run. Use os links fornecidos nos botões a seguir para solicitar a cota necessária.

Cota atual Link da cota
10 GB por instância Solicitar uma cota maior por instância
100 GB por projeto Solicitar uma cota maior por projeto

Para mais informações sobre como solicitar aumentos de cota, consulte Como aumentar a cota.

Limitações

O disco temporário só está disponível no ambiente de execução de segunda geração. Por padrão, os pools de workers do Cloud Run usam o ambiente de execução de segunda geração.

Caminhos não permitidos

O Cloud Run não permite montar um volume em /dev, /proc ou /sys ou nos subdiretórios deles.

Regiões compatíveis

O disco temporário está disponível em todas as regiões de nível 1. Se você usar GPUs, o disco temporário estará disponível em todas as regiões que oferecem suporte a GPUs.

Antes de começar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Instale e inicialize a CLI gcloud.
  4. Atualize os componentes:
    gcloud components update
  5. Consulte a página de preços do Cloud Run para CPU, memória e saída de rede. O tamanho total do disco provisionado e o tempo de vida da instância que o está usando contribuem para o custo.

Funções exigidas

Para receber as permissões necessárias para configurar um disco temporário, peça ao administrador para conceder a você os papéis do IAM a seguir:

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 pool de workers do Cloud Run interagir com Google Cloud APIs, como 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.

Criar e montar um disco temporário

É possível criar e montar um disco temporário usando o Google Cloud console, a Google Cloud CLI, o YAML ou o Terraform:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acesse o Cloud Run

  2. Selecione Pools de workers no menu e clique em Implantar contêiner para configurar um novo pool de workers. Se você estiver configurando um pool de workers atual, clique nele e em Editar e implantar nova revisão.

  3. Ao configurar um novo pool de workers, preencha a página inicial do pool de workers e clique em Contêineres, rede, segurança para expandir a página de configuração do pool de workers.

  4. Clique na guia Contêiner.

    • Em Recursos:
      • Clique em Montar volume.
      • Selecione Disco temporário.
      • Insira o caminho de montagem.
      • Especifique o tamanho do disco temporário no menu.
  5. Clique em Criar ou Implantar.

gcloud

Para adicionar um volume e montá-lo:

gcloud beta run worker-pools update WORKERPOOL \
    --add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

Substitua:

  • WORKERPOOL: o nome do pool de workers.
  • VOLUME_NAME: o nome que você quer dar ao volume.
  • SIZE: o tamanho do disco. Por exemplo, 100Gi. O tamanho precisa ser de pelo menos 10Gi para volumes ephemeral-disk.
  • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.

YAML

  1. Se você estiver criando um novo pool de workers, pule esta etapa. Se você estiver atualizando um pool de workers atual, faça o download da configuração YAML correspondente:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. Configure o arquivo YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      labels:
        cloud.googleapis.com/location: REGION
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER_NAME
            image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              medium: Disk
              sizeLimit: SIZE
    

    Substitua:

    • WORKER_POOL: o nome do pool de workers.
    • REGION: a Google Cloud região.
    • CONTAINER_NAME: o nome que você quer dar ao contêiner.
    • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • VOLUME_NAME: o nome que você quer dar ao volume.
    • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
    • SIZE: o tamanho do disco. Por exemplo, 100Gi. O tamanho precisa ser de pelo menos 10Gi para volumes ephemeral-disk.
  3. Crie ou atualize o pool de workers usando o seguinte comando:

    gcloud run worker-pools replace worker-pool.yaml

    O comando gcloud run worker-pools replace usa o arquivo worker-pool.yaml por padrão, se presente.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

  resource "google_cloud_run_v2_worker_pool" "default" {
    name     = "WORKER_POOL"
    location = "REGION"
    deletion_protection = "true"
    launch_stage = "BETA"
    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }
      volumes {
        name = "VOLUME_NAME"
        empty_dir {
          medium = "DISK"
          size_limit = "SIZE"
        }
      }
    }
    lifecycle {
      ignore_changes = [
        launch_stage,
      ]
    }
  }

Substitua:

  • WORKER_POOL: o nome do pool de workers.
  • REGION: a Google Cloud região.
  • IMAGE_URL: uma referência à imagem do contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • VOLUME_NAME: o nome que você quer dar ao volume.
  • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
  • SIZE: o tamanho do disco. Por exemplo, 100Gi. O tamanho precisa ser de pelo menos 10Gi para volumes ephemeral-disk.

Como ler e gravar em um volume

Se você usar o recurso de montagem de volume do Cloud Run, poderá acessar um volume usando as mesmas bibliotecas na linguagem de programação que você usa para ler e gravar arquivos no sistema de arquivos local.

Isso é especialmente útil se você estiver usando um contêiner existente em que espera os dados sejam armazenados no sistema de arquivos local e usa o sistema de arquivos para acessá-lo.

Os snippets a seguir pressupõem uma montagem de volume com mountPath definido como /mnt/my-volume.

Nodejs

Use o módulo Sistemas de arquivos para criar um novo arquivo ou adicionar ao final de um arquivo existente no volume, /mnt/my-volume:

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

Grave em um arquivo no volume, /mnt/my-volume:

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Use o pacote os para criar um novo arquivo mantido no volume, /mnt/my-volume:

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Use a classe Java.io.File para criar um arquivo de registros no volume, /mnt/my-volume:

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Limpar e remover volumes e montagens de volume

É possível limpar todos os volumes e montagens ou remover volumes individuais e montagens de volume.

Limpar todos os volumes e montagens de volume

Para limpar todos os volumes e montagens de volume do pool de workers de contêiner único, execute o seguinte comando:

gcloud run worker-pools update WORKER_POOL \
    --clear-volumes
    --clear-volume-mounts

Se você tiver vários contêineres, siga as convenções da CLI de sidecars para limpar volumes e montagens de volume:

gcloud run worker-pools update WORKER_POOL \
    --container=container1 \
    --clear-volumes
    -–clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    -–clear-volume-mounts

Remover volumes e montagens de volume individuais

Para remover um volume, também é necessário remover todas as montagens de volume que usam esse volume.

Para remover volumes ou montagens de volume individuais, use as sinalizações remove-volume e remove-volume-mount:

gcloud run worker-pools update WORKER_POOL \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH

Práticas recomendadas

Siga as práticas recomendadas abaixo para gerenciar dados temporários de maneira eficaz e otimizar a performance de armazenamento.

Copiar para o armazenamento permanente

Se você pretende copiar o conteúdo do disco temporário para o armazenamento permanente, como um bucket do Cloud Storage, recomendamos a cópia incremental, em vez de confiar no período de carência de 10 segundos SIGTERM para SIGKILL. Consulte Contrato do ambiente de execução do contêiner para mais informações sobre encerramentos de instâncias.

O Cloud Run pode ler e gravar no Cloud Storage sem nenhuma configuração de rede adicional. Para alcançar a performance ideal, recomendamos rotear o tráfego de e para o Cloud Storage por uma rede VPC usando a VPC direta.

Esse método funciona se você não precisar que o recurso do Cloud Run acesse a Internet. Se você precisar de acesso à Internet, configure o Cloud NAT ou consulte Tráfego interno para uma API do Google.

Para configurar a saída direta de VPC com um job, conclua as seguintes etapas:

  1. No Google Cloud console, acesse a página do Cloud Run:

    Acesse o Cloud Run

  2. Selecione Pools de workers no menu e clique em Implantar contêiner para configurar um novo pool de workers. Se você estiver configurando um pool de workers atual, clique nele e em Editar e implantar nova revisão.

  3. Ao configurar um novo pool de workers, preencha a página inicial do pool de workers e clique em Contêineres, rede, segurança para expandir a página de configuração do pool de workers.

  4. Clique na guia Rede.

  5. Selecione Conectar-se a uma VPC.

  6. Para Roteamento de tráfego, selecione uma opção Rotear todo o tráfego para a VPC para enviar todo o tráfego de saída pela rede VPC.

  7. Clique em Criar ou Implantar.

    Agora é possível enviar solicitações do seu pool de workers do Cloud Run para qualquer recurso na rede VPC, conforme permitido pelas regras de firewall.

  8. Ative Acesso privado do Google na sub-rede a que você se conectou.

Resolver problemas

Se você notar velocidades de rede lentas ao fazer o download de uma grande quantidade de dados para o disco temporário, siga as etapas para ativar a VPC direta. Se a VPC direta não estiver ativada, você vai notar velocidades de transferência de rede mais lentas.