Configura i montaggi dei volumi Cloud Storage per i job

Questa pagina mostra come montare un bucket Cloud Storage come volume di archiviazione, utilizzando i montaggi dei volumi Cloud Run.

Quando si monta il bucket come volume in Cloud Run, i contenuti del bucket vengono presentati come file nel file system del container. Dopo aver montato il bucket come volume, accedi al bucket come se fosse una directory sul tuo file system locale, utilizzando le operazioni e le librerie del file system del tuo linguaggio di programmazione anziché utilizzare le librerie client delle API di Google.

Requisiti di memoria

I montaggi di volume di Cloud Storage utilizzano la memoria del container di Cloud Run per le seguenti attività:

  • Per tutta la memorizzazione nella cache di Cloud Storage FUSE, Cloud Run utilizza per impostazione predefinita l'impostazione della cache delle statistiche con una durata (TTL) di 60 secondi. La dimensione massima predefinita della cache delle statistiche è 32 MB, mentre la dimensione massima predefinita del tipo di cache è 4 MB.

  • Durante la lettura, Cloud Storage FUSE consuma anche memoria diversa dalle cache stat e di tipo, ad esempio un array da 1 MiB per ogni file letto e per la goroutina.

  • Durante la scrittura in Cloud Storage, l'intero file viene memorizzato in Cloud Run prima che venga scritto in Cloud Storage.

Limitazioni

Cloud Run utilizza Cloud Storage FUSE per il montaggio del volume. Ci sono quindi alcuni aspetti da tenere presenti quando si monta un bucket Cloud Storage come volume:

  • Cloud Storage FUSE non fornisce il controllo della contemporaneità per più scritture (blocco dei file) sullo stesso file. Quando più scritture tentano di sostituire un file, l'ultima scrittura vince e tutte le scritture precedenti vanno perse.
  • Cloud Storage FUSE non è un file system completamente compatibile con POSIX. Per ulteriori dettagli, consulta la documentazione di Cloud Storage FUSE.

Prima di iniziare

È necessario un bucket Cloud Storage da montare come volume.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare i montaggi dei volumi Cloud Storage, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per ottenere le autorizzazioni necessarie all'identità del servizio per accedere al file e al bucket Cloud Storage, chiedi all'amministratore di concedere all'identità del servizio il seguente ruolo IAM:

Per ulteriori dettagli su ruoli e autorizzazioni di Cloud Storage, consulta IAM per Cloud Storage.

Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il job Cloud Run si interfaccia con le API Google Cloud, ad esempio le librerie client di Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestire l'accesso.

Percorsi non consentiti

Cloud Run non consente di montare un volume su /dev, /proc e /sys o nelle relative sottodirectory.

Monta un volume Cloud Storage

Puoi montare più bucket in diversi percorsi di montaggio. Puoi anche montare un volume in più di un container utilizzando lo stesso percorso di montaggio o diversi tra i container.

Se utilizzi più container, specifica prima i volumi, quindi specifica i montaggi dei volumi per ogni container.

gcloud

  • Per aggiungere un volume e montarlo:

    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

    Sostituisci:

    • JOB con il nome del tuo job.
    • MOUNT_PATH con il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-volume.
    • VOLUME_NAME con il nome che preferisci per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al relativo montaggio.
    • BUCKET_NAME con il nome del tuo bucket Cloud Storage.
  • Per montare il volume come volume di sola lettura:

    --add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • Se utilizzi più container, specifica prima i volumi, quindi specifica quelli di montaggio per ogni container:

    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 stai creando un nuovo job, salta questo passaggio. Se stai aggiornando un job esistente, scarica la relativa configurazione YAML:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Aggiorna MOUNT_PATH, VOLUME_NAME, BUCKET_NAME e IS_READ_ONLY in base alle esigenze.

    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

    Sostituisci

    • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creato. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • MOUNT_PATH con il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-volume.
    • VOLUME_NAME con il nome che preferisci per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al relativo montaggio.
    • IS_READ_ONLY con True per rendere il volume di sola lettura o False per consentire le scritture.
    • BUCKET_NAME con il nome del bucket Cloud Storage.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud beta run jobs replace job.yaml

Lettura e scrittura a volume

Se utilizzi la funzionalità di montaggio del volume di Cloud Run, puoi accedere a un volume montato utilizzando le stesse librerie nel tuo linguaggio di programmazione che utilizzi per leggere e scrivere file sul tuo file system locale.

Ciò è particolarmente utile se utilizzi un container esistente che prevede l'archiviazione dei dati nel file system locale e che utilizza le normali operazioni del file system per accedervi.

I seguenti snippet presuppongono un montaggio del volume con un valore mountPath impostato su /mnt/my-volume.

Node.js

Utilizza il modulo File system per creare un nuovo file o aggiungerlo a un elemento esistente nel volume /mnt/my-volume:

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

Python

Scrivi in un file contenuto nel volume, /mnt/my-volume:

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

Go

Utilizza il pacchetto os per creare un nuovo file contenuto nel volume, /mnt/my-volume

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

Java

Utilizza la classe Java.io.File per creare un file di log nel volume /mnt/my-volume:

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

Visualizza le impostazioni dei montaggi dei volumi

Console

  1. Nella console Google Cloud, vai alla pagina dei job Cloud Run:

    Vai ai job Cloud Run

  2. Fai clic sul lavoro che ti interessa per aprire la pagina Dettagli offerta di lavoro.

  3. Fai clic sulla scheda Volumi.

  4. Individua l'impostazione dei montaggi dei volumi nella pagina dei dettagli dei volumi.

gcloud

  1. Utilizza questo comando:

    gcloud run jobs describe JOB_NAME
  2. Individua l'impostazione dei montaggi dei volumi nella configurazione restituita.