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
Rufen Sie in der Google Cloud Console Cloud Run auf.
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.
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.
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 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
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
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 durchFalse
, um Schreibvorgänge zuzulassen.
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.