Auf dieser Seite wird gezeigt, wie Sie mithilfe von Cloud Run Volume-Bereitstellungen einen Cloud Storage-Bucket als Speicher-Volume bereitstellen.
Wenn Sie den Bucket als Volume in Cloud Run bereitstellen, wird der Inhalt des Buckets als Dateien im Dateisystem des Containers angezeigt. Nachdem Sie den Bucket als Volume bereitgestellt haben, greifen Sie so auf den Bucket zu, als wäre er ein Verzeichnis in Ihrem lokalen Dateisystem. Dabei verwenden Sie die Dateisystemvorgänge und Bibliotheken Ihrer Programmiersprache anstelle der Google API-Clientbibliotheken.
Speicheranforderungen
Cloud Storage-Volume-Bereitstellungen verwenden den Cloud Run-Containerarbeitsspeicher für die folgenden Aktivitäten:Für das gesamte Cloud Storage FUSE-Caching verwendet Cloud Run standardmäßig die Statistik-Cache-Einstellung mit einer Lebensdauer (Time-to-Live, TTL) von 60 Sekunden. Die Standardmaximalgröße des Statistik-Caches beträgt 32 MB, die Standardmaximalgröße des Typ-Caches 4 MB.
Beim Lesen verbraucht Cloud Storage FUSE auch anderen Arbeitsspeicher als Statistik- und Typ-Caches, z. B. ein 1-MiB-Array für jede gelesene Datei und für Goroutines.
Beim Schreiben in Cloud Storage wird die gesamte Datei im Cloud Run-Arbeitsspeicher bereitgestellt, bevor die Datei in Cloud Storage geschrieben wird.
Beschränkungen
Da Cloud Run für diese Bereitstellung Cloud Storage FUSE verwendet, müssen Sie beim Bereitstellen eines Cloud Storage-Buckets als Volume einige Dinge beachten:
- Cloud Storage FUSE bietet keine Nebenläufigkeitserkennung für mehrere Schreibvorgänge (Dateisperre) in derselben Datei. Wenn mehrere Schreibvorgänge versuchen, eine Datei zu ersetzen, wird der letzte Schreibvorgang ausgeführt und alle vorherigen gehen verloren.
- Cloud Storage FUSE ist kein vollständig POSIX-konformes Dateisystem. Weitere Informationen finden Sie in der Dokumentation zu Cloud Storage FUSE.
Unzulässige Pfade
Mit Cloud Run können Sie kein Volume unter /dev
, /proc
und /sys
oder in deren Unterverzeichnissen bereitstellen.
Hinweise
Sie benötigen einen Cloud Storage-Bucket, der als Volume bereitgestellt wird.
Informationen zur optimalen Lese-/Schreibleistung für Cloud Storage finden Sie unter Netzwerkbandbreitenleistung von Cloud Storage FUSE optimieren.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren von Cloud Storage-Volume-Bereitstellungen benötigen:
-
Rolle Cloud Run Entwickler (
roles/run.developer
) im Cloud Run-Job -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für die Dienstidentität
Bitten Sie Ihren Administrator, der Dienstidentität die folgende IAM-Rolle zuzuweisen, um die Berechtigungen zu erhalten, die Ihre Dienstidentität benötigt, um auf die Datei und den Cloud Storage-Bucket zuzugreifen:
- Storage-Administrator (
roles/storage.admin
)
Weitere Informationen zu Cloud Storage-Rollen und -Berechtigungen finden Sie unter IAM für Cloud Storage.
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 Service 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.
Cloud Storage-Volume bereitstellen
Sie können mehrere Buckets unter verschiedenen Bereitstellungspfaden bereitstellen. Sie können ein Volume auch für mehrere Container bereitstellen, wobei Sie denselben oder unterschiedliche Bereitstellungspfade für die verschiedenen Containern nutzen können.
Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an.
Volume-Bereitstellungen erfordern die Ausführungsumgebung der zweiten Generation. Cloud Run wählt automatisch die Ausführungsumgebung der zweiten Generation für Ihren Dienst aus, wenn keine Ausführungsumgebung explizit konfiguriert wurde.
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.
- Klicken Sie auf Volume hinzufügen.
- Wählen Sie im Drop-down-Menü Volume-Typ den Cloud Storage-Bucket als Volume-Typ aus.
- Geben Sie im Feld Names des Volume den Namen ein, den Sie für das Volume verwenden möchten.
- Suchen Sie nach dem Cloud Storage-Bucket, der für das Volume verwendet werden soll, und wählen Sie ihn aus, oder erstellen Sie optional einen neuen Bucket.
- Wenn der Bucket schreibgeschützt sein soll, klicken Sie das Kästchen "Schreibgeschützt" an.
- Klicken Sie auf Fertig.
- Klicken Sie auf den Tab Volume-Bereitstellungen.
- Klicken Sie auf Volume bereitstellen.
- Wählen Sie das Speicher-Volume aus dem Menü aus.
- Geben Sie den Pfad an, unter dem Sie das Volume bereitstellen möchten.
- Klicken Sie auf Fertig.
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=cloud-storage,bucket=BUCKET_NAME \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Ersetzen Sie:
- SERVICE durch den Namen des 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.
- BUCKET_NAME durch den Namen Ihres Cloud Storage-Buckets.
So stellen Sie das Volume als schreibgeschütztes Volume bereit:
--add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,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=cloud-storage,bucket=BUCKET_NAME \ --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
Nehmen Sie die erforderlichen Änderungen vor.
apiVersion: serving.knative.dev/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 csi: driver: gcsfuse.run.googleapis.com readOnly: IS_READ_ONLY volumeAttributes: bucketName: BUCKET_NAME
Ersetzen
- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latest
. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - 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.
- IS_READ_ONLY durch
True
, um das Volume schreibgeschützt zu machen, oder durchFalse
, um Schreibvorgänge zuzulassen. - BUCKET_NAME durch den Namen des Cloud Storage-Buckets.
- IMAGE_URL durch einen Verweis auf das Container-Image, z. B.
Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
Lesen und Schreiben auf ein 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 im Volume /mnt/my-volume
gespeichert ist:
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");
Einstellungen für Volume-Bereitstellungen ansehen
So rufen Sie die aktuellen Einstellungen für Volume-Bereitstellungen für Ihren Cloud Run-Dienst auf:
Console
Rufen Sie in der Google Cloud Console Cloud Run auf.
Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.
Klicken Sie auf den Tab Überarbeitungen.
Im Detailbereich auf der rechten Seite ist die Einstellung für Volume-Bereitstellungen auf dem Tab Volumes aufgelistet.
gcloud
Verwenden Sie den folgenden Befehl:
gcloud run services describe SERVICE
Suchen Sie in der zurückgegebenen Konfiguration nach der Einstellung für Volume-Bereitstellungen.
Netzwerkbandbreitenleistung von Cloud Storage FUSE optimieren
Für eine bessere Lese- und Schreibleistung verbinden Sie Ihren Cloud Run-Dienst mithilfe von Direct VPC mit einem VPC-Netzwerk und leiten Sie den gesamten ausgehenden Traffic durch Ihr VPC-Netzwerk. Sie haben dazu folgende Möglichkeiten:
- Aktivieren Sie den privaten Google-Zugriff und achten Sie darauf, den Parameter
vpc-egress
aufall-traffic
festzulegen. - Verwenden Sie eine der Optionen, die in Beispiel 2 Interner Traffic zu einer Google API auf der Seite mit Best Practices für Netzwerke beschrieben sind.
Containerstartzeit und Cloud Storage FUSE-Bereitstellungen
Wenn Sie Cloud Storage FUSE 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 Cloud Storage FUSE erfolgreich bereitgestellt wurde.
Cloud Storage FUSE stellt ein Volume erst dann bereit, wenn eine Verbindung zu Cloud Storage hergestellt wurde. Netzwerkverzögerungen können sich auf die Containerstartzeit auswirken. Wenn der Verbindungsversuch fehlschlägt, kann Cloud Storage FUSE nicht bereitgestellt und der Cloud Run-Dienst nicht gestartet werden. Wenn die Bereitstellung mit Cloud Storage FUSE länger als 30 Sekunden dauert, startet der Cloud Run-Dienst nicht, da für Cloud Run insgesamt 30 Sekunden Zeit für die Durchführung aller Bereitstellungen zur Verfügung stehen.
Leistungsmerkmale von Cloud Storage FUSE
Wenn Sie zwei Volumes definieren, die jeweils auf einen anderen Bucket verweisen, werden zwei Cloud Storage FUSE-Prozesse gestartet. Die Bereitstellungen und Prozesse erfolgen parallel.
Vorgänge mit Cloud Storage FUSE sind von der Netzwerkbandbreite betroffen, da Cloud Storage FUSE über die Cloud Storage API mit Cloud Storage kommuniziert. Einige Vorgänge wie das Auflisten der Inhalte eines Buckets können langsam sein, wenn die Netzwerkbandbreite niedrig ist. Ähnlich kann das Lesen einer großen Datei einige Zeit in Anspruch nehmen, da dies auch von der Netzwerkbandbreite abhängt.
Wenn Sie in einen Bucket schreiben, stellt Cloud Storage FUSE das Objekt vollständig im Arbeitsspeicher bereit. Das Schreiben großer Dateien ist also durch die Menge an Arbeitsspeicher begrenzt, die der Containerinstanz zur Verfügung steht. Das maximale Containerarbeitsspeicherlimit beträgt 32 GiB.
Die Schreibvorgänge werden nur dann in den Bucket übertragen, wenn Sie einen close
oder fsync
ausführen. Das vollständige Objekt wird dann in den Bucket hochgeladen oder noch einmal hochgeladen. Die einzige Ausnahme, bei der ein Objekt vollständig noch einmal in den Bucket hochgeladen wird, ist der Fall einer Datei mit angehängtem Inhalt, die mindestens 2 MiB groß ist.
Weitere Informationen finden Sie in den folgenden Ressourcen: