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.
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
- Cloud Run non supporta il blocco NFS. I volumi NFS vengono montati automaticamente in modalità senza blocco.
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 pool di worker Cloud Run connesso a quella rete VPC. Se non hai già un server NFS, creane uno creando un'istanza Filestore.
- Il pool di worker Cloud Run è collegato alla rete VPC in cui è in esecuzione il server NFS. Per ottenere le migliori prestazioni, 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.
- Imposta le autorizzazioni sulla condivisione file NFS remota per consentire l'accesso all'utente del container. Per impostazione predefinita, Filestore fornisce l'accesso in lettura a tutti gli utenti, ma limita l'accesso in scrittura all'utente root (
uid 0
). Se il tuo container richiede l'accesso in scrittura e non viene eseguito come utente root, devi utilizzare un client connesso (in esecuzione come root) per modificare le autorizzazioni di condivisione. Ad esempio, puoi utilizzare il comandochown
per modificare la proprietà dei file o delle directory in base all'ID utente specifico con cui viene eseguito il contenitore.
Ruoli obbligatori
Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo pool di worker 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.
Configura un montaggio del volume NFS utilizzando la console Google Cloud , Google Cloud CLI o Terraform.
Console
Nella console Google Cloud , vai a Cloud Run:
Seleziona Worker pool dal menu e fai clic su Esegui il deployment del container per configurare un nuovo worker pool. Se stai configurando un worker pool esistente, fai clic sul worker pool, poi su Modifica ed esegui il deployment della nuova revisione.
Se stai configurando un nuovo pool di worker, compila la pagina iniziale del pool di worker, poi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione dei pool di worker.
Fai clic sulla scheda Volumi.
- Nella sezione Volumi, fai clic su Aggiungi volume.
- Nel menu a discesa Tipo di volume, seleziona NFS.
- 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 che vuoi montare.
- Fai clic su Fine.
- Fai clic sulla scheda Container, individua il container che vuoi montare ed espandi i dettagli del container.
- 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.
- Fai clic su Fine.
- Nella sezione Volumi, fai clic su Aggiungi volume.
Fai clic su Crea o Esegui il deployment.
gcloud
Per aggiungere un volume e montarlo:
gcloud beta run worker-pools update WORKER_POOL \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Sostituisci quanto segue:
- WORKER_POOL: il nome del pool di worker.
- VOLUME_NAME: il nome che vuoi assegnare al volume.
- IP_ADDRESS: la posizione della condivisione file NFS.
- NFS_PATH: il percorso della condivisione file NFS che inizia con una
barra, ad esempio
/example-directory
. - MOUNT_PATH: il percorso relativo in cui stai montando il volume, ad esempio
/mnt/my-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 beta run worker-pools update WORKER_POOL \ --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
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
launch_stage = "BETA"
template {
containers {
image = "IMAGE_URL"
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-worker-pool"
location = "REGION"
tier = "BASIC_HDD"
file_shares {
capacity_gb = 1024
name = "share1"
}
networks {
network = "default"
modes = ["MODE_IPV4"]
}
}
Sostituisci quanto segue:
- WORKER_POOL: il nome del pool di worker.
- REGION: la regione Google Cloud , ad esempio
europe-west1
. - IMAGE_URL: un riferimento all'immagine container che
contiene il pool di worker, ad esempio
us-docker.pkg.dev/cloudrun/container/worker-pool:latest
. - VOLUME_NAME: il nome del volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al punto di montaggio del volume.
- MOUNT_PATH: il percorso relativo in cui stai montando il
volume, ad esempio
/mnt/my-volume
. - NFS_PATH: il percorso della condivisione file NFS.
- IS_READ_ONLY:
True
per rendere il volume di sola lettura oppureFalse
per consentire le scritture.
Visualizza la configurazione variabile di ambiente per il worker pool
Nella console Google Cloud , vai a Cloud Run:
Fai clic su Pool di worker per visualizzare l'elenco dei pool di worker di cui è stato eseguito il deployment.
Fai clic sul worker pool che vuoi esaminare per visualizzare il relativo riquadro dei dettagli.
Fai clic sulla scheda Container per visualizzare la configurazione dei container del pool di worker.
Risoluzione dei problemi relativi a NFS
Se riscontri problemi, controlla quanto segue:
- Il pool di worker 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 tuo container deve scrivere dati, assicurati che le autorizzazioni di condivisione NFS siano configurate per consentire le scritture da parte dell'utente del container.
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 pool di worker 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 pool di worker Cloud Run non andrà a buon fine.
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 scaricati. I dati vengono svuotati nelle seguenti circostanze:
- L'applicazione svuota 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 pool di worker a singolo container, esegui questo comando:
gcloud beta run worker-pools update WORKER_POOL \ --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 beta run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Rimuovere singoli volumi e montaggi dei volumi
Per rimuovere un volume, devi rimuovere anche tutti i montaggi dei volumi che lo utilizzano.
Per rimuovere singoli volumi o montaggi di volumi, utilizza i flag remove-volume
e remove-volume-mount
:
gcloud beta run worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH