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.
Unzulässige Pfade
Mit Cloud Run können Sie kein Volume unter /dev
, /proc
oder /sys
oder in deren Unterverzeichnissen bereitstellen.
Beschränkungen
Damit Ihr Container in ein NFS-Volume schreiben kann, muss er 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
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 Ihr Cloud Run-Worker-Pool mit diesem VPC-Netzwerk verbunden ist. Wenn Sie noch keinen NFS-Server haben, erstellen Sie einen, indem Sie eine Filestore-Instanz erstellen.
- Ihr Cloud Run-Worker-Pool ist mit dem VPC-Netzwerk verbunden, in dem Ihr NFS-Server ausgeführt wird. Für eine optimale Leistung sollten 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 Firewall-Ausgangsregel zu erstellen, damit Cloud Run Filestore erreichen kann.
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 Ihr Cloud Run-Workerpool mitGoogle 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 Volumetypen an verschiedenen Bereitstellungspfaden bereitstellen.
Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an.
Sie können die Bereitstellung eines NFS-Volumes über die Google Cloud Console, die Google Cloud CLI oder Terraform konfigurieren.
Console
Rufen Sie in der Google Cloud Console Cloud Run auf:
Wählen Sie im Menü Worker-Pools aus und klicken Sie auf Container bereitstellen, um einen neuen Worker-Pool zu konfigurieren. Wenn Sie einen vorhandenen Worker-Pool konfigurieren möchten, klicken Sie auf den Worker-Pool und dann auf Neue Überarbeitung bearbeiten und bereitstellen.
Wenn Sie einen neuen Worker-Pool konfigurieren, füllen Sie die Seite mit den anfänglichen Worker-Pool-Einstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Konfiguration von Worker-Pools zu maximieren.
Klicken Sie auf den Tab Volumes.
- Klicken Sie unter Volumes auf Volume hinzufügen.
- Wählen Sie im Drop-down-Menü Volume-Typ die Option NFS aus.
- 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 Speicherort (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 Tab „Container“, suchen Sie den Container, den Sie bereitstellen möchten, und maximieren Sie die Containerdetails.
- Klicken Sie auf den Tab Volume-Bereitstellungen.
- Klicken Sie auf Volume bereitstellen.
- Wählen Sie das NFS-Volume aus dem Menü aus.
- Geben Sie den Pfad an, unter dem Sie das Volume bereitstellen möchten.
- Klicken Sie auf Volume bereitstellen.
- Klicken Sie auf Fertig.
- Klicken Sie unter Volumes auf Volume hinzufügen.
Klicken Sie auf Erstellen oder Bereitstellen.
gcloud
So fügen Sie ein Volume hinzu und stellen es bereit:
gcloud beta run worker-pools update WORKER_POOL \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Ersetzen Sie Folgendes:
- WORKER_POOL: Der Name Ihres Worker-Pools.
- VOLUME_NAME: Der Name, den Sie Ihrem Volume geben möchten.
- IP_ADDRESS: Der Speicherort der NFS-Dateifreigabe.
- NFS_PATH: Der Pfad zur NFS-Dateifreigabe, beginnend mit einem Schrägstrich, z. B.
/example-directory
. - MOUNT_PATH: Der relative Pfad, unter dem Sie das Volume bereitstellen, z. B.
/mnt/my-volume
.
So stellen Sie Ihr 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 worker-pools update WORKER_POOL \ --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
Terraform
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
launch_stage = "BETA"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
vpc_access {
network_interfaces {
network = "default"
subnetwork = "default"
}
}
volumes {
name = "VOLUME_NAME"
nfs {
server = google_filestore_instance.default.networks[0].ip_addresses[0]
path = "NFS_PATH"
read_only = "IS_READ_ONLY"
}
}
}
}
resource "google_filestore_instance" "default" {
name = "cloudrun-worker-pool"
location = "REGION"
tier = "BASIC_HDD"
file_shares {
capacity_gb = 1024
name = "share1"
}
networks {
network = "default"
modes = ["MODE_IPV4"]
}
}
Ersetzen Sie Folgendes:
- WORKER_POOL: der Name des Worker-Pools.
- REGION: die Google Cloud Region, z. B.
europe-west1
. - IMAGE_URL: Ein Verweis auf das Container-Image, das den Worker-Pool enthält, z. B.
us-docker.pkg.dev/cloudrun/container/worker-pool:latest
. - VOLUME_NAME: Der Name Ihres Volumes. 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
. - NFS_PATH: Der Pfad zur NFS-Dateifreigabe.
- IS_READ_ONLY:
True
, um das Volume schreibgeschützt zu machen, oderFalse
, um Schreibvorgänge zuzulassen.
Konfiguration der Umgebungsvariablen für den Worker-Pool ansehen
Rufen Sie in der Google Cloud Console Cloud Run auf:
Klicken Sie auf Worker-Pools, um die Liste der bereitgestellten Worker-Pools aufzurufen.
Klicken Sie auf den Worker-Pool, den Sie untersuchen möchten, um den zugehörigen Detailbereich aufzurufen.
Klicken Sie auf den Tab Container, um die Containerkonfiguration des Worker-Pools aufzurufen.
Fehlerbehebung bei NFS
Wenn Probleme auftreten, prüfen Sie Folgendes:
- Ihr Cloud Run-Worker-Pool 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.
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 der Cloud Run-Worker-Pool 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 über NFS länger als 30 Sekunden dauert, kann der Cloud Run-Worker-Pool nicht gestartet werden.
NFS-Leistungsmerkmale
Wenn Sie mehrere NFS-Volumes erstellen, werden alle Volumes parallel gemountet.
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 unter den folgenden Umständen geleert:
- Ihre Anwendung leert Dateidaten explizit mit sync(2), msync(2) oder fsync(3).
- Ihre Anwendung schließt eine Datei mit close(2).
- Arbeitsspeicherdruck führt zur Rückgewinnung von Systemspeicherressourcen.
Weitere Informationen finden Sie in der Linux-Dokumentation zu NFS.
Laufwerke und Bereitstellungspunkte 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 Ihrem Worker-Pool mit einem einzelnen Container zu entfernen:
gcloud beta run worker-pools update WORKER_POOL \ --clear-volumes --clear-volume-mounts
Wenn Sie mehrere Container haben, folgen Sie den Sidecars-CLI-Konventionen, um Volumes und Volume-Bereitstellungen zu löschen:
gcloud beta run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Einzelne Volumes und Volume-Bereitstellungen entfernen
Wenn Sie ein Volume entfernen möchten, müssen Sie auch alle Volume-Mounts 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 worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH