Configurare i mount dei volumi NFS per i servizi

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 Utilizzare i 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 ti consente di montare un volume in /dev, /proc e /sys o nelle relative sottodirectory.

Limitazioni

  • Per scrivere in un volume NFS, il container deve essere eseguito come root. Se il contenitore 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à 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 servizio Cloud Run collegato a quella rete VPC. Se non hai ancora 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 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 parti da un nuovo progetto, questo è 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.

Montare un volume NFS

Puoi montare più server NFS, istanze Filestore o altri tipi di volumi in percorsi di montaggio diversi.

Se utilizzi più contenitori, specifica prima i volumi, poi i mount dei volumi per ogni contenitore.

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic su Esegui il deployment del contenitore e seleziona Servizio per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, poi su Modifica ed esegui il deployment di una nuova revisione.

  3. 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.

  4. Fai clic sulla scheda Volumi.

    immagine

    • 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 Container, quindi espandi il contenitore su cui stai montando il volume per modificarlo.
    • Fai clic sulla scheda Montaggi volume.
    • Fai clic su Monta il volume.
      • Seleziona il volume NFS dal menu.
      • Specifica il percorso in cui vuoi montare il volume.
      • Fai clic su Monta volume.
  5. 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 servizio.
    • VOLUME_NAME con il nome che vuoi assegnare 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 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, quindi specifica i mount 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

  1. 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
  2. Aggiorna MOUNT_PATH, VOLUME_NAME, IP_ADDRESS e NFS_PATH in base alle esigenze. Se hai più montaggi di volumi, avrai più 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 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 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 impostare il volume come di sola lettura o False per consentire le scritture.
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

Lettura e scrittura in un volume

Se utilizzi la funzionalità di montaggio del volume 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.

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 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 aggiungerne uno 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 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'utilizzo dei mount dei volumi NFS può aumentare leggermente il tempo di avvio a freddo del contenitore Cloud Run perché il mount del volume viene avviato prima dell'avvio dei contenitori. Il container verrà avviato solo se NFS viene 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 nella rete possono influire sul tempo di avvio del contenitore. Se Cloud Run non riesce a stabilire una connessione al server, il servizio Cloud Run non verrà avviato. Inoltre, se il montaggio di NFS richiede più di 30 secondi, il servizio Cloud Run non verrà avviato perché Cloud Run ha un timeout totale di 30 secondi per eseguire tutti i montaggi.

Caratteristiche di 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 memorizzata nella memoria di Cloud Run fino a quando i dati non vengono svuotati. I dati vengono sottoposti a flush 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).
  • L'utilizzo elevato della memoria forza il recupero delle risorse di memoria di sistema.

Per saperne di più, consulta la documentazione di Linux su NFS.