NFS-Volume-Bereitstellungen für Dienste konfigurieren

Auf dieser Seite wird gezeigt, wie Sie eine NFS-Dateifreigabe als Volume in Cloud Run bereitstellen. Sie können einen beliebigen NFS-Server verwenden, einschließlich Ihres eigenen NFS-Servers, der lokal oder auf einer Compute Engine-VM gehostet wird. Wenn Sie noch keinen NFS-Server haben, empfehlen wir Filestore, ein vollständig verwaltetes NFS-Angebot von Google Cloud.

Wenn Sie eines der Netzwerkdateisysteme NBD, 9P, CIFS/Samba oder Ceph verwenden möchten, finden Sie entsprechende Informationen unter NBD-, 9P-, CIFS/Samba- und Ceph-Netzwerkdateisysteme verwenden.

Durch das Bereitstellen der NFS-Dateifreigabe als Volume in Cloud Run wird die Dateifreigabe als Dateien im Container-Dateisystem dargestellt. Nachdem Sie die Dateifreigabe als Volume bereitgestellt haben, können Sie mithilfe der Dateisystemvorgänge und Bibliotheken Ihrer Programmiersprache auf diese zugreifen, als wäre es ein Verzeichnis in Ihrem lokalen Dateisystem.

Unzulässige Pfade

Mit Cloud Run können Sie kein Volume unter /dev, /proc und /sys oder in deren Unterverzeichnissen bereitstellen.

Beschränkungen

  • Damit Sie auf ein NFS-Volume schreiben können, muss der Container als Root ausgeführt werden. Wenn Ihr Container nur aus dem Dateisystem liest, kann er als beliebiger Nutzer ausgeführt werden.

  • Cloud Run unterstützt keine NFS-Sperren. NFS-Volumes werden automatisch im Nicht-Sperrmodus bereitgestellt.

Hinweise

Folgendes benötigen Sie, um einen NFS-Server als Volume in Cloud Run bereitzustellen:

  • Ein VPC-Netzwerk, in dem Ihr NFS-Server oder Ihre Filestore-Instanz ausgeführt wird.
  • Einen NFS-Server, der in einem VPC-Netzwerk ausgeführt wird, wobei Ihr Cloud Run-Dienst mit diesem VPC-Netzwerk verbunden ist. Wenn Sie noch keinen NFS-Server haben, erstellen Sie einen durch Erstellen einer Filestore-Instanz.
  • Ihr Cloud Run-Dienst ist mit dem VPC-Netzwerk verbunden, in dem Ihr NFS-Server ausgeführt wird. Die beste Leistung erzielen Sie, wenn Sie Direct VPC anstelle von VPC-Connectors verwenden.
  • Achten Sie bei Verwendung eines vorhandenen Projekts darauf, dass Ihre VPC-Firewall-Konfiguration Cloud Run erlaubt, Ihren NFS-Server zu erreichen. (Wenn Sie mit einem neuen Projekt beginnen, gilt dies standardmäßig.) Wenn Sie Filestore als NFS-Server verwenden, folgen Sie der Filestore-Dokumentation, um eine Firewallregel für ausgehenden Traffic zu erstellen, damit Cloud Run Filestore erreicht.

NFS-Volume bereitstellen

Sie können mehrere NFS-Server, Filestore-Instanzen oder andere Volume-Typen in verschiedenen Bereitstellungspfaden bereitstellen.

Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an.

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Zu Cloud Run

  2. Klicken Sie auf Container bereitstellen und wählen Sie Dienst aus, um einen neuen Dienst zu konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  4. Klicken Sie auf den Tab Volumes.

    Bild

    • Unter Volumes:
      • Klicken Sie auf Volume hinzufügen.
      • Wählen Sie im Drop-down-Menü Volume-Typ die Option NFS als Volume-Typ.
      • Geben Sie im Feld Names des Volume den Namen ein, den Sie für das Volume verwenden möchten.
      • Geben Sie im Feld NFS-Server den Domainnamen oder den Standort (im Format IP_ADDRESS) der NFS-Dateifreigabe ein.
      • Geben Sie im Feld Pfad den Pfad zum NFS-Serververzeichnis ein, das Sie bereitstellen möchten.
      • Klicken Sie auf Fertig.
    • Klicken Sie auf den Container-Tab und maximieren Sie den Container, in dem Sie das Volume bereitstellen, um den Container zu bearbeiten.
    • Klicken Sie auf den Tab Volume-Bereitstellungen.
    • Klicken Sie auf Volume bereitstellen.
      • Wählen Sie im Menü das NFS-Volume aus.
      • Geben Sie den Pfad an, unter dem Sie das Volume bereitstellen möchten.
      • Klicken Sie auf Volume bereitstellen.
  5. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

  • So fügen Sie ein Volume hinzu und stellen es bereit:

    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

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes.
    • VOLUME_NAME durch den Namen, den Sie dem Volume geben möchten.
    • IP_ADDRESS durch den Speicherort der NFS-Dateifreigabe.
    • NFS_PATH durch den Pfad zur NFS-Dateifreigabe, beginnend mit einem Schrägstrich, z. B. /example-directory.
    • MOUNT_PATH durch den relativen Pfad, unter dem Sie das Volume bereitstellen, z. B. /mnt/my-volume.
    • VOLUME_NAME durch einen beliebigen Namen für Ihr Volume. Der Wert VOLUME_NAME wird verwendet, um das Volume der Volume-Bereitstellung zuzuordnen.
  • So stellen Sie das Volume als schreibgeschütztes Volume bereit:

    --add-volume=name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
  • Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an.

    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. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aktualisieren Sie MOUNT_PATH, VOLUME_NAME, IP_ADDRESS und NFS_PATH nach Bedarf. Wenn Sie mehrere Volume-Bereitstellungen haben, sind mehrere dieser Attribute vorhanden.

    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

    Ersetzen

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes
    • MOUNT_PATH durch den relativen Pfad, unter dem Sie das Volume bereitstellen, z. B. /mnt/my-volume.
    • VOLUME_NAME durch einen beliebigen Namen für Ihr Volume. Der Wert VOLUME_NAME wird verwendet, um das Volume der Volume-Bereitstellung zuzuordnen.
    • IP_ADDRESS durch die Adresse der NFS-Dateifreigabe.
    • NFS_PATH durch den Pfad zur NFS-Dateifreigabe, beginnend mit einem Schrägstrich, z. B. /example-directory.
    • IS_READ_ONLY durch True, um das Volume schreibgeschützt zu machen, oder durch False, um Schreibvorgänge zuzulassen.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Lesen und Schreiben auf einem Volume

Wenn Sie das Cloud Run-Feature zur Volume-Bereitstellung verwenden, greifen Sie mit denselben Bibliotheken in Ihrer Programmiersprache auf ein bereitgestelltes Volume zu, mit denen Sie Dateien auf Ihrem lokalen Dateisystem lesen und schreiben.

Dies ist besonders nützlich, wenn Sie einen vorhandenen Container verwenden, der erwartet, dass Daten im lokalen Dateisystem gespeichert werden und ein reguläres Dateisystem für den Zugriff darauf verwendet.

Bei den folgenden Snippets wird von einer Volume-Bereitstellung ausgegangen, bei der mountPath auf /mnt/my-volume gesetzt ist.

Nodejs

Verwenden Sie das Dateisystemmodul, um eine neue Datei zu erstellen oder Anhänge einer vorhandenen Datei im Volume /mnt/my-volume hinzuzufügen:

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

So schreiben Sie in eine Datei, die sich im Volume /mnt/my-volume befindet:

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Verwenden Sie das Paket os, um eine neue Datei im Volume /mnt/my-volume zu erstellen

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Verwenden Sie die Klasse Java.io.File, um eine Logdatei im Volume /mnt/my-volume zu erstellen:

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Fehlerbehebung bei NFS

Prüfen Sie bei Problemen Folgendes:

  • Ihr Cloud Run-Dienst ist mit dem VPC-Netzwerk verbunden, in dem sich der NFS-Server befindet.
  • Es gibt keine Firewallregeln, die verhindern, dass Cloud Run den NFS-Server erreicht.
  • Wenn der Container auf Ihren NFS-Server schreibt, stellen Sie sicher, dass er als Root ausgeführt wird.

Containerstartzeit und NFS-Volume-Bereitstellungen

Wenn Sie NFS-Volume-Bereitstellungen verwenden, kann sich der Startzeitpunkt Ihres Cloud Run-Containers leicht verlängern, da die Volume-Bereitstellung vor dem Start der Container gestartet wird. Der Container wird nur gestartet, wenn NFS erfolgreich bereitgestellt wurde.

Hinweis: NFS kann ein Volume erst dann bereitstellen, wenn eine Verbindung zum Server hergestellt und ein Dateihandle abgerufen wurde. Netzwerkverzögerungen können sich auf die Containerstartzeit auswirken. Wenn Cloud Run keine Verbindung zum Server herstellen kann, wird der Cloud Run-Dienst nicht gestartet. Wenn das Bereitstellen von NFS länger als 30 Sekunden dauert, wird der Cloud Run-Dienst nicht gestartet, da Cloud Run insgesamt 30 Sekunden Zeit für alle Bereitstellungen hat.

NFS-Leistungsmerkmale

Wenn Sie mehrere NFS-Volumes erstellen, werden alle Volumes parallel bereitgestellt.

Da NFS ein Netzwerkdateisystem ist, unterliegt es Bandbreitenbeschränkungen und der Zugriff auf das Dateisystem kann durch eine begrenzte Bandbreite beeinträchtigt werden.

Wenn Sie auf Ihr NFS-Volume schreiben, wird der Schreibvorgang im Cloud Run-Speicher gespeichert, bis die Daten gelöscht werden. Daten werden in den folgenden Fällen gelöscht:

  • Ihre Anwendung löscht Dateidaten explizit mit sync(2), msync(2) oder fsync(3).
  • Ihre Anwendung schließt eine Datei mit close(2).
  • Bei Arbeitsspeicherdruck werden Systemspeicherressourcen zurückgefordert.

Weitere Informationen finden Sie in der Linux-Dokumentation zu NFS.