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.
Console
Wechseln Sie in der Google Cloud Console zur Seite "Cloud Run-Jobs":
Klicken Sie auf den Tab Jobs und füllen Sie die Seite mit den anfänglichen Jobeinstellungen wie gewünscht aus, wenn Sie einen neuen Job konfigurieren. Klicken Sie auf den Job und dann auf Bearbeiten, wenn Sie einen vorhandenen Job konfigurieren.
Klicken Sie auf Container, Variablen und Secrets, Verbindungen, Sicherheit, um die Seite mit den Jobattributen zu maximieren.
Klicken Sie auf den Tab Volumes.
- 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.
- Unter Volumes:
Klicken Sie auf Erstellen oder Aktualisieren.
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
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
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
- 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 durchFalse
, um Schreibvorgänge zuzulassen.
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.