Questa pagina mostra come montare una condivisione file NFS come volume in Cloud Run. Puoi utilizzare qualsiasi server NFS, incluso il tuo server NFS ospitato on-premise o su una VM di Compute Engine. Se ancora non disponi di una NFS server, consigliamo Filestore, che è un servizio un'offerta NFS gestita di Google Cloud.
Se vuoi utilizzare i file system di rete NBD, 9P, CIFS/Samba e Ceph, consulta la sezione Utilizzare i file system di rete NBD, 9P, CIFS/Samba e Ceph.
Il montaggio della condivisione file NFS come volume in Cloud Run presenta il file come file nel file system del container. Dopo aver montato la condivisione file come volume, puoi accedervi come se fosse una directory sul file system locale, utilizzando le operazioni e le librerie del file system del tuo linguaggio di programmazione.
Percorsi non consentiti
Cloud Run non consente di montare un volume su /dev
,
/proc
e /sys
o nelle relative sottodirectory.
Limitazioni
Per scrivere in un volume NFS, il container deve essere eseguito come root. Se le tue il container legge solo dal file system, può essere eseguito come qualsiasi utente.
Cloud Run non supporta il blocco NFS. I volumi NFS vengono automaticamente montate in modalità no-lock.
Prima di iniziare
Per montare un server NFS come volume in Cloud Run, assicurati di avere seguenti:
- Una rete VPC in cui è in esecuzione il server NFS o l'istanza Filestore.
- Un server NFS in esecuzione in una rete VPC, con il tuo servizio Cloud Run connessa alla rete VPC. Se non hai ancora un server NFS, creane uno creazione di un'istanza Filestore.
- Il tuo servizio Cloud Run è collegato alla rete VPC in cui se il server è in esecuzione. Per prestazioni ottimali, utilizza VPC diretto anziché Connettori VPC.
- Se utilizzi un progetto esistente, assicurati che la configurazione del firewall VPC consenta a Cloud Run di raggiungere il server NFS. (Se inizi da una nuovo progetto, questo valore è vero per impostazione predefinita. Se utilizzi Filestore come server NFS, segui la documentazione di Filestore per creare una regola di uscita del firewall per consentire a Cloud Run di raggiungere Filestore.
Monta un volume NFS
Puoi montare più server NFS, istanze Filestore o altri tipi di volume in percorsi di montaggio diversi.
Se utilizzi più contenitori, specifica prima i volumi, poi i mount dei volumi per ogni contenitore.
Console
Nella console Google Cloud, vai alla pagina dei job Cloud Run:
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.
Fai clic su Contenitore, variabili e secret, connessioni, sicurezza per espandere la pagina delle proprietà del job.
Fai clic sulla scheda Volumi.
- In Volumi:
- Fai clic su Aggiungi volume.
- Nel menu a discesa Tipo di volume, seleziona NFS come tipo di volume.
- Nel campo Nome volume, inserisci il nome che vuoi utilizzare per il volume.
- Nel campo Server NFS, inserisci il nome di dominio o la posizione (nella forma
IP_ADDRESS
) della condivisione file NFS. - Nel campo Percorso, inserisci il percorso della directory del server NFS da montare.
- 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 di volumi.
- Fai clic su Installa volume.
- Seleziona il volume NFS dal menu.
- Specifica il percorso in cui vuoi montare il volume.
- Fai clic su Monta volume
- In Volumi:
Fai clic su Crea o Aggiorna.
gcloud
Per aggiungere un volume e montarlo:
gcloud run jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Sostituisci:
- JOB con il nome del tuo job.
- VOLUME_NAME con il nome che vuoi assegnare al tuo volume.
- IP_ADDRESS con la posizione della condivisione file NFS.
- NFS_PATH con il percorso della condivisione file NFS.
- MOUNT_PATH con il percorso all'interno del file system del container in cui vuoi montare questo volume.
Per montare il volume come volume di sola lettura:
--add-volume name VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
Se utilizzi più container, specifica prima i volumi, quindi specifica i montaggi dei volumi per ogni container:
gcloud run jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --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 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
Aggiorna MOUNT_PATH, VOLUME_NAME, IP_ADDRESS e NFS_PATH in base alle esigenze. Se disponi monta più volumi, si avranno multipli di questi attributi.
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: metadata: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME nfs: server: IP_ADDRESS path: NFS_PATH readonly: IS_READ_ONLY
Sostituisci
- JOB con il nome del tuo job Cloud Run
- 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.
- IP_ADDRESS con l'indirizzo della condivisione file NFS.
- NFS_PATH con il percorso della condivisione file NFS.
- IS_READ_ONLY con
True
per impostare il volume come di sola lettura oFalse
per consentire le scritture.
Crea o aggiorna il job utilizzando il seguente comando:
gcloud run jobs replace job.yaml
Lettura e scrittura in un 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.
Questo è particolarmente utile se utilizzi un contenitore esistente che si aspetta che i dati vengano archiviati nel file system locale e utilizza operazioni di file system regolari per accedervi.
I seguenti snippet presuppongono un montaggio del volume con un valore mountPath
impostato su /mnt/my-volume
.
Nodejs
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 contenuto 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");
Risoluzione dei problemi relativi a NFS
Se riscontri problemi, controlla quanto segue:
- Il servizio Cloud Run è connesso alla rete VPC su cui è in esecuzione il server NFS.
- Non ci sono regole del firewall che impediscono a Cloud Run di raggiungere il server NFS.
- Se il contenitore scrive sul server NFS, assicurati che sia in esecuzione come utente root.
Tempo di avvio del container e punti di montaggio dei volumi NFS
L'uso dei montaggi di volumi NFS può aumentare leggermente il volume del container Cloud Run avvio a freddo perché il montaggio del volume viene avviato prima dell'avvio dei container. Il container verrà avviato solo se NFS è stato montato correttamente.
Tieni presente che NFS monta un volume correttamente solo dopo aver stabilito una connessione con il server e aver recuperato un handle file. Eventuali ritardi di rete possono hanno un impatto sui tempi di avvio del container. Se Cloud Run non riesce a stabilire una connessione al server, il job Cloud Run non verrà avviato. Inoltre, se il montaggio di NFS 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 delle prestazioni NFS
Se crei più di un volume NFS, tutti i volumi vengono montati in parallelo.
Poiché NFS è un file system di rete, è soggetto a limiti di larghezza di banda l'accesso al file system può essere influenzato da una larghezza di banda limitata.
Quando scrivi nel volume NFS, la scrittura viene archiviata nella memoria di Cloud Run fino a quando i dati non vengono svuotati. I dati vengono sottoposti a svuotamento nelle seguenti circostanze:
- L'applicazione svuota la cache dei dati dei file in modo esplicito utilizzando sync(2), msync(2) o fsync(3).
- L'applicazione chiude un file con close(2).
- La pressione della memoria forza il recupero delle risorse di memoria di sistema.
Per saperne di più, consulta la documentazione di Linux su NFS.