Esta página descreve como configurar um volume dedicado na memória que pode usar para leituras e escritas de ficheiros através de montagens de volumes do Cloud Run. Tenha em atenção que esta funcionalidade difere do sistema de ficheiros na memória integrado fornecido pelo Cloud Run.
Quando monta o volume na memória no Cloud Run, o volume na memória é apresentado como ficheiros no sistema de ficheiros do contentor. Depois de montar o volume na memória, acede ao mesmo como se fosse um diretório no sistema de ficheiros local, usando as operações e as bibliotecas do sistema de ficheiros da sua linguagem de programação.
Pode usar volumes na memória para fazer o seguinte:
- Limitar o tamanho do volume na memória. Quando limita o tamanho de um volume, as escritas num volume cheio falham, o que é preferível a ter instâncias do Cloud Run terminadas porque o volume está a consumir demasiada memória.
- Partilhe um volume na memória entre diferentes contentores numa instância do Cloud Run. Quando o Cloud Run é dimensionado horizontalmente para várias instâncias de uma tarefa de trabalho, cada tarefa tem o seu próprio volume na memória partilhado por todos os contentores nessa tarefa. Este volume está disponível para todos os contentores quando o Cloud Run é dimensionado para processar o tráfego.
Comportamento
Ao criar um volume na memória, recomendamos que especifique um limite de tamanho. Se o volume atingir o limite de tamanho, as gravações adicionais falham com um erro de falta de memória. A sua instância pode processar este erro e continuar a ser executada.
Tenha em atenção que o limite de tamanho é apenas um limite: não atribui espaço adicional ao seu volume na memória. Em vez disso, o volume na memória consome a memória que configurou para os seus contentores. Se implementar vários contentores, a memória usada por cada gravação no volume conta como utilização de memória para o contentor que escreveu os dados.
Se não especificar um limite de tamanho, este é definido automaticamente para metade do tamanho total de todos os contentores no seu trabalho ou serviço. Por exemplo,
emptyDir
tamanho do volume = [Memória (recipiente A) + Memória (recipiente B) + Memória (recipiente N)]/2.
Este comportamento predefinido pode resultar num limite de tamanho do volume na memória superior à memória alocada para alguns dos seus contentores. Isto pode levar a falhas inesperadas se um único contentor exceder a respetiva memória alocada ao tentar escrever 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 que defina um para proteger os seus contentores de ficarem sem memória e falharem.
Caminhos não permitidos
O Cloud Run não permite montar um volume em /dev
,
/proc
e /sys
, nem nos respetivos subdiretórios.
Funções necessárias
Para receber as autorizações de que precisa para configurar tarefas do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
-
Programador do Cloud Run (
roles/run.developer
) na tarefa do Cloud Run -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na identidade do serviço
Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se a sua tarefa do Cloud Run interagir com Google Cloud APIs, como as bibliotecas de cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.
Configure um volume na memória
Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.
Depois de configurar um volume na memória para o seu serviço do Cloud Run, é criado um volume vazio para cada instância do Cloud Run iniciada e o volume existe enquanto essa instância estiver em execução. Quando a instância deixa de ser executada, os dados no volume são eliminados permanentemente.
Consola
Na Google Cloud consola, aceda à página Tarefas do Cloud Run:
Selecione Tarefas no menu e clique em Implementar contentor para preencher a página de definições iniciais da tarefa. Se estiver a configurar uma tarefa existente, selecione a tarefa e, de seguida, clique em Editar.
Clique em Recipientes, volumes, ligações, segurança para expandir a página de propriedades da tarefa.
Clique no separador Volumes.
- Em Volumes:
- Clique em Adicionar volume.
- No menu pendente Tipo de volume, selecione Na memória como tipo de volume.
- No campo Nome do volume, introduza o nome que quer usar para o volume.
- No campo Limite de tamanho, especifique o limite de memória que quer atribuir ao volume. Este limite tem de ser inferior à memória total especificada para os seus contentores. Os dados armazenados neste volume consomem memória reservada pelo contentor que escreveu os dados.
- Clique em Concluído.
- Clique no separador Contentor e, de seguida, expanda o contentor no qual está a montar o volume para editar o contentor.
- Clique no separador Montagens de volumes.
- Clique em Montar volume.
- Selecione o volume na memória no menu.
- Especifique o caminho onde quer montar o volume.
- Clique em Montar volume
- Em Volumes:
Clique em Criar ou Atualizar.
gcloud
Para adicionar um volume e montá-lo:
gcloud run jobs update JOB \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
Substitua o seguinte:
JOB
: o nome da sua profissão.- VOLUME_NAME: qualquer nome que pretender para o seu volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem do volume.
MOUNT_PATH
: o caminho relativo no sistema de ficheiros do contentor onde quer montar este volume, por exemplo,/mnt/my-volume
.- SIZE_LIMIT: o limite de memória que quer atribuir ao volume, em
MiB ou GiB (especificado como Mi ou Gi), por exemplo,
500Mi
. Este limite tem de ser inferior à memória total especificada para os seus contentores.
Se estiver a usar vários contentores, especifique primeiro os volumes e, em seguida, especifique as montagens de volumes para cada contentor:
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 estiver a criar uma nova tarefa, ignore este passo. Se estiver a atualizar uma tarefa existente, transfira a respetiva configuração YAML:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Configure os atributos
volumeMounts
evolumes
, conforme mostrado: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 o seguinte:
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - VOLUME_NAME: qualquer nome que pretender para o seu volume. O valor VOLUME_NAME é usado para mapear o volume para o volume mount.
MOUNT_PATH
: o caminho relativo no sistema de ficheiros do contentor onde quer montar este volume, por exemplo,/mnt/my-volume
.- SIZE_LIMIT: o limite de memória que quer atribuir ao volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo,
500Mi
. Este limite tem de ser inferior à memória total especificada para os seus contentores.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
Crie ou atualize a tarefa através do seguinte comando:
gcloud run jobs replace job.yaml
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_job
na sua 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 o seguinte:
- JOB_NAME: o nome da sua tarefa do Cloud Run.
- REGION com a região Google Cloud . Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - VOLUME_NAME: qualquer nome que pretender para o seu volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem do volume.
- MOUNT_PATH: o caminho relativo no sistema de ficheiros do contentor onde quer montar este volume, por exemplo,
/mnt
. - SIZE_LIMIT: o limite de memória que quer atribuir ao volume, em MiB ou GiB (especificado como Mi ou Gi), por exemplo,
128Mi
. Este limite tem de ser inferior à memória total especificada para os seus contentores.
Ler e escrever num volume
Se usar a funcionalidade de montagem de volumes do Cloud Run, acede a um volume montado através das mesmas bibliotecas no seu idioma de programação que usa para ler e escrever ficheiros no seu sistema de ficheiros local.
Isto é especialmente útil se estiver a usar um contentor existente que espera que os dados sejam armazenados no sistema de ficheiros local e usa operações regulares do sistema de ficheiros para aceder aos mesmos.
Os seguintes fragmentos pressupõem uma montagem de volume com um mountPath
definido como /mnt/my-volume
.
Nodejs
Use o módulo do sistema de ficheiros para criar um novo ficheiro ou anexar a um ficheiro existente no volume, /mnt/my-volume
:
var fs = require('fs'); fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });
Python
Escrever num ficheiro mantido no volume /mnt/my-volume
:
f = open("/mnt/my-volume/sample-logfile.txt", "a")
Ir
Use o pacote os
para criar um novo ficheiro 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 ficheiro de registo no volume /mnt/my-volume
:
import java.io.File; File f = new File("/mnt/my-volume/sample-logfile.txt");
Limpe e remova volumes e montagens de volumes
Pode limpar todos os volumes e montagens ou remover volumes individuais e montagens de volumes.
Limpe todos os volumes e montagens de volumes
Para limpar todos os volumes e montagens de volumes da sua tarefa de contentor único, execute o seguinte comando:
gcloud run jobs update JOB \ --clear-volumes --clear-volume-mounts
Se tiver vários contentores, siga as convenções da CLI de sidecars para limpar volumes e montagens de volumes:
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts \ --container=container1 \ --clear-volumes \ -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Remova volumes individuais e montagens de volumes
Para remover um volume, também tem de remover todas as montagens de volumes que usam esse volume.
Para remover volumes individuais ou montagens de volumes, use os 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