Configurar montagens de volumes do Cloud Storage para jobs

Nesta página, você aprende a montar um bucket do Cloud Storage como um volume de armazenamento usando as montagens de volumes do Cloud Run.

Montar o bucket como um volume no Cloud Run apresenta o bucket conteúdo como arquivos no sistema de arquivos do contêiner. Depois de ativar o bucket, como um volume, você acessa o bucket como se fosse um diretório no arquivo local do sistema de arquivos, usando as operações e bibliotecas do sistema de arquivos da sua linguagem de programação em vez das bibliotecas de cliente das APIs do Google.

.

Requisitos de memória

As montagens de volume do Cloud Storage usam a memória do contêiner do Cloud Run para as seguintes atividades:

  • Para todo o armazenamento em cache do Cloud Storage FUSE, por padrão, o Cloud Run usa a configuração de cache de estatísticas com um Time to live (TTL) de 60 segundos. O tamanho máximo padrão do cache de estatísticas é 32 MB, e o tamanho máximo padrão do cache de tipo é 4 MB.

  • Durante a leitura, o Cloud Storage FUSE também consome memórias diferentes de caches de estatística e tipo, por exemplo, uma matriz de 1 MiB para cada arquivo que está sendo lido e para goroutines.

  • Ao gravar no Cloud Storage, o arquivo inteiro é preparado na memória do Cloud Run antes de ser gravado no Cloud Storage.

Limitações

O Cloud Run usa o Cloud Storage FUSE para essa montagem de volume. Devido a isso, há alguns pontos a serem considerados ao montar um bucket do Cloud Storage como um volume:

  • O Cloud Storage FUSE não oferece controle de simultaneidade para várias gravações (bloqueio de arquivo) no mesmo arquivo. Quando várias gravações tentam substituir um arquivo, a última é bem-sucedida e todas as anteriores são perdidas.
  • O Cloud Storage FUSE não é um sistema de arquivos totalmente compatível com POSIX. Para mais detalhes, consulte a documentação do Cloud Storage FUSE.

Antes de começar

Você precisa de um bucket do Cloud Storage para montar como o volume.

Funções exigidas

Para receber as permissões necessárias para configurar as montagens de volume do Cloud Storage, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para receber as permissões de que a identidade de serviço precisa para acessar o arquivo e o bucket do Cloud Storage, peça ao administrador para conceder à identidade de serviço o seguinte papel do IAM:

Para mais detalhes sobre papéis e permissões do Cloud Storage, consulte IAM para o Cloud Storage.

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 do Google Cloud, 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.

Caminhos não permitidos

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

Montar um volume do Cloud Storage

É possível montar vários buckets em diferentes caminhos de montagem. Também é possível montar um volume em mais de um contêiner usando caminhos de montagem iguais ou diferentes nos contêineres.

Ao usar vários contêineres, primeiro especifique os volumes e, depois, as montagens de volume de cada contêiner.

gcloud

  • Para adicionar um volume e montá-lo:

    gcloud beta run jobs update JOB \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Substitua:

    • JOB pelo nome do job.
    • MOUNT_PATH pelo caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
    • VOLUME_NAME pelo nome que você quiser para o volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
    • BUCKET_NAME pelo nome do bucket do Cloud Storage.
  • Para montar o volume como somente leitura:

    --add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • Se você estiver usando vários contêineres, primeiro especifique os volumes e, em seguida, as ativações de volume para cada contêiner:

    gcloud beta run jobs update JOB \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --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

  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_NAME --format export > job.yaml
  2. Atualize MOUNT_PATH, VOLUME_NAME, BUCKET_NAME e IS_READ_ONLY conforme necessário.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      metadata:
        annotations:
          run.googleapis.com/launch-stage: BETA
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          template:
            spec:
              containers:
              - image: IMAGE_URL
                volumeMounts:
                - mountPath: MOUNT_PATH
                  name: VOLUME_NAME
              volumes:
              - name: VOLUME_NAME
                csi:
                  driver: gcsfuse.run.googleapis.com
                  readOnly: IS_READ_ONLY
                  volumeAttributes:
                    bucketName: BUCKET_NAME

    Substituir

    • 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
    • MOUNT_PATH pelo caminho relativo em que você está montando o volume, por exemplo, /mnt/my-volume.
    • VOLUME_NAME pelo nome que você quiser para o volume. O valor VOLUME_NAME é usado para mapear o volume para a montagem associada.
    • IS_READ_ONLY com True para tornar o volume somente leitura ou False para permitir gravações.
    • BUCKET_NAME pelo nome do bucket do Cloud Storage.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud beta run jobs replace job.yaml

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.

Node.js

Use o módulo "Sistema de arquivos" para criar um novo arquivo ou anexar a 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 mantido 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");

Acessar configurações de montagem de volume

Console

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

    Acessar jobs do Cloud Run

  2. Clique no job em que você tem interesse para abrir a página Detalhes do job.

  3. Clique na guia Volumes.

  4. Localize a configuração de montagens de volume na página de detalhes dos volumes.

gcloud

  1. Use o comando a seguir:

    gcloud run jobs describe JOB_NAME
  2. Localize a configuração de montagens de volume na configuração retornada.