Configura i montaggi dei volumi NFS per le istanze

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 non hai già un server NFS, ti consigliamo Filestore, un'offerta NFS completamente gestita da 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 nel file system locale, utilizzando le operazioni e le librerie del file system del linguaggio di programmazione.

Limitazioni

  • Cloud Run non supporta il blocco NFS. I volumi NFS vengono montati automaticamente in modalità senza blocco.
  • Percorsi non consentiti: Cloud Run non consente di montare un volume in /dev, /proc o /sys o nelle relative sottodirectory.

Prima di iniziare

Per montare un server NFS come volume in Cloud Run, assicurati di avere 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 l'istanza Cloud Run connessa a quella rete VPC. Se non hai già un server NFS, creane uno creando un'istanza Filestore.
  • L'istanza Cloud Run è collegata alla rete VPC in cui è in esecuzione il server NFS. Per prestazioni ottimali, utilizza il 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 condizione è vera per impostazione predefinita.) Se utilizzi Filestore come server NFS, segui la documentazione di Filestore per creare una regola in uscita del 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 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 comando chown per modificare la proprietà dei file o delle directory con l'ID utente specifico con cui viene eseguito il container.

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 l'istanza Cloud Run interagisce con Google Cloud API, come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Montare 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 Google Cloud CLI o YAML.

gcloud

  • Per aggiungere un montaggio del volume:

    gcloud beta run instances update INSTANCE \
    --add-volume mount-path=MOUNT_PATH,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=READ_ONLY

    Sostituisci quanto segue:

    • INSTANCE: il nome dell'istanza.
    • MOUNT_PATH: il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-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.
    • READ_ONLY: true per rendere il volume di sola lettura o false per consentire le scritture.
  • Se utilizzi più container, specifica prima i volumi, poi i montaggi dei volumi per ogni container:

    gcloud beta run instances update INSTANCE \
      --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 una nuova istanza, salta questo passaggio. Se stai aggiornando un'istanza esistente, scarica la relativa configurazione YAML:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. L'esempio seguente contiene la configurazione YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - name: CONTAINER_NAME
        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 quanto segue:

    • INSTANCE: il nome dell'istanza Cloud Run.
    • CONTAINER_NAME: il nome del container.
    • IMAGE_URL: un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME: qualsiasi nome che vuoi assegnare al volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al montaggio del volume.
    • MOUNT_PATH: il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-volume.
    • IP_ADDRESS: l'indirizzo della condivisione file NFS.
    • NFS_PATH: il percorso della condivisione file NFS che inizia con una barra, ad esempio /example-directory.
    • IS_READ_ONLY: True per rendere il volume di sola lettura o False per consentire le scritture.
  3. Crea o aggiorna l'istanza utilizzando il comando seguente:

    gcloud beta run instances replace instance.yaml

Risoluzione dei problemi relativi a NFS

Se riscontri problemi, controlla quanto segue:

  • L'istanza Cloud Run è connessa 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 deve scrivere dati, assicurati che le autorizzazioni di condivisione NFS siano configurate per consentire le scritture dall'utente del container.

Tempo di avvio del container e montaggi 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, l'istanza Cloud Run non verrà avviata.

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'istanza Cloud Run non verrà avviata.

Caratteristiche delle prestazioni di 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 scaricati nelle seguenti circostanze:

  • L'applicazione scarica esplicitamente i dati dei file utilizzando sync(2), msync(2) o fsync(3).
  • L'applicazione chiude un file con close(2).
  • La pressione della memoria impone il recupero delle risorse di memoria di sistema.

Per ulteriori informazioni, consulta la documentazione di Linux su NFS.

Cancellare e rimuovere volumi e montaggi dei volumi

Puoi cancellare tutti i volumi e i montaggi oppure rimuovere singoli volumi e montaggi dei volumi.

Cancellare tutti i volumi e i montaggi dei volumi

Per cancellare tutti i volumi e i montaggi dei volumi dall'istanza a container singolo, esegui questo comando:

gcloud beta run instances update INSTANCE \
    --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 dei volumi, utilizza i remove-volume e remove-volume-mount flag:

gcloud beta run instances update INSTANCE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH