NFS-Volume-Bereitstellungen für Instanzen konfigurieren

Auf dieser Seite wird beschrieben, 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.

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.

Beschränkungen

  • Cloud Run unterstützt keine NFS-Sperren. NFS-Volumes werden automatisch im Nicht-Sperrmodus bereitgestellt.
  • Nicht zulässige Pfade: Mit Cloud Run können Sie kein Volume unter /dev, /proc oder /sys oder in deren Unterverzeichnissen bereitstellen.

Hinweis

Wenn Sie einen NFS-Server als Volume in Cloud Run bereitstellen möchten, benötigen Sie Folgendes:

  • 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 Ihre Cloud Run-Instanz mit diesem VPC-Netzwerk verbunden ist. Wenn Sie noch keinen NFS-Server haben, erstellen Sie eine Filestore-Instanz, indem Sie eine Filestore-Instanz erstellen.
  • Ihre Cloud Run-Instanz ist mit dem VPC-Netzwerk verbunden, in dem Ihr NFS-Server ausgeführt wird. Verwenden Sie für eine optimale Leistung Direct VPC anstelle von VPC-Connectors.
  • 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 erreichen kann.
  • Legen Sie die Berechtigungen für Ihre Remote-NFS-Dateifreigabe so fest, dass der Nutzer des Containers darauf zugreifen kann. Standardmäßig bietet Filestore allen Nutzern Lesezugriff, beschränkt den Schreibzugriff jedoch auf den Root-Nutzer (uid 0). Wenn Ihr Container Schreibzugriff benötigt und nicht als Root-Nutzer ausgeführt wird, müssen Sie einen verbundenen Client (der als Root ausgeführt wird) verwenden, um die Freigabeberechtigungen zu ändern. Mit dem Befehl chown können Sie beispielsweise den Inhaber der Dateien oder Verzeichnisse in die spezifische Nutzer-ID ändern, unter der Ihr Container ausgeführt wird.

Erforderliche Rollen

Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihre Cloud Run-Instanz mit Google Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.

NFS-Volume bereitstellen

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

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

Konfigurieren Sie eine NFS-Volume-Bereitstellung mit der Google Cloud CLI oder YAML.

gcloud

  • So fügen Sie eine Volume-Bereitstellung hinzu:

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

    Ersetzen Sie Folgendes:

    • INSTANCE: Der Name der Instanz.
    • MOUNT_PATH: Der relative Pfad, unter dem Sie das Volume bereitstellen, z. B. /mnt/my-volume.
    • IP_ADDRESS: Der Speicherort der NFS-Dateifreigabe.
    • NFS_PATH: Der Pfad zur NFS-Dateifreigabe, beginnend mit einem Schrägstrich, z. B. /example-directory.
    • READ_ONLY: true, um das Volume schreibgeschützt zu machen, oder false , um Schreibvorgänge zuzulassen.
  • Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an.

    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. Wenn Sie eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Das folgende Beispiel enthält die YAML-Konfiguration:

    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

    Ersetzen Sie Folgendes:

    • INSTANCE: Der Name Ihrer Cloud Run-Instanz.
    • CONTAINER_NAME: Der Name des Containers.
    • IMAGE_URL: Ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME: Ein beliebiger Name für Ihr Volume. Der Wert VOLUME_NAME wird verwendet, um das Volume der Volume-Bereitstellung zuzuordnen.
    • MOUNT_PATH: Der relative Pfad, unter dem Sie das Volume bereitstellen, z. B. /mnt/my-volume.
    • IP_ADDRESS: Die Adresse der NFS-Dateifreigabe.
    • NFS_PATH: Der Pfad zur NFS-Dateifreigabe, beginnend mit einem Schrägstrich, z. B. /example-directory.
    • IS_READ_ONLY: True, um das Volume schreibgeschützt zu machen, oder False, um Schreibvorgänge zuzulassen.
  3. Erstellen oder aktualisieren Sie die Instanz mit dem folgenden Befehl:

    gcloud beta run instances replace instance.yaml

Fehlerbehebung bei NFS

Wenn Probleme auftreten, prüfen Sie Folgendes:

  • Ihre Cloud Run-Instanz 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 Ihr Container Daten schreiben muss, prüfen Sie, ob die Berechtigungen für die NFS-Freigabe so konfiguriert sind, dass Schreibvorgänge vom Nutzer Ihres Containers zugelassen werden.

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. Ihr Container wird nur gestartet, wenn NFS erfolgreich bereitgestellt wurde.

NFS stellt ein Volume erst dann bereit, wenn eine Verbindung zum Server hergestellt und ein Dateihandle abgerufen wurde. Wenn Cloud Run keine Verbindung zum Server herstellen kann, kann die Cloud Run-Instanz nicht gestartet werden.

Netzwerkverzögerungen können sich auf die Containerstartzeit auswirken, da für Cloud Run insgesamt 30 Sekunden Zeit für die Durchführung aller Bereitstellungen zur Verfügung stehen. Wenn die Bereitstellung mit NFS länger als 30 Sekunden dauert, kann die Cloud Run-Instanz nicht gestartet werden.

NFS-Leistungsmerkmale

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

Da NFS ein Netzwerkdateisystem ist, unterliegt es Bandbreitenbeschränkungen. 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 unter folgenden Umständen 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).
  • Speicherlast erzwingt die Freigabe von Systemspeicherressourcen.

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

Volumes und Volume-Bereitstellungen löschen und entfernen

Sie können alle Volumes und Bereitstellungen löschen oder einzelne Volumes und Volume-Bereitstellungen entfernen.

Alle Volumes und Volume-Bereitstellungen löschen

Führen Sie den folgenden Befehl aus, um alle Volumes und Volume-Bereitstellungen aus Ihrer Einzelcontainerinstanz zu löschen:

gcloud beta run instances update INSTANCE \
    --clear-volumes \
    --clear-volume-mounts

Einzelne Volumes und Volume-Bereitstellungen entfernen

Wenn Sie ein Volume entfernen möchten, müssen Sie auch alle Volume-Bereitstellungen entfernen, die dieses Volume verwenden.

Verwenden Sie die Flags remove-volume und remove-volume-mount, um einzelne Volumes oder Volume-Bereitstellungen zu entfernen:

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