Configurare i mount 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.

Il montaggio del bucket come volume in Cloud Run presenta i contenuti del bucket 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 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 dei volumi Cloud Storage utilizzano la memoria del contenitore 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 un TTL (Time-to-live) di 60 secondi. La dimensione massima predefinita della cache delle statistiche è 32 MB, mentre quella della cache dei tipi è 4 MB.

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

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

Limitazioni

Poiché Cloud Run utilizza Cloud Storage FUSE per ci sono alcuni aspetti da tenere presenti quando si monta un Bucket Cloud Storage come volume:

  • Cloud Storage FUSE non fornisce il controllo della concorrenza per più scritture (blocco file) nello stesso file. Quando più scritture tentano di sostituire un file, l'ultima scrittura ha la precedenza e tutte le scritture precedenti vengono perse.
  • Cloud Storage FUSE non è un file system completamente conforme a POSIX. Per maggiori informazioni consulta la documentazione di Cloud Storage FUSE.

Percorsi non consentiti

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

Prima di iniziare

È necessario un bucket Cloud Storage da montare come volume.

Per prestazioni di lettura/scrittura ottimali in Cloud Storage, consulta Ottimizzare le prestazioni della larghezza di banda di rete di Cloud Storage FUSE.

Ruoli obbligatori

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

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

Per maggiori 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 tuo job Cloud Run si interfaccia con le API Google Cloud, come le librerie client 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.

Monta un volume Cloud Storage

Puoi montare più bucket in percorsi di montaggio diversi. Tu è anche possibile montare un volume in più di un container utilizzando lo stesso di montaggio dei percorsi nei container.

Se utilizzi più contenitori, specifica prima i volumi, poi i mount dei volumi per ogni contenitore.

Console

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

    Vai a Cloud Run

  2. Fai clic su Esegui il deployment del contenitore e seleziona Job per compilare la pagina delle impostazioni iniziali del job. Se stai configurando un job esistente, selezionalo e fai clic su Modifica.

  3. Fai clic su Contenitore, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.

  4. Fai clic sulla scheda Volumi.

    immagine

    • In Volumi:
      • Fai clic su Aggiungi volume.
      • Nel menu a discesa Tipo di volume, seleziona il bucket Cloud Storage come tipo di volume.
      • Nel campo Nome volume, inserisci il nome che vuoi utilizzare per il volume.
      • Sfoglia e seleziona il bucket che vuoi utilizzare per il volume.
      • (Facoltativo) Seleziona la casella di controllo Sola lettura per impostare il bucket come di sola lettura.
      • Fai clic su Fine.
    • Fai clic sulla scheda Contenitore, quindi espandi il contenitore che stai montando il volume per modificare il container.
    • Fai clic sulla scheda Montaggi volume.
    • Fai clic su Installa volume.
      • Seleziona il volume di Cloud Storage dal menu.
      • Specifica il percorso in cui vuoi montare il volume.
      • Fai clic su Monta volume
  5. Fai clic su Crea o Aggiorna.

gcloud

  • Per aggiungere un volume e montarlo:

    gcloud 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 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ù contenitori, specifica prima i volumi, quindi specifica i mount dei volumi per ogni contenitore:

    gcloud 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 il MOUNT_PATH, VOLUME_NAME e BUCKET_NAME e IS_READ_ONLY in base alle esigenze.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      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 del container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. 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 montaggio del volume.
    • 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. Crea o aggiorna il job utilizzando il comando seguente:

    gcloud run jobs replace job.yaml

Lettura e scrittura in un volume

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

Ciò è particolarmente utile se utilizzi un container esistente che prevede dati da archiviare sul file system locale e utilizza il normale file system operazioni 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 aggiungerne uno 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 conservato nel volume /mnt/my-volume:

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

Vai

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 job che ti interessa per aprire la pagina Dettagli job.

  3. Fai clic sulla scheda Volumi.

  4. Individua l'impostazione dei mount 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 nel modulo restituito configurazione.

Ottimizzazione delle prestazioni della larghezza di banda della rete di Cloud Storage FUSE

Per migliorare le prestazioni di lettura e scrittura, connetti Cloud Run su una rete VPC utilizzando il VPC diretto e instradando tutto il traffico in uscita attraverso la tua rete VPC. Puoi farlo utilizzando una delle seguenti opzioni:

Tempo di avvio del container e montaggi di Cloud Storage FUSE

L'utilizzo di Cloud Storage FUSE può aumentare leggermente il numero di container Cloud Run avvio a freddo perché il montaggio del volume viene avviato prima dell'avvio container. Il container verrà avviato solo se Cloud Storage FUSE è montato correttamente.

Tieni presente che Cloud Storage FUSE monta correttamente un volume solo dopo aver stabilito un a Cloud Storage. Eventuali ritardi di rete possono avere un impatto in fase di avvio del container. Di conseguenza, se il tentativo di connessione non va a buon fine, Cloud Storage FUSE non verrà montato e il job Cloud Run non verrà avviato. Inoltre, se il montaggio di Cloud Storage FUSE richiede più di 30 secondi, Il job Cloud Run non verrà avviato perché Cloud Run ha un un timeout totale di 30 secondi per eseguire tutti i montaggi.

Caratteristiche di prestazioni di Cloud Storage FUSE

Se definisci due volumi, ognuno dei quali punta a un bucket diverso, Verranno avviati i processi di Cloud Storage FUSE. I mount e i processi si verificano in parallelo.

Le operazioni che utilizzano Cloud Storage FUSE sono interessate dalla larghezza di banda della rete poiché Cloud Storage FUSE comunica con Cloud Storage utilizzando l'API Cloud Storage. Alcune operazioni, come l'elenco dei contenuti di un bucket, possono essere lente se la larghezza di banda della rete è ridotta. Analogamente, la lettura di un file di grandi dimensioni può richiedere del tempo, poiché anche questa operazione è limitata dalla larghezza di banda della rete.

Quando scrivi in un bucket, Cloud Storage FUSE memorizza completamente l'oggetto in memoria. Ciò significa che la scrittura di file di grandi dimensioni è limitata dalla quantità di memoria disponibile per l'istanza del contenitore (il limite massimo di memoria del contenitore è 32 GiB).

La scrittura viene svuotata nel bucket solo quando esegui un close o un fsync: l'oggetto completo viene quindi caricato/ricaricato nel bucket. La l'unica eccezione a un oggetto che viene ricaricato completamente nel bucket è di un file con contenuti aggiunti quando ha dimensioni pari o superiori a 2 MiB.

Per maggiori informazioni, consulta le seguenti risorse: