Questa pagina mostra come montare un bucket Cloud Storage come volume di archiviazione utilizzando i mount 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.
Quando scrivi in Cloud Storage, l'intero file viene eseguito in anteprima nella memoria di Cloud Run prima di essere 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 compatibile con POSIX. Per maggiori dettagli, consulta la documentazione di Cloud Storage FUSE.
Percorsi non consentiti
Cloud Run non ti consente di montare un volume in /dev
,
/proc
e /sys
o nelle relative sottodirectory.
Prima di iniziare
Devi avere un bucket Cloud Storage da montare come volume.
Per prestazioni di lettura/scrittura ottimali su Cloud Storage, consulta Ottimizzazione delle prestazioni della larghezza di banda di rete di Cloud Storage FUSE.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare i montaggi dei volumi Cloud Storage, chiedi all'amministratore di concederti seguenti ruoli IAM:
-
Sviluppatore Cloud Run (
roles/run.developer
) sul servizio Cloud Run -
Utente account di servizio (
roles/iam.serviceAccountUser
) nell'identità del servizio
Per ottenere le autorizzazioni di cui la tua identità di servizio necessita per accedere al file e al bucket Cloud Storage, chiedi all'amministratore di concedere all'identità di servizio il seguente ruolo IAM:
- Storage Admin (
roles/storage.admin
)
Per ulteriori dettagli sui ruoli e sulle autorizzazioni di Cloud Storage, consulta IAM per Cloud Storage.
Per un elenco di ruoli e autorizzazioni IAM associati Cloud Run, consulta Ruoli IAM di Cloud Run e le autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run si interfaccia con Le API Google Cloud, come le librerie client di Cloud, consultano guida alla configurazione dell'identità dei servizi. Per ulteriori informazioni sulla concessione dei ruoli, consulta autorizzazioni di deployment e gestire l'accesso.
Montare un volume Cloud Storage
Puoi montare più bucket in diversi percorsi di montaggio. Puoi anche montare un volume su più di un container utilizzando gli stessi percorsi di montaggio o percorsi diversi nei vari container.
Se utilizzi più container, specifica prima i volumi, quindi il volume montato per ogni container.
I montaggi dei volumi richiedono l'ambiente di esecuzione di seconda generazione. Cloud Run seleziona automaticamente l'ambiente di esecuzione di seconda generazione per il tuo servizio se non viene configurato esplicitamente un ambiente di esecuzione.
Console
Nella console Google Cloud, vai a Cloud Run:
Fai clic su Esegui il deployment del container e seleziona Servizio per nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi fai clic su Modifica ed esegui il deployment di una nuova revisione.
Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.
Fai clic sulla scheda 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 Cloud Storage da utilizzare per il volume o, facoltativamente, crea un nuovo bucket.
- Se vuoi impostare il bucket come di sola lettura, seleziona la casella di controllo Di sola lettura.
- Fai clic su Fine.
- Fai clic sulla scheda Montaggi di volumi.
- Fai clic su Installa volume.
- Seleziona il volume di archiviazione dal menu.
- Specifica il percorso in cui vuoi montare il volume.
- Fai clic su Fine.
Fai clic su Crea o Esegui il deployment.
gcloud
Per aggiungere un volume e montarlo:
gcloud run services update SERVICE \ --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Sostituisci:
- SERVICE con il nome del servizio.
- 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.
- 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 services update SERVICE \ --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
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
Aggiorna in base alle esigenze.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH 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à stato creato. L'URL ha la formaLOCATION-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 impostare il volume come di sola lettura oFalse
per consentire le scritture. - BUCKET_NAME con il nome del bucket Cloud Storage.
- IMAGE_URL con un riferimento all'immagine del container, ad esempio
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Lettura e scrittura a volume
Se utilizzi la funzionalità di montaggio del volume di Cloud Run, accedi a un volume utilizzando le stesse librerie del linguaggio di programmazione che utilizzi per leggere e scrivere file sul 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 il montaggio di un volume con mountPath
impostato su /mnt/my-volume
.
Node.js
Utilizza il modulo File system per creare un nuovo file o aggiungerlo a un file
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 conservato 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
Per visualizzare le impostazioni correnti dei montaggi dei volumi per il servizio Cloud Run:
Console
Nella console Google Cloud, vai a Cloud Run:
Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.
Fai clic sulla scheda Revisioni.
Nel riquadro dei dettagli a destra, l'impostazione Monta il volume è elencato nella scheda Volumi.
gcloud
Utilizza il seguente comando:
gcloud run services describe SERVICE
Individua l'impostazione Montaggi di volumi nella configurazione restituita.
Ottimizzazione delle prestazioni della larghezza di banda di rete di Cloud Storage FUSE
Per migliorare le prestazioni di lettura e scrittura, connetti Cloud Run servizio a 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:
- Abilita l'accesso privato Google, assicurandoti di impostare il parametro
vpc-egress
suall-traffic
. - Utilizza una delle opzioni descritte nella pagina delle best practice di networking, nell'esempio 2, Traffico interno verso un'API di Google.
Tempo di avvio del contenitore e montaggi di Cloud Storage FUSE
L'utilizzo di Cloud Storage FUSE può aumentare leggermente il tempo di avvio a freddo del contenitore Cloud Run perché il montaggio del volume viene avviato prima dell'avvio dei contenitori. Il container verrà avviato solo se Cloud Storage FUSE è montato correttamente.
Tieni presente che Cloud Storage FUSE monta un volume correttamente solo dopo aver stabilito una connessione 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 Il montaggio di FUSE non riuscirà e il servizio Cloud Run non verrà avviato. Inoltre, se il montaggio di Cloud Storage FUSE richiede più di 30 secondi, Il servizio Cloud Run non verrà avviato perché Cloud Run ha un un timeout totale di 30 secondi per eseguire tutti i montaggi.
Caratteristiche delle 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 montaggi e i processi avvengono 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 elencare il contenuto di un bucket possono essere lente se la larghezza di banda della rete è bassa. Analogamente, la lettura di un file di grandi dimensioni può richiedere anche questo è limitato 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 all'istanza di container (il limite massimo di memoria del container è di 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:
- Documentazione di Cloud Storage FUSE
- Prestazioni di Cloud Storage FUSE
- Semantica di Cloud Storage FUSE