Nesta página, descrevemos como configurar um volume dedicado na memória que pode ser usado para leituras e gravações de arquivos com montagens de volumes do Cloud Run. Esse recurso é diferente do sistema de arquivos na memória integrado fornecido pelo Cloud Run.
Quando você monta o volume na memória no Cloud Run, ele aparece como arquivos no sistema de arquivos do contêiner. Depois de montar o volume na memória, você o acessa como se fosse um diretório no sistema de arquivos local usando as operações e bibliotecas do sistema de arquivos da sua linguagem de programação.
É possível usar volumes na memória para fazer o seguinte:
- Limitar o tamanho do volume na memória. Quando você limita o tamanho de um volume, as gravações em um volume total falham. No entanto, isso é melhor do que o cenário em que o Cloud Run encerra as instâncias devido ao alto consumo de memória pelo volume.
Comportamento
Ao criar um volume na memória, recomendamos especificar um limite de tamanho. Se o volume atingir esse limite, outras gravações vão falhar com um erro de falta de memória. A instância pode lidar com esse erro e continuar em execução.
O limite de tamanho é apenas um limite: ele não aloca espaço extra para o volume na memória. Em vez disso, o volume na memória consome a memória configurada para os contêineres. Se você implantar vários contêineres, a memória usada por cada gravação no volume contará como uso da memória do contêiner que gravou os dados.
Se você não especificar um limite de tamanho, ele será definido automaticamente como metade do
tamanho total de todos os contêineres na tarefa do job. Por exemplo,
o tamanho do volume emptyDir = [Memória (Contêiner A) + Memória (Contêiner B) + Memória (Contêiner N)]/2.
Esse comportamento padrão pode fazer com que o limite de tamanho do volume na memória seja maior do que a memória alocada para alguns dos contêineres. Isso pode causar falhas inesperadas se um único contêiner exceder a própria memória alocada ao tentar gravar mais dados no volume, mesmo que o limite de tamanho do volume não tenha sido atingido.
Embora a definição de um limite de tamanho seja opcional, recomendamos realizá-la para proteger os contêineres contra a falta de memória e contra falhas.
Caminhos não permitidos
O Cloud Run não permite montar um volume em /dev,
/proc e /sys ou nos subdiretórios deles.
Funções exigidas
Para receber as permissões necessárias para configurar jobs 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 job do Cloud Run - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na identidade do serviço
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 doCloud de Confiance , 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.
Configurar um volume na memória
Depois de configurar um volume na memória para o job do Cloud Run, um volume vazio é criado para cada instância do Cloud Run iniciada e continua existindo enquanto a instância estiver em execução. Quando a execução da instância é interrompida, os dados no volume são excluídos permanentemente.
Console
No console Cloud de Confiance by S3NS , acesse a página do Cloud Run:
Selecione Jobs no menu de navegação do Cloud Run:
Se você estiver criando um job, clique em Implantar contêiner para preencher a página inicial de configurações do job.
Se você estiver configurando um job, selecione-o e clique em Ler e editar a configuração do job.
Clique em Contêineres, conexões, segurança para expandir a página de propriedades do job.
Clique na guia Volumes.
Clique em Montar volume.
Clique em Na memória como o tipo de volume.
Configure o volume fazendo o seguinte:
- No campo Caminho de ativação, insira o caminho em que você quer ativar o volume.
- No campo Nome do volume, insira o nome do volume.
- Opcional: insira o Limite de tamanho e a Unidade de memória para especificar o limite de memória que você quer atribuir ao volume. Esse limite precisa ser menor que a memória total especificada para os contêineres. Os dados armazenados nesse volume consomem a memória reservada pelo contêiner que gravou os dados.
- Clique em Salvar.
Clique em Criar ou Atualizar.
gcloud
Para montar um volume third_party/devsite/cloud/en/run/docs/images/nfs-volume-mount.png:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT
Substitua:
- JOB: o nome do job.
- MOUNT_PATH: o caminho relativo no sistema de arquivos
do contêiner em que você quer montar esse volume, por exemplo,
/mnt/my-volume. - SIZE_LIMIT: o limite de memória que você quer atribuir ao volume, em
MiB ou GiB (especificado como Mi ou Gi), por exemplo,
500Mi. Esse limite precisa ser menor que a memória total especificada para os contêineres.
Ao usar vários contêineres, primeiro especifique os volumes e, depois, as montagens de volume de cada contêiner:
gcloud run jobs update JOB \ --add-volume=name= VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --container=CONTAINER_1 \ --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH \ --container==CONTAINER_2 \ --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH2
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 jobs describe JOB_NAME --format export > job.yaml
Configure os atributos
volumeMountsevolumesconforme mostrado abaixo:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME emptyDir: sizeLimit: SIZE_LIMIT medium: Memory
Substitua:
IMAGE_URL: uma referência à imagem do contêiner. Por exemplo,us-docker.pkg.dev/cloudrun/container/job:latest.- VOLUME_NAME: qualquer nome que você queira dar ao volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
MOUNT_PATH: o caminho relativo no sistema de arquivos do contêiner em que você quer montar esse volume. Por exemplo,/mnt/my-volume.- SIZE_LIMIT: o limite de memória que você quer atribuir ao
volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo,
500Mi. Esse limite precisa ser menor que a memória total especificada para os contêineres.
Crie ou atualize o serviço usando o seguinte comando:
gcloud run jobs replace job.yaml
Por padrão, o comando
gcloud run jobs replaceusa o arquivojob.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 recursogoogle_cloud_run_v2_job
na configuração do Terraform:resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
}
}
}
Substitua:
- JOB_NAME: o nome do seu job do Cloud Run;
- REGION com a região Cloud de Confiance . Por exemplo,
europe-west1. IMAGE_URL: uma referência à imagem do contêiner. Por exemplo,us-docker.pkg.dev/cloudrun/container/job:latest.- VOLUME_NAME: qualquer nome que você queira dar ao volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
- MOUNT_PATH: o caminho relativo no sistema de arquivos
do contêiner em que você quer montar esse volume, por exemplo,
/mnt. - SIZE_LIMIT: o limite de memória que você quer atribuir ao
volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo,
128Mi. Esse limite precisa ser menor que a memória total especificada para os contêineres.
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
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