NFS-Volume-Bereitstellungen für Jobs 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 Ihr 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 erreichen kann.

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.

gcloud

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

    gcloud beta run jobs update JOB \
    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Ersetzen Sie:

    • JOB durch den Namen des Jobs.
    • 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.
    • MOUNT_PATH durch den Pfad innerhalb des Containerdateisystems, in dem Sie dieses Volume bereitstellen möchten.
  • 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 beta run jobs update JOB \
    --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 Job erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Job aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run jobs describe JOB_NAME --format export > job.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: Job
    metadata:
      name: JOB_NAME
    spec:
      metadata:
        annotations:
          run.googleapis.com/launch-stage: BETA
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          template:
            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 Sie

    • JOB durch den Namen Ihres Cloud Run-Jobs.
    • 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.
    • IS_READ_ONLY durch True, um das Volume schreibgeschützt zu machen, oder durch False, um Schreibvorgänge zuzulassen.
  3. Ersetzen Sie den Dienst mit dem folgenden Befehl durch die neue Konfiguration:

    gcloud beta run jobs replace job.yaml

Lesen und Schreiben in 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.

Node.js

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

Schreiben Sie in eine Datei auf dem Volume /mnt/my-volume:

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.