Cloud Storage FUSE

Questa pagina fornisce una panoramica di Cloud Storage FUSE, un adattatore FUSE che consente di montare e accedere ai bucket Cloud Storage come file system locali, in modo che le applicazioni possano leggere e scrivere oggetti nel bucket utilizzando la semantica del file system standard.

Questa documentazione riflette sempre la versione più recente di Cloud Storage FUSE. Per informazioni dettagliate sulla versione più recente, consulta le release di Cloud Storage FUSE su GitHub.

Panoramica

Cloud Storage FUSE è un prodotto open source supportato da Google. Cloud Storage FUSE utilizza le API FUSE e Cloud Storage per esporre in modo trasparente i bucket come cartelle montate localmente sul file system.

Cloud Storage FUSE è integrato con altri servizi Google Cloud. Ad esempio, il driver CSI di Cloud Storage FUSE ti consente di utilizzare l'API Google Kubernetes Engine (GKE) per utilizzare i bucket come volumi, in modo da poter leggere e scrivere da Cloud Storage all'interno dei pod Kubernetes. Per ulteriori informazioni su altre integrazioni, consulta la sezione Integrazioni.

Come funziona Cloud Storage FUSE

Cloud Storage FUSE funziona traducendo i nomi degli oggetti archiviati in una struttura simile a una directory, interpretando il carattere barra (/) nei nomi degli oggetti come separatore di directory. Gli oggetti con lo stesso prefisso comune vengono trattati come file nella stessa directory, consentendo alle applicazioni di interagire con il bucket montato come con un file system. Gli oggetti possono essere organizzati anche in una struttura di file system logica utilizzando uno spazio dei nomi gerarchico, che ti consente di organizzarli in cartelle.

Cloud Storage FUSE può essere eseguito da qualsiasi luogo con connettività a Cloud Storage, inclusi Google Kubernetes Engine, VM Compute Engine o sistemi on-premise.

Casi d'uso di Cloud Storage FUSE

Cloud Storage FUSE è ideale per i casi d'uso in cui Cloud Storage ha le caratteristiche di prestazioni e scalabilità giuste per un'applicazione che richiede la semantica del file system. Ad esempio, Cloud Storage FUSE è utile per i progetti di machine learning (ML) perché offre un modo per archiviare dati, modelli, checkpoint e log direttamente in Cloud Storage. Per ulteriori informazioni, consulta Cloud Storage FUSE per i carichi di lavoro di ML.

Cloud Storage FUSE per il machine learning

Cloud Storage FUSE è una scelta comune per gli sviluppatori che vogliono archiviare e accedere ai dati di addestramento e dei modelli di ML come oggetti in Cloud Storage. Cloud Storage FUSE offre diversi vantaggi per lo sviluppo di progetti di ML:

  • Cloud Storage FUSE ti consente di montare i bucket Cloud Storage come file system locale in modo che le tue applicazioni possano accedere ai dati di addestramento e del modello utilizzando la semantica del file system standard. Ciò significa che puoi evitare il costo della riscrittura o del refactoring del codice dell'applicazione quando utilizzi Cloud Storage per archiviare i dati di ML.

  • Dall'addestramento all'inferenza, Cloud Storage FUSE ti consente di utilizzare la scalabilità, le prestazioni e l'economicità di Cloud Storage, in modo da poter eseguire i tuoi carichi di lavoro di ML su larga scala.

  • Cloud Storage Fuse ti consente di avviare rapidamente i job di addestramento fornendo alle risorse di calcolo l'accesso diretto ai dati in Cloud Storage, in modo da non dover scaricare i dati di addestramento nella risorsa di calcolo.

Per ulteriori informazioni, consulta Framework, sistemi operativi e architetture supportati da Cloud Storage FUSE.

Framework, sistemi operativi e architetture

Cloud Storage FUSE è stato convalidato con i seguenti framework:

  • TensorFlow 2.x

  • TensorFlow 1.x

  • PyTorch 2.x

  • PyTorch 1.x

  • JAX 0.4.x

Cloud Storage FUSE supporta i seguenti sistemi operativi e architetture:

  • Rocky Linux 8.9 o versioni successive

  • Ubuntu 18.04 o versioni successive

  • Debian 10 o versioni successive

  • CentOS 7.9 o versioni successive

  • RHEL 7.9 o versioni successive

  • SLES 15 o versioni successive

  • x86_64

  • ARM64

Integrazioni di Cloud Storage FUSE con i prodotti Google Cloud

Cloud Storage FUSE si integra con i seguenti prodotti Google Cloud:

Prodotto Come viene integrato Cloud Storage FUSE
Google Kubernetes Engine (GKE)

Il driver CSI di Cloud Storage FUSE gestisce l'integrazione di Cloud Storage FUSE con l'API Kubernetes per utilizzare i bucket Cloud Storage come volumi. Puoi utilizzare il driver CSI di Cloud Storage FUSE per montare i bucket come file system sui nodi Google Kubernetes Engine.

Formazione Vertex AI

Puoi accedere ai dati di un bucket Cloud Storage come file system montato quando esegui l'addestramento personalizzato su Vertex AI. Per ulteriori informazioni, consulta Preparare il codice di addestramento.

Workbench Vertex AI

Le istanze di Vertex AI Workbench includono un'integrazione di Cloud Storage che ti consente di sfogliare i bucket e di lavorare con file compatibili archiviati in Cloud Storage dall'interfaccia di JupyterLab. L'integrazione di Cloud Storage ti consente di accedere a tutti i file e i bucket Cloud Storage a cui la tua istanza ha accesso nello stesso progetto della tua istanza Vertex AI Workbench. Per configurare l'integrazione, consulta le istruzioni di Vertex AI Workbench su come accedere ai file e ai bucket Cloud Storage in JupyterLab.

Immagini VM per il deep learning

Cloud Storage FUSE è preinstallato nelle immagini VM di deep learning.

Deep Learning Containers

Per montare i bucket Cloud Storage per Deep Learning Containers, puoi utilizzare il driver CSI di Cloud Storage FUSE (opzione consigliata) o installare Cloud Storage FUSE.

Batch

Cloud Storage FUSE ti consente di montare i bucket Cloud Storage come volumi di archiviazione quando crei ed esegui job di batch. Puoi specificare un bucket nella definizione di un job, che viene montato automaticamente sulle VM per il job quando viene eseguito.

Cloud Run

Cloud Run ti consente di montare un bucket Cloud Storage come volume e di presentare i contenuti del bucket come file nel file system del container. Per configurare il montaggio dei volumi, consulta Montare un volume Cloud Storage.

Cloud Composer

Quando crei un ambiente, Cloud Composer memorizza il codice sorgente per i tuoi flussi di lavoro e le relative dipendenze in cartelle specifiche di un bucket Cloud Storage. Cloud Composer utilizza Cloud Storage FUSE per mappare le cartelle del bucket ai componenti Airflow nell'ambiente Cloud Composer.

Per un elenco dei prodotti Google Cloud integrati con Cloud Storage in generale, consulta Integrazione con i servizi e gli strumenti Google Cloud.

Memorizzazione nella cache

Cloud Storage FUSE offre quattro tipi di memorizzazione nella cache per contribuire ad aumentare le prestazioni e ridurre i costi: memorizzazione nella cache dei file, memorizzazione nella cache delle statistiche, memorizzazione nella cache dei tipi e memorizzazione nella cache degli elenchi. Per ulteriori informazioni su queste cache, consulta la Panoramica della memorizzazione nella cache.

Semantica della directory

Cloud Storage offre bucket con uno spazio dei nomi piatto e bucket con spazio dei nomi gerarchico abilitato. Per impostazione predefinita, Cloud Storage FUSE può ricavare le directory definite in modo esplicito, note anche come cartelle, nei bucket con spazio dei nomi gerarchico abilitato, ma non può ricavare le directory definite in modo implicito nei bucket con uno spazio dei nomi semplice. Le directory definite in modo implicito includono cartelle simulate e cartelle gestite.

Ad esempio, supponiamo di montare un bucket denominato my-bucket, che contiene un oggetto chiamato my-directory/my-object.txt, dove my-directory/ è una cartella simulata. Quando esegui ls sul punto di montaggio del bucket, per impostazione predefinita Cloud Storage FUSE non può accedere alla directory simulata my-bucket/my-directory/ né all'oggetto my-object.txt al suo interno. Per consentire a Cloud Storage FUSE di dedurre la cartella simulata e l'oggetto al suo interno, includi l'opzione --implicit-dirs nel comando gcsfuse mount quando monti un bucket con spazio dei nomi piatto. Per ulteriori informazioni sull'opzione --implicit-dirs, consulta la documentazione della riga di comando di Cloud Storage FUSE.

Se devi archiviare e accedere ai dati utilizzando un file system, utilizza i bucket con lo spazio dei nomi gerarchico abilitato. Per scoprire come creare questi bucket, consulta Creare bucket con spazio dei nomi gerarchico abilitato.

Per ulteriori informazioni sulla semantica delle directory, inclusa la modalità di montaggio dei bucket con directory definite in modo implicito, consulta la sezione File e directory nella documentazione di GitHub.

Strategia di ripetizione

Per impostazione predefinita, le richieste non riuscite da Cloud Storage FUSE a Cloud Storage vengono riprovate con backoff esponenziale fino a una durata massima del backoff specificata, che ha un valore di 30s (30 secondi) per impostazione predefinita. Una volta che la durata del backoff supera la durata massima specificata, il nuovo tentativo continua con la durata massima specificata. Puoi utilizzare l'opzione --max-retry-sleep nell'ambito di una chiamata gcsfuse per specificare la durata del backoff.

Per saperne di più sull'opzione --max-retry-sleep, consulta la documentazione della riga di comando gcsfuse.

Operazioni Cloud Storage FUSE associate alle operazioni Cloud Storage

Quando esegui un'operazione utilizzando Cloud Storage FUSE, esegui anche le operazioni di Cloud Storage associate all'operazione Cloud Storage FUSE. La tabella seguente descrive i comandi FUSE di Cloud Storage comuni e le relative operazioni dell'API JSON di Cloud Storage associate. Puoi visualizzare informazioni sulle operazioni di Cloud Storage FUSE impostando il flag --log-severity su TRACE nel comando gcsfuse.

Comando Operazioni dell'API JSON
gcsfuse --log-severity=TRACE example-bucket mp Objects.list (per controllare le credenziali)
cd mp n/a
ls mp Objects.list("")
mkdir subdir

Objects.get("subdir")

Objects.get("subdir/")

Objects.insert("subdir/")

cp ~/local.txt subdir/

Objects.get("subdir/local.txt")

Objects.get("subdir/local.txt/")

Objects.insert("subdir/local.txt"), per creare un oggetto vuoto

Objects.insert("subdir/local.txt"), quando si chiude dopo aver terminato di scrivere

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

Prezzi di Cloud Storage FUSE

Cloud Storage FUSE è disponibile senza costi, ma lo spazio di archiviazione, i metadati e l'I/O di rete generati da e verso Cloud Storage sono soggetti a pagamento come qualsiasi altra interfaccia di Cloud Storage. In altre parole, tutte le operazioni e i trasferimenti di dati eseguiti da Cloud Storage FUSE vengono mappati ai trasferimenti e alle operazioni di Cloud Storage e vengono addebitati di conseguenza. Per ulteriori informazioni sulle operazioni comuni di Cloud Storage FUSE e su come vengono mappate alle operazioni di Cloud Storage, consulta la mappatura delle operazioni.

Per evitare sorprese, devi stimare in che modo l'utilizzo di Cloud Storage FUSE si traduce in costi di Cloud Storage. Ad esempio, se utilizzi Cloud Storage FUSE per archiviare i file di log, puoi incorrere rapidamente in addebiti se i log vengono svuotati in modo aggressivo su centinaia o migliaia di macchine contemporaneamente.

Consulta la pagina Prezzi di Cloud Storage per informazioni su addebiti come archiviazione, utilizzo della rete e operazioni.

Limitazioni

Sebbene Cloud Storage FUSE abbia un'interfaccia per il file system, non è come un file system NFS o CIFS sul backend. Inoltre, Cloud Storage FUSE non è conforme a POSIX. Per un prodotto del file system POSIX in Google Cloud, consulta Filestore.

Quando utilizzi Cloud Storage FUSE, tieni presente le sue limitazioni e la sua semantica, che sono diverse da quelle dei file system POSIX. Cloud Storage FUSE deve essere utilizzato solo in base alle sue funzionalità.

Limitazioni e differenze rispetto ai file system POSIX

L'elenco seguente descrive le limitazioni di Cloud Storage FUSE:

  • Metadati: Cloud Storage FUSE non trasferisce i metadati degli oggetti durante il caricamento dei file in Cloud Storage, ad eccezione di mtime e dei target dei link simbolici. Ciò significa che non puoi impostare i metadati dell'oggetto quando carichi i file utilizzando Cloud Storage FUSE. Se devi conservare i metadati degli oggetti, ti consigliamo di caricare i file utilizzando Google Cloud CLI, l'API JSON o la console Google Cloud.
  • Contemporaneità: Cloud Storage FUSE non fornisce il controllo della concorrenza per più scritture nello stesso file. Quando più scritture tentano di sostituire un file, l'ultima scrittura ha la precedenza e tutte le scritture precedenti vengono perse. Non viene eseguita alcuna unione, controllo della versione o notifica all'utente dell'eventuale sovrascrittura successiva.
  • Collegamento: Cloud Storage FUSE non supporta i link fissi.
  • Blocco e patch dei file: Cloud Storage FUSE non supporta il blocco o il patching dei file. Di conseguenza, non dovresti archiviare i repository dei sistemi di controllo della versione nei punti di montaggio di Cloud Storage FUSE, poiché i sistemi di controllo della versione si basano su blocco e patch dei file. Inoltre, non devi utilizzare Cloud Storage FUSE come sostituto dei file.
  • Semantica: la semantica in Cloud Storage FUSE è diversa da quella di un file system convenzionale. Ad esempio, i metadati come l'ultimo tempo di accesso non sono supportati e alcune operazioni sui metadati come la rinominazione della directory non sono atomiche, a meno che non utilizzi bucket con spazio dei nomi gerarchico abilitato. Per un elenco delle differenze tra la semantica di Cloud Storage FUSE e la semantica del file system convenzionale, consulta Semantica nella documentazione di GitHub di Cloud Storage FUSE. Per scoprire in che modo Cloud Storage FUSE ricava le directory in Cloud Storage, consulta la sezione sulla semantica delle directory.
  • Carichi di lavoro che applicano patch ai file (o sostituzioni in blocco): Cloud Storage FUSE può scrivere in Cloud Storage solo oggetti interi alla volta e non fornisce un meccanismo per l'applicazione di patch. Se provi a eseguire il patching di un file, Cloud Storage FUSE ne caricherà di nuovo l'intero contenuto. L'unica eccezione a questo comportamento è che puoi aggiungere contenuti alla fine di un file di almeno 2 MB, in cui Cloud Storage FUSE ricaricherà solo i contenuti aggiunti.
  • Accesso: l'autorizzazione per i file è regolata dalle autorizzazioni di Cloud Storage. Controllo dell'accesso in stile POSIX non funziona.
  • Prestazioni: Cloud Storage FUSE ha una latenza molto più elevata rispetto a un file system locale e, pertanto, non deve essere utilizzato come backend per l'archiviazione di un database. La produttività può essere ridotta durante la lettura o la scrittura di un piccolo file alla volta. L'utilizzo di file di dimensioni maggiori o il trasferimento di più file contemporaneamente contribuirà ad aumentare la velocità effettiva delle transazioni.
  • Disponibilità: a volte possono verificarsi errori temporanei quando utilizzi Cloud Storage FUSE per accedere a Cloud Storage. Ti consigliamo di riprovare le operazioni non riuscite utilizzando le strategie di ripetizione.
  • Controllo delle versioni degli oggetti: Cloud Storage FUSE non supporta formalmente l'utilizzo con i bucket in cui è abilitato il controllo delle versioni degli oggetti. Il tentativo di utilizzare Cloud Storage FUSE con bucket in cui è attivato il controllo delle versioni degli oggetti può produrre un comportamento imprevedibile.
  • Transcodifica dei file:

    Oggetti con content-encoding: gzip nei metadati: qualsiasi oggetto di questo tipo in una directory montata con FUSE di Cloud Storage non viene sottoposto a transcodifica decompressiva. L'oggetto rimane invece compresso nello stesso modo in cui viene archiviato nel bucket.

    Ad esempio, un file di 1000 byte caricato in un bucket utilizzando il comando gcloud storage cp con il --gzip-local flag, potrebbe diventare di 60 byte (le dimensioni effettive compresse dipendono dai contenuti e dall'implementazione di gzip utilizzata dall'interfaccia a gcloud CLI) come oggetto Cloud Storage. Se il bucket è montato utilizzando gcsfuse e il file corrispondente è elencato o letto dalla directory di montaggio, le sue dimensioni vengono restituite come 60 byte e i relativi contenuti sono una versione compressa dei contenuti originali di 1000 byte.

    Ciò è in contrasto con un download che utilizza gcloud storage cp gs://bucket/path /local/path, che viene sottoposto a transcoding decompresivo: nel comando gcloud, i contenuti vengono decompressi automaticamente durante il download e vengono pubblicati i contenuti originali non compressi.

  • Criteri di conservazione: Cloud Storage FUSE non supporta la scrittura nei bucket con un criterio di conservazione. Se provi a scrivere in un bucket con un criterio di conservazione, le scritture non andranno a buon fine.

    Cloud Storage FUSE supporta la lettura di oggetti dai bucket con un criterio di conservazione, ma il bucket deve essere montato come Read-Only passando il flag -o RO durante il montaggio del bucket.

  • Spazio di archiviazione locale: gli oggetti nuovi o modificati vengono memorizzati nella loro interezza in un file temporaneo locale finché non vengono chiusi o sincronizzati. Quando lavori con file di grandi dimensioni, assicurati di disporre di uno spazio di archiviazione locale sufficiente per le copie temporanee dei file, in particolare se utilizzi istanze Compute Engine. Per maggiori informazioni, consulta il file README nella documentazione di GitHub di Cloud Storage FUSE.
  • Limiti di handle dei file: il kernel Linux ha un limite predefinito di 1024 handle dei file aperti. Quando utilizzi Cloud Storage FUSE come server per gestire più connessioni contemporaneamente, potresti superare questo limite. Per evitare problemi, assicurati che il numero di connessioni simultanee a un singolo host rimanga al di sotto del limite e valuta la possibilità di aumentarlo. Gli scenari in cui questo è importante includono l'utilizzo di un montaggio FUSE Cloud Storage per pubblicare contenuti web, ospitare un NAS (Network Attached Storage) o un server FTP (File Transfer Protocol). Quando pubblichi contenuti web su Cloud Run da un montaggio FUSE di Cloud Storage, il numero di richieste in parallelo massime per istanza è limitato a meno di 1000.
  • Limitazioni di rsync: la latenza del file system di Cloud Storage FUSE influisce su rsync, che legge e scrive un solo file alla volta. Per trasferire più file in parallelo verso o dal tuo bucket, utilizza Google Cloud CLI eseguendo gcloud storage rsync. Per saperne di più, consulta la documentazione di rsync.
  • Limitazioni delle operazioni di elenco: quando elenchi tutti gli oggetti in un bucket montato, ad esempio eseguendo ls, Cloud Storage FUSE chiama l'API Objects: list su Cloud Storage. L'API esegue la paginazione dei risultati, il che significa che Cloud Storage FUSE potrebbe dover emettere più chiamate, a seconda del numero di oggetti nel bucket, il che può rendere un'operazione di elenco costosa e lenta.

Problemi noti

Per un elenco dei problemi noti in Cloud Storage FUSE, consulta GitHub.

Assistenza

Puoi ricevere assistenza, inviare domande generali e richiedere nuove funzionalità utilizzando uno dei canali di assistenza ufficiali di Google Cloud. Puoi anche ricevere assistenza segnalando i problemi in GitHub.

Per le soluzioni ai problemi più comuni, consulta la sezione Risoluzione dei problemi nella documentazione di GitHub di Cloud Storage FUSE.

Passaggi successivi