In-Memory-Volumes (Dienste)

Auf dieser Seite wird beschrieben, wie Sie ein dediziertes In-Memory-Volume konfigurieren, das Sie für Datei-Lese- und Schreibvorgänge verwenden können.

Dieses Feature unterscheidet sich vom integrierten In-Memory-Dateisystem von Cloud Run, das den von In-Memory-Datei-Schreibvorgängen verbrauchten Arbeitsspeicher nicht begrenzt. Mit In-Memory-Volume können Sie den Umfang des Speichers begrenzen, der verbraucht werden kann.

Verhalten

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, das so lange besteht, wie diese Instanz ausgeführt wird. Wenn die Instanz nicht mehr ausgeführt wird, werden die Daten im Volume endgültig gelöscht.

Wenn Sie eine Begrenzung für ein In-Memory-Volume angeben und diese Begrenzung beim Schreiben in das Volume überschreiten, erhalten Sie eine Fehlermeldung aufgrund fehlenden Speichers, die Sie verarbeiten können, und die Instanz wird weiterhin ausgeführt. Wenn Sie keine Begrenzung für die Volume-Größe angeben und dann beim Schreiben in das Volume die Begrenzung für den Instanzspeicher überschreiten, stürzt die Instanz ab.

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

Anwendungsfälle

Zu den Anwendungsfällen für ein In-Memory-Volume gehören die Zuweisung von temporärem Speicherplatz oder eine Prüfpunktausführung für eine lange Berechnung, um Abstürze zu verhindern.

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.

Wenn Sie ein Limit für die Speichergröße für das Volume angeben, wird der Arbeitsspeicher aus dem Arbeitsspeicher zugewiesen, der von allen einzelnen Containern in der Instanz verwendet wird, die auf dieses Volume zugreifen. Wenn Sie eine speicherinterne Volume-Größe angeben, die größer ist als die Summe des gesamten von den Containern in der Instanz verwendeten Arbeitsspeichers, verwendet das Volume standardmäßig die Gesamtsumme, die von den Containern verwendet wird.

Wenn Sie keine Speichergrößenbegrenzung für ein Volume angeben, können Sie die Instanzspeicherbegrenzung möglicherweise überschreiten und die Instanz abstürzen lassen.

Wenn Sie das In-Memory-Volume als freigegebenes Volume in einer Multicontainer-Bereitstellung verwenden, ohne ein Speichergrößenbegrenzung anzugeben, wird die Hälfte des gesamten verfügbaren Instanzspeichers dem freigegebenen Volume zugewiesen. Beispiel: emptyDir-Volume-Größe = [Speicher (Container A) + Speicher (Container B) + Speicher (Container N)]/2.

Console

  1. Öffnen Sie Cloud Run.

  2. Klicken Sie auf den Dienst, den Sie konfigurieren möchten.

  3. Klicken Sie auf den Tab YAML.

  4. Konfigurieren Sie die Attribute volumeMounts und volumes so:

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
        name: SERVICE
      spec:
        template:
          metadata:
          spec:
            containers:
            - image: IMAGE_URL
              volumeMounts:
              - mountPath: PATH
                name: VOLUME_NAME
            volumes:
            - name: VOLUME_NAME
              emptyDir:
                sizeLimit: SIZE_LIMIT
                medium: Memory

    Ersetzen

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes.
    • 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 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH durch den relativen Pfad zum Volume, z. B. /cache.
    • VOLUME_NAME durch den Namen, den Sie für das In-Memory-Volume verwenden möchten.
    • 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.
  5. Klicken Sie auf Neue Überarbeitung speichern und bereitstellen.

YAML

Sie können vorhandene Dienstkonfigurationen mit dem Befehl gcloud run services describe --format export herunterladen und aufrufen, was bereinigte Ergebnisse im YAML-Format liefert. Anschließend können Sie die unten beschriebenen Felder ändern und die geänderte YAML-Datei mit dem Befehl gcloud run services replace hochladen. Achten Sie darauf, dass Sie die Felder nur wie dokumentiert ändern.

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. Konfigurieren Sie die Attribute volumeMounts und volumes so:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    Ersetzen Sie:

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes.
    • 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 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH durch den relativen Pfad zum Volume, z. B. /cache.
    • VOLUME_NAME durch den Namen, den Sie für das In-Memory-Volume verwenden möchten.
    • 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 run services replace service.yaml