Auf dieser Seite wird beschrieben, wie Sie ein dediziertes In-Memory-Volume konfigurieren, das Sie mit Cloud Run-Volume-Bereitstellungen für Dateilese- und -Schreibvorgänge verwenden können. Diese Funktion unterscheidet sich vom integrierten In-Memory-Dateisystem von Cloud Run.
Wenn Sie das In-Memory-Volume in Cloud Run bereitstellen, wird es als Dateien im Container-Dateisystem angezeigt. Nachdem Sie das In-Memory-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.
Sie können In-Memory-Volumes für Folgendes verwenden:
- Die Größe des In-Memory-Volume begrenzen. Wenn Sie die Größe eines Volumes begrenzen, schlagen Schreibvorgänge auf einem vollen Volume fehl. Das ist besser, als dass Cloud Run Instanzen beendet, weil ein Volumen zu viel Arbeitsspeicher verbraucht.
Verhalten
Beim Erstellen eines In-Memory-Volumes empfehlen wir, ein Größenlimit anzugeben. Wenn das Volume die Größenbeschränkung erreicht, schlagen weitere Schreibvorgänge mit einem Fehler aufgrund unzureichenden Speichers fehl. Ihre Instanz kann diesen Fehler beheben und weiter ausgeführt werden.
Beachten Sie, dass die Größenbeschränkung nur ein Limit ist: Sie weist Ihrem In-Memory-Volume keinen zusätzlichen Speicherplatz zu. Stattdessen verbraucht Ihr In-Memory-Volume den Arbeitsspeicher, den Sie für Ihre Container konfiguriert haben. Wenn Sie mehrere Container bereitstellen, zählt der von jedem Schreibvorgang in das Volume verwendete Speicher als Arbeitsspeichernutzung für den Container, der die Daten geschrieben hat.
Wenn Sie keine Größenbeschränkung angeben, wird diese automatisch auf die Hälfte der Gesamtgröße aller Container in Ihrer Instanz festgelegt. Beispiel: Größe des emptyDir-Volumes = [Speicher (Container A) + Speicher (Container B) + Speicher (Container N)]/2.
Dieses Standardverhalten kann dazu führen, dass das Größenlimit des In-Memory-Volumes höher ist als der einigen Ihrer Container zugewiesene Arbeitsspeicher. Dies kann zu unerwarteten Abstürzen führen, wenn ein einzelner Container seinen zugewiesenen Arbeitsspeicher überschreitet, während er versucht, weitere Daten in das Volume zu schreiben, obwohl das Größenlimit des Volumes noch nicht erreicht ist.
Das Festlegen einer Größenbeschränkung ist optional. Wir empfehlen es dennoch, um zu verhindern, dass den Container zu wenig Arbeitsspeicher zur Verfügung steht und es zu einem Absturz kommt.
Unzulässige Pfade
Mit Cloud Run können Sie kein Volume unter /dev, /proc und /sys oder in deren Unterverzeichnissen bereitstellen.
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 Ihre Cloud Run-Instanz 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.
In-Memory-Volume konfigurieren
Nachdem Sie ein In-Memory-Volume für Ihre Cloud Run-Instanz konfiguriert haben, wird für jede gestartete Cloud Run-Instanz ein leeres Volume erstellt. Dieses Volume besteht, solange diese Instanz ausgeführt wird. Wenn die Instanz nicht mehr ausgeführt wird, werden die Daten im Volume dauerhaft gelöscht.
Konfigurieren Sie eine In-Memory-Volume-Bereitstellung mit der Google Cloud CLI oder YAML.
gcloud
So stellen Sie ein Volume bereit:
gcloud beta run instances update INSTANCE \ --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT
Ersetzen Sie Folgendes:
- INSTANCE: Der Name der Instanz.
- MOUNT_PATH: Der relative Pfad im Container
-Dateisystem, in dem Sie dieses Volume bereitstellen möchten, z. B.
/mnt/my-volume. - SIZE_LIMIT: Die Speicherbegrenzung, die Sie dem Volume zuweisen möchten, in
MiB oder GiB (angegeben als Mi oder Gi), z. B.
500Mi. Diese Begrenzung muss kleiner als der für Ihre Container angegebene Gesamtspeicher sein.
Wenn Sie mehrere Container verwenden, geben Sie zuerst die Volumes und dann die Volume-Bereitstellungen pro Container an:
gcloud beta run instances update INSTANCE \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --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 eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Das folgende Beispiel enthält die YAML-Konfiguration:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: containers: - name: CONTAINER_NAME image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME emptyDir: medium: Memory sizeLimit: SIZE_LIMIT
Ersetzen Sie Folgendes:
- INSTANCE: Der Name Ihrer Cloud Run-Instanz.
- CONTAINER_NAME: Der Name des Containers.
IMAGE_URL: Ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest.- VOLUME_NAME: Ein beliebiger Name für Ihr Volume. 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. - SIZE_LIMIT: Die Speicherbegrenzung, die Sie dem Volume zuweisen möchten, in
MiB oder GiB (angegeben als Mi oder Gi), z. B.
500Mi. Diese Begrenzung muss kleiner als der für Ihre Container angegebene Gesamtspeicher sein.
Erstellen oder aktualisieren Sie die Instanz mit dem folgenden Befehl:
gcloud beta run instances replace instance.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.
In den folgenden Snippets wird davon ausgegangen, dass ein Volume bereitgestellt wird, bei dem mountPath auf /mnt/my-volume festgelegt 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");Volumes und Volume-Bereitstellungen 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 Ihrer Einzelcontainerinstanz zu löschen:
gcloud beta run instances update INSTANCE \ --clear-volumes \ --clear-volume-mounts
Einzelne Volumes und Volume-Bereitstellungen entfernen
Wenn Sie ein Volume entfernen möchten, müssen Sie auch alle Volume-Bereitstellungen 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 instances update INSTANCE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH