In-Memory-Volume-Bereitstellungen für Jobs

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. Dieses Feature unterscheidet sich vom integrierten In-Memory-Dateisystem von Cloud Run.

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.
  • Ein In-Memory-Volume zwischen verschiedenen Containern in einer Cloud Run-Instanz teilen.

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. Die Instanz kann diesen Fehler beheben und weiterhin 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 das In-Memory-Volume den für Ihre Container konfigurierten Arbeitsspeicher. 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 sie automatisch auf die Hälfte der Gesamtgröße aller Container in Ihrem Job oder Dienst festgelegt. Beispiel: emptyDir-Volume-Größe = [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. In diesem Fall überschreitet der Container, wenn er weiterhin Speicher in das Volume schreibt, die zugewiesene Speichergröße und stürzt ab, bevor das Größenlimit des Volumes erreicht wird.

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.

Volume-Inhaberschaft variiert je nach Ausführungsumgebung und Bereitstellungstyp

Wenn Sie ein Volume bereitstellen, unterscheidet sich die Identität der Dateien und Verzeichnisse je nach Ausführungsumgebung der Arbeitslast und ob die Bereitstellung aus einem oder mehreren Containern besteht.

In der Ausführungsumgebung der ersten Generation, in der Sie einen einzelnen Container bereitstellen, gehört das Volume der Identität, die für den Container verwendet wird. In allen anderen Fällen gehört das Volume dem Root. Dazu zählen:

  • Ausführungsumgebung der ersten Generation, in der Sie mehrere Container bereitstellen
  • Die Umgebung der zweiten Generation

In-Memory-Volume konfigurieren

Jede Konfigurationsänderung führt zur Erstellung einer neuen Überarbeitung. Für nachfolgende Überarbeitungen gilt automatisch dieselbe Konfigurationseinstellung, sofern Sie sie nicht explizit aktualisieren.

Nachdem Sie ein In-Memory-Volume für Ihren Cloud Run-Dienst 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 endgültig gelöscht.

Befehlszeile

  • So fügen Sie ein Volume hinzu und stellen es bereit:

    gcloud beta run jobs update JOB \
    --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Ersetzen Sie:

    • JOB durch den Namen des Jobs.
    • VOLUME_NAME durch einen beliebigen Namen für das Volume. Der Wert VOLUME_NAME wird verwendet, um das Volume der Volume-Bereitstellung zuzuordnen.
    • MOUNT_PATH durch den relativen Pfad im Container-Dateisystem, in dem Sie dieses Volume bereitstellen möchten, z. B. /cache.
    • SIZE_LIMIT durch 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 jobs update JOB \
    --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

Laden Sie die vorhandene Jobkonfiguration herunter und verwenden Sie den Befehl gcloud run jobs describe --format export, um bereinigte Ergebnisse im YAML-Format zu erhalten. Ändern Sie dann die unten beschriebenen Felder und laden Sie die geänderte YAML-Datei mit dem Befehl gcloud run jobs replace hoch. Achten Sie darauf, dass Sie die Felder nur wie dokumentiert ändern.

  1. So rufen Sie die Konfiguration auf und laden sie herunter:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Konfigurieren Sie die Attribute volumeMounts und volumes so:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory
    

    Ersetzen Sie:

    • 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 Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • VOLUME_NAME durch einen beliebigen Namen für das Volume. Der Wert VOLUME_NAME wird verwendet, um das Volume der Volume-Bereitstellung zuzuordnen.
    • MOUNT_PATH durch den relativen Pfad im Container-Dateisystem, in dem Sie dieses Volume bereitstellen möchten, z. B. /cache.
    • SIZE_LIMIT durch 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.
  3. Ersetzen Sie den Dienst mit dem folgenden Befehl durch die neue Konfiguration:

    gcloud beta run jobs replace job.yaml