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 Compute Engine. Se non hai già un server NFS, ti consigliamo Filestore, un'offerta NFS completamente gestita di Google Cloud.
Se vuoi utilizzare i file system di rete NBD, 9P, CIFS/Samba e Ceph, consulta la sezione Utilizzo dei file system di rete NBD, 9P, CIFS/Samba e Ceph.
Il montaggio della condivisione file NFS come volume in Cloud Run presenta la condivisione 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 in /dev
,
/proc
o /sys
o nelle relative sottodirectory.
Limitazioni
Per scrivere su un volume NFS, il container deve essere eseguito come root. Se il tuo container legge solo dal file system, può essere eseguito come qualsiasi utente.
Cloud Run non supporta il blocco NFS. I volumi NFS vengono montati automaticamente in modalità no-lock.
Prima di iniziare
Per montare un server NFS come volume in Cloud Run, assicurati di disporre di quanto segue:
- 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 servizio Cloud Run connesso a quella rete VPC. Se non hai già un server NFS, creane uno creando un'istanza Filestore.
- Il servizio Cloud Run è collegato alla rete VPC in cui è in esecuzione il server NFS. Per ottenere le prestazioni migliori, utilizza VPC diretto anziché i 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 un nuovo progetto, questa opzione è selezionata per impostazione predefinita.) Se utilizzi Filestore come server NFS, segui la documentazione di Filestore per creare una regola di uscita firewall per consentire a Cloud Run di raggiungere Filestore.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare ed eseguire il deployment dei servizi Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM sul servizio:
-
Cloud Run Developer (
roles/run.developer
): il servizio Cloud Run -
Service Account User (
roles/iam.serviceAccountUser
): l'identità del servizio
Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM Cloud Run e Autorizzazioni IAM Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle 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 NFS
Puoi montare più server NFS, istanze Filestore o altri tipi di volumi in percorsi di montaggio diversi.
Se utilizzi più container, specifica prima i volumi, poi i montaggi dei volumi per ogni container.
Console
Nella console Google Cloud , vai a Cloud Run:
Seleziona Servizi dal menu e fai clic su Esegui il deployment del contenitore per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment della nuova revisione.
Se stai configurando un nuovo servizio, compila la pagina delle impostazioni iniziali del servizio, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.
Fai clic sulla scheda Volumi.
- Nella sezione 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 (nel formato
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 Container, quindi espandi il container in cui stai montando il volume per modificarlo.
- Fai clic sulla scheda Montaggi volumi.
- Fai clic su Monta volume.
- Seleziona il volume NFS dal menu.
- Specifica il percorso in cui vuoi montare il volume.
- Fai clic su Monta volume.
- Nella sezione Volumi:
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=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
Sostituisci:
- SERVICE con il nome del tuo servizio.
- VOLUME_NAME con il nome che vuoi dare al volume.
- IP_ADDRESS con la posizione della condivisione file NFS.
- NFS_PATH con il percorso della condivisione file NFS che inizia con una
barra, ad esempio
/example-directory
. - 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 punto di montaggio del 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, poi specifica i montaggi dei volumi per ogni container:
gcloud run services update SERVICE \ --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 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 MOUNT_PATH, VOLUME_NAME, IP_ADDRESS e NFS_PATH in base alle esigenze. Se hai più montaggi di volumi, avrai più istanze di questi attributi.
apiVersion: run.googleapis.com/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 nfs: server: IP_ADDRESS path: NFS_PATH readOnly: IS_READ_ONLY
Sostituisci
- SERVICE con il nome del tuo servizio 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 punto di montaggio del volume.
- IP_ADDRESS con l'indirizzo della condivisione file NFS.
- NFS_PATH con il percorso della condivisione file NFS che inizia con una barra, ad esempio
/example-directory
. - IS_READ_ONLY con
True
per rendere il volume di sola lettura oFalse
per consentire le scritture.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Aggiungi quanto segue a una risorsagoogle_cloud_run_v2_service
nella configurazione Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
template {
execution_environment = "EXECUTION_ENVIRONMENT_GEN2"
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
vpc_access {
network_interfaces {
network = "default"
subnetwork = "default"
}
}
volumes {
name = "VOLUME_NAME"
nfs {
server = google_filestore_instance.default.networks[0].ip_addresses[0]
path = "NFS_PATH"
read_only = IS_READ_ONLY
}
}
}
}
resource "google_filestore_instance" "default" {
name = "cloudrun-service-ro"
location = "REGION"
tier = "BASIC_HDD"
file_shares {
capacity_gb = 1024
name = "share1"
}
networks {
network = "default"
modes = ["MODE_IPV4"]
}
}
Sostituisci:
- SERVICE con il nome del tuo servizio Cloud Run.
- REGION con la regione Google Cloud . Ad esempio
europe-west1
. - MOUNT_PATH con il percorso relativo in cui stai montando il volume, ad esempio
/mnt/nfs/filestore
. - VOLUME_NAME con il nome che preferisci per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al punto di montaggio del volume.
- NFS_PATH con il percorso della condivisione file NFS che inizia con una
barra, ad esempio
/share1
. - IS_READ_ONLY con
True
per rendere il volume di sola lettura oppureFalse
per consentire le scritture.
Lettura e scrittura in un volume
Se utilizzi la funzionalità di montaggio del volume di 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 che i dati vengano archiviati nel file system locale e utilizza operazioni regolari del file system per accedervi.
I seguenti snippet presuppongono un montaggio del volume con mountPath
impostato su /mnt/my-volume
.
Nodejs
Utilizza il modulo File System per creare un nuovo file o aggiungere contenuti a un file 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 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 in cui si trova il server NFS.
- Non esistono regole firewall che impediscono a Cloud Run di raggiungere il server NFS.
- Se il container scrive sul server NFS, assicurati che sia in esecuzione come root.
Tempo di avvio del container e montaggio dei volumi NFS
L'utilizzo dei montaggi dei volumi NFS può aumentare leggermente il tempo di avvio a freddo del container Cloud Run perché il montaggio del volume viene avviato prima dell'avvio dei container. Il container verrà avviato solo se NFS viene montato correttamente.
Tieni presente che NFS monta correttamente un volume solo dopo aver stabilito una connessione al server e recuperato un handle del file. Se Cloud Run non riesce a stabilire una connessione al server, il servizio Cloud Run non verrà avviato.
Inoltre, eventuali ritardi di rete possono influire sul tempo di avvio del container, poiché Cloud Run ha un timeout totale di 30 secondi per tutti i montaggi. Se il montaggio di NFS richiede più di 30 secondi, l'avvio del servizio Cloud Run non riuscirà.
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 e 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 finché i dati non vengono svuotati. I dati vengono svuotati nelle seguenti circostanze:
- L'applicazione scarica i 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.
Cancella e rimuovi volumi e montaggi dei volumi
Puoi cancellare tutti i volumi e i relativi punti di montaggio oppure rimuovere singoli volumi e i relativi punti di montaggio.
Cancella tutti i volumi e i relativi punti di montaggio
Per cancellare tutti i volumi e i montaggi dei volumi dal servizio a singolo container, esegui questo comando:
gcloud run services update SERVICE \ --clear-volumes --clear-volume-mounts
Se hai più container, segui le convenzioni della CLI sidecar per cancellare i volumi e i montaggi dei volumi:
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Rimuovere singoli volumi e montaggi di volumi
Per rimuovere un volume, devi rimuovere anche tutti i relativi montaggi.
Per rimuovere singoli volumi o punti di montaggio dei volumi, utilizza i flag remove-volume
e remove-volume-mount
:
gcloud run services update SERVICE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH