Configurar um disco temporário para jobs do Cloud Run

O Cloud Run fornece 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 vai alocar essa quantidade de disco ao seu 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 seu volume para que qualquer usuário possa ler ou gravar nele. Como o armazenamento é efêmero, todos os dados são excluídos permanentemente quando a instância é desligada. Isso inclui desligamentos causados por:

  • Falhas de instâncias
  • Conclusão da tarefa do job (sucesso ou falha)

Os discos são dedicados a uma instância específica e não são compartilhados com outras instâncias. 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 do encerramento real. Nesse ponto, o Cloud Run envia um sinal SIGKILL. Use essa janela de 10 segundos para realizar operações de limpeza, como uma rodada final de cópia do conteúdo do disco para o armazenamento persistente.

Casos de uso

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

  • 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 orquestra a divisão dele em partes menores. Com o armazenamento efêmero, você não precisa pagar por grandes quantidades de memória para fazer uma cópia local temporária dos seus dados. Você também poderá processar conjuntos de dados maiores.
  • Armazenamento em cache: em casos de uso de serviço da Web, o armazenamento em cache de dados no disco em vez da busca no armazenamento remoto pode otimizar a latência do aplicativo.

Limites de armazenamento e de instâncias

Os seguintes limites são aplicáveis:

  • Limite de tamanho do volume: cada volume precisa ter entre 1Gi e 100Gi.
  • Limite de armazenamento da instância: por padrão, cada instância é limitada a 10 GiB de espaço total. Para configurar mais de 10 GiB por instância, é necessário solicitar um aumento de cota.
  • Limite de volume da instância: cada instância é limitada a um máximo de 10 volumes de disco temporário.
  • Limite de projeto: por padrão, cada projeto começa com um limite total de alocação regional de 0 GiB. Os projetos recebem automaticamente 100 GiB por região na primeira vez que um recurso com um disco temporário é implantado nessa região. Em tempo de execução, essa cota regional é compartilhada entre todas as instâncias ativas na região. Ao implantar um recurso, o tamanho combinado do disco temporário por instância multiplicado pelo número máximo de instâncias não pode exceder o limite de alocação regional. Por exemplo, com um limite regional de 100 GiB, um recurso com um disco de 10 GiB pode ser configurado com até 10 instâncias. Se necessário, solicite um aumento de cota.

Solicitar aumento de cota

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

Cota atual Link de cota
10 GiB por instância Solicitar uma cota maior por instância
100 GiB 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

Considere as seguintes limitações:

  • O disco temporário só está disponível no ambiente de execução de segunda geração. Por padrão, os jobs do Cloud Run usam o ambiente de execução de segunda geração.
  • A migração em tempo real não é compatível. Isso significa que os jobs do Cloud Run serão menos confiáveis, principalmente os de longa duraçã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 todos os locais do Cloud Run.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. 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

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

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

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

  6. Instale e inicialize a CLI gcloud.
  7. Atualize os componentes:
    gcloud components update
  8. 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 ciclo de vida da instância que o usa contribuem para o custo.

Funções exigidas

Para receber as permissões necessárias para configurar um disco efêmero, peça ao administrador que conceda a você os seguintes papéis do IAM:

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 job do Cloud Run interagir com APIs doGoogle 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.

Criar e montar um disco temporário

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

Console

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

    Acessar o Cloud Run

  2. Selecione Jobs no menu de navegação do Cloud Run:

    1. Se você estiver criando um job, clique em Implantar contêiner para preencher a página inicial de configurações do job.

    2. Se você estiver configurando um job, selecione-o e clique em Ler e editar a configuração do job.

  3. Clique em Contêineres, conexões, segurança para expandir a página de propriedades do job.

  4. Clique na guia Contêineres.

  5. Em Recursos, selecione Disco efêmero.

  6. Especifique o tamanho do disco temporário no menu.

  7. Insira o caminho de ativação.

  8. Clique em Criar ou Atualizar.

gcloud

Para adicionar um volume e montá-lo:

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

Substitua:

  • JOB: o nome do job.
  • VOLUME_NAME: o nome que você quer dar ao volume.
  • SIZE: o tamanho do disco, por exemplo, 10Gi. O tamanho precisa estar entre 1Gi e 100Gi para volumes de 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 serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run jobs describe JOB --format export > job.yaml
  2. Configure o arquivo YAML:

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

    Substitua:

    • JOB: o nome do job.
    • REGION: a Google Cloud região.
    • IMAGE_URL: uma referência à imagem do contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • VOLUME_NAME: o nome que você quer dar ao volume.
    • SIZE: o tamanho do disco, por exemplo, 10Gi. O tamanho precisa estar entre 1Gi e 100Gi para volumes de ephemeral-disk.
    • MOUNT_PATH: o caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run jobs replace job.yaml

    Por padrão, o comando gcloud run jobs replace usa o arquivo job.yaml, se ele estiver presente.

Terraform

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

Adicione o seguinte a um recurso google_cloud_run_v2_job na configuração do Terraform:
  resource "google_cloud_run_v2_job" "default" {
    name     = "JOB"
    location = "REGION"
    deletion_protection = "true"
    launch_stage = "BETA"
    template {
      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:

  • JOB: o nome do job.
  • REGION: a Google Cloud região.
  • IMAGE_URL: uma referência à imagem do contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job: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, 10Gi. O tamanho precisa estar entre 1Gi e 100Gi para volumes de 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 "Sistema de arquivos" para criar um novo arquivo ou adicionar ao final de um arquivo 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 registro 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 as ativações ou remover volumes e ativações individuais.

Limpar todos os volumes e as ativações de volumes

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

gcloud run jobs update JOB \
    --clear-volumes \
    --clear-volume-mounts
Se você tiver vários contêineres, siga as convenções da CLI sidecars para limpar volumes e montagens de volume:

gcloud run jobs update JOB \
    --clear-volumes \
    --clear-volume-mounts \
    --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 é preciso remover todas as montagens de volume que o usam.

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

gcloud run jobs update JOB \
    --remove-volume VOLUME_NAME
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH

Práticas recomendadas

Siga estas práticas recomendadas para gerenciar dados temporários de maneira eficaz e otimizar o desempenho do armazenamento.

Copiar para o armazenamento permanente

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

O Cloud Run pode ler e gravar no Cloud Storage sem nenhuma configuração de rede adicional. Para ter um desempenho ideal, recomendamos direcionar 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 da VPC direta com um job, siga estas etapas:

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

    Acessar o Cloud Run

  2. Se você estiver configurando um novo job, clique na guia Jobs e selecione Implantar contêiner. Preencha a página inicial de configurações de job conforme necessário. Se você estiver configurando um job, clique nele e em Ver e editar a configuração do job.

  3. Clique em Contêineres, conexões, segurança para expandir a página de propriedades do job.

  4. Clique na guia Conexões.

  5. Clique em Conectar a uma VPC para tráfego de saída.

  6. Clique em Enviar tráfego diretamente para uma VPC.

  7. No campo Rede, selecione a rede VPC que receberá o tráfego enviado.

  8. No campo Sub-rede, selecione a sub-rede que enviará os endereços IP ao seu job. É possível executar vários jobs na mesma sub-rede.

  9. Em Roteamento de tráfego, selecione Rotear todo o tráfego para a VPC para enviar todo o tráfego de saída pela rede VPC.

  10. Clique em Criar ou Atualizar.

  11. Para verificar se o job está na sua rede VPC, clique nele e depois na guia Configuração. A rede e a sub-rede estão listadas no card da VPC.

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

Resolver problemas

Se você notar velocidades de rede lentas ao baixar 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, as velocidades de transferência de rede serão mais lentas.