Configurare i montaggi 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 di Compute Engine. Se ancora non disponi di una NFS server, consigliamo Filestore, che è un servizio un'offerta NFS gestita di Google Cloud.

Se intendi utilizzare file system di rete NBD, 9P, CIFS/Samba e Ceph Fai riferimento all'utilizzo dei 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 il file condividere come volume, vi si accede come se si trattasse di una directory sul file 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 il server NFS o Filestore in esecuzione.
  • 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 usi un progetto esistente, assicurati che la configurazione del tuo firewall VPC consente 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 documentazione sulla creazione di una regola firewall in uscita 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ù container, specifica prima i volumi, quindi i montaggi del volume per ogni container.

Console

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

    Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un'istanza servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila il servizio iniziale pagina delle impostazioni come preferisci, poi fai clic su Container, volumi, networking, sicurezza per espandere 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 NPS, inserisci il nome del dominio o la località (nel modulo IP_ADDRESS) della condivisione file NFS.
      • Nel campo Percorso, inserisci il percorso della directory del server NFS che che vuoi 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
  5. Fai clic su Crea o Esegui il deployment.

gcloud

Nota: mostriamo il comando gcloud beta run services update, ma puoi anche usare il comando gcloud beta run services deploy con gli stessi parametri mostrati nell'immagine.

  • Per aggiungere un volume e montarlo:
gcloud beta 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 assegnare al tuo volume.
  • IP_ADDRESS con la posizione della condivisione file NFS.
  • NFS_PATH con il percorso della condivisione file NFS che inizia con un 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 relativo montaggio.

  • 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 beta 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 disponi monta più volumi, si avranno multipli di questi attributi.

    apiVersion: run.googleapis.com/v1
    kind: Service
    metadata:
      name: SERVICE
        annotations:
          run.googleapis.com/launch-stage: BETA
    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 relativo montaggio.
    • 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 o False per consentire le scritture.
  3. Sostituisci il servizio con la nuova configurazione utilizzando quanto segue :

    gcloud beta run services replace service.yaml

Lettura e scrittura a 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.

Ciò è particolarmente utile se utilizzi un container esistente che prevede dati da archiviare sul file system locale e utilizza il normale file system operazioni per accedervi.

I seguenti snippet presuppongono un montaggio del volume con un valore mountPath impostato su /mnt/my-volume.

Node.js

Utilizzare 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 contenuto 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 di NFS

Se riscontri problemi, controlla quanto segue:

  • Il tuo servizio Cloud Run è connesso alla rete VPC che NFS che il server sia attivo.
  • Non esistono regole firewall che impediscano a Cloud Run di raggiungere il server NFS.
  • Se il container scrive sul server NFS, assicurati che sia in esecuzione come root.