Ressourcenverfügbarkeit mithilfe von VM-Reservierungen sicherstellen

In diesem Dokument wird erläutert, wie Jobs erstellt werden, die mit reservierten Ressourcen ausgeführt werden.

Reservierungen sind ein Feature von Compute Engine. Eine Reservierung bietet ein sehr hohes Maß an Sicherheit beim Erhalt von Kapazität für eine oder mehrere VMs mit der angegebenen Hardwarekonfiguration. Für eine Reservierung für eine VM fallen die Kosten für diese VM ab dem Erstellen bis zum Löschen der Reservierung an. Während Sie diese VM nutzen, entsprechen die Gesamtkosten jedoch einer VM ohne Reservierung.

Im Allgemeinen sind Reservierungen nützlich, wenn die Kapazitätsverfügbarkeit von entscheidender Bedeutung ist oder um Fehler beim Abrufen von Ressourcen zu vermeiden. Erwägen Sie insbesondere für Batch die Verwendung dedizierter Reservierungen, um die Zeit für die Planung von Jobs zu minimieren, oder versuchen Sie, vorhandene Reservierungen zu nutzen, wenn sie nicht genutzt werden. Wenn Sie zu wenig genutzte Reservierungen haben, z. B. für Rabatte für zugesicherte Nutzung erforderliche Reservierungen, können Sie Jobs so konfigurieren, dass sie versucht werden, sie zu nutzen, während sie nicht zur Optimierung der anfallenden Kosten verwendet werden.

Weitere Informationen zu Reservierungen finden Sie in der Compute Engine-Dokumentation zu Reservierungen.

Hinweise

Einschränkungen

Zusätzlich zu den allgemeinen Einschränkungen für Reservierungen gelten für Batch die folgenden Einschränkungen:

  • Die VMs eines Jobs können keine freigegebenen Reservierungen nutzen.
  • Die VMs eines Jobs können keine Reservierungen nutzen, wenn entweder eine Richtlinie für kompakte Platzierung angegeben ist.

Voraussetzungen

In diesem Abschnitt werden die Anforderungen zusammengefasst, die für die Nutzung einer Reservierung durch die VMs eines Jobs gelten müssen. Weitere Informationen zu allen Anforderungen finden Sie in den allgemeinen Anforderungen für Reservierungen in der Compute Engine-Dokumentation und im Verfahren zur Planung Ihrer Konfiguration weiter unten in diesem Dokument.

  • Damit die VMs eines Jobs im Allgemeinen eine Reservierung nutzen können, müssen alle folgenden Bedingungen erfüllt sein:

    • Der Job und die Reservierung müssen VM-Attribute angeben, die genau übereinstimmen.

    • Sie müssen alle Einschränkungen in diesem Dokument und alle anderen allgemeinen Anforderungen für Reservierungen beachten.

  • Damit jede VM eines Jobs eine Reservierung erfolgreich nutzen kann, muss die Reservierung während der Ausführungszeit der VM ungenutzte Kapazitäten haben.

    Die nicht verwendete Kapazität einer Reservierung ist die Differenz zwischen der Anzahl der VMs und der Anzahl der VMs, die sie aktuell nutzen. VMs versuchen, Reservierungen zu nutzen, wenn Sie ungenutzte Reservierungskapazität haben. So kann eine VM eine Reservierung verwenden, wenn die VM erstellt wird oder später während ihrer Laufzeit. Eine VM beendet die Nutzung einer Reservierung erst, wenn die VM nicht mehr ausgeführt oder die Reservierung gelöscht wurde.

    Je nach der insgesamt nicht verwendeten Reservierungskapazität verbrauchen keine, einige oder alle VMs eines Jobs Reservierungen. Außerdem kann die Anzahl der reservierten VMs während der Jobausführung variieren.

Job erstellen und ausführen, der reservierte VMs nutzen kann

  1. Konfiguration planen: Führen Sie die folgenden Schritte aus, um sicherzustellen, dass der Job und die Reservierung kompatibel sind.

    Wenn Sie eine bereits vorhandene Reservierung nutzen möchten, müssen Sie einen Job mit einer entsprechenden Konfiguration erstellen. Wenn Sie eine neue Reservierung erstellen möchten, wählen Sie die gewünschten Konfigurationsoptionen aus.

    1. Bestimmen Sie die Reservierungsattribute. Aufgrund der Einschränkungen muss der Freigabetyp single-project sein. Dies ist die Standardoption für Reservierungen. Legen Sie die Werte fest, die Sie für die folgenden Reservierungsattribute verwenden möchten:

      • Verbrauchstyp*
      • Anzahl der VMs

      *Der Verbrauchstyp der Reservierung (speziell ausgerichtet oder automatisch genutzt) bestimmt, welche VMs die Reservierung nutzen können.

      Die VM-Anzahl stellt die Gesamtkapazität einer Reservierung dar. Berücksichtigen Sie bei der Entscheidung über diesen Wert die Anzahl der VMs des Jobs.

    2. Bestimmen Sie die VM-Attribute für den Job und die Reservierung. Aufgrund der Einschränkungen kann weder der Job noch die Reservierung eine Richtlinie für kompakte Platzierung angeben, die die Standardoption für Reservierungen und Jobs ist. Bestimmen Sie die Werte, die Sie für die folgenden VM-Attribute verwenden möchten, die für die Reservierung und den Job exakt übereinstimmen müssen:

      • Projekt
      • Bereich*
      • Maschinentyp
      • Mindest-CPU-Plattform (falls vorhanden)
      • GPU-Typ und Anzahl (falls vorhanden)
      • Typ und Anzahl der lokalen SSDs (falls vorhanden)
      • Reservierungsaffinität#

      *Die Job-VMs müssen sich in derselben Zone wie die reservierten VMs befinden. Sie müssen diese Zone entweder in das Feld allowedLocations[] des Jobs aufnehmen oder beim Auslassen des Felds allowedLocations[] als Standort des Jobs die Region festlegen, die diese Zone enthält.

      Der Job muss alle diese Attribute entweder in den policy-Unterfeldern oder mit einer VM-Instanzvorlage definieren. Für einen Job kann keine Kombination aus policy-Unterfeldern und einer Vorlage angegeben werden.

      Ein optionales Feld kann für eine Ressource nicht definiert und für die andere ausgelassen werden. Definieren oder lassen Sie das optionale Feld für die Reservierung und den Job weg. Wenn für den Job eine VM-Instanzvorlage angegeben ist, gilt dies auch für die Felder der angegebenen Vorlage.

      #Der Verbrauchstyp der Reservierung bestimmt die für die VMs des Jobs erforderliche Reservierungsaffinität, die Sie im Job so angeben müssen:

  2. Bereiten Sie die Reservierung vor. Falls noch nicht geschehen, erstellen Sie die Reservierung, die die VMs des Jobs nutzen sollen. Die Reservierung muss die gewünschten Attribute enthalten.

  3. Erstellen Sie den Job und führen Sie ihn aus. Sie können mit der gcloud CLI oder Batch API einen Job erstellen und ausführen, der VMs aus der vorbereiteten Reservierung nutzt:

    gcloud

    1. Erstellen Sie eine JSON-Datei mit den Konfigurationsdetails des Jobs. In dieser Datei werden die Unterfelder der VM-Instanzressource (instances[]) so festgelegt, dass sie genau mit den VM-Attributen einer Reservierung übereinstimmen.

      Um beispielsweise einen einfachen Skriptjob zu erstellen, der VMs aus einer Reservierung nutzt, erstellen Sie eine JSON-Datei mit folgendem Inhalt:

      {
        "taskGroups": [
          {
            "taskSpec": {
              "runnables": [
                {
                  "script": {
                    "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                  }
                }
              ]
            },
            "taskCount": 3
          }
        ],
        "allocationPolicy": {
          "instances": [
            {
              VM_RESOURCES
            }
          ],
        },
        "logsPolicy": {
          "destination": "CLOUD_LOGGING"
        }
      }
      

      Ersetzen Sie VM_RESOURCES durch die VM-Ressourcen, die der Reservierung entsprechen, die der Job nutzen soll. Geben Sie dazu die instances[]-Unterfelder an, die Sie in den vorherigen Schritten geplant haben.

      Beginnen Sie beispielsweise mit dem folgenden Wert für VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      Nehmen Sie die folgenden Änderungen vor, um diesen Wert zu verwenden:

      1. Möchten Sie eine Instanzvorlage verwenden?

        • Ja: Ersetzen Sie das Feld policy durch das Feld instanceTemplate und geben Sie eine vorhandene VM-Instanzvorlage an, die der Reservierung entspricht. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung einer VM-Instanzvorlage. Wenn die Reservierung GPUs oder lokale SSDs verwendet, müssen Sie auch das Feld installGpuDrivers bzw. volumes[] des Jobs konfigurieren. Andernfalls können Sie die verbleibenden Änderungen überspringen.

        • Nein: Ersetzen Sie MACHINE_TYPE durch denselben Maschinentyp wie die Reservierung.

      2. Enthält die Reservierung eine Mindest-CPU-Plattform?

        • Ja: Ersetzen Sie MIN_CPU_PLATFORM durch dieselbe Mindest-CPU-Plattform.

        • Nein: Entfernen Sie das Feld minCpuPlatform.

      3. Enthält die Reservierung GPUs?

        • Ja: Ersetzen Sie INSTALL_GPU_DRIVERS, GPU_TYPE und GPU_COUNT entsprechend der Reservierung. Im Codebeispiel zur Verwendung von GPUs finden Sie ein Beispiel.

        • Nein: Entfernen Sie die Felder installGpuDrivers und accelerators[].

      4. Umfasst die Reservierung lokale SSDs?

        • Ja: Ersetzen Sie LOCAL_SSD_SIZE und LOCAL_SSD_NAME entsprechend der Reservierung und stellen Sie die lokalen SSDs bereit, indem Sie dem Job das Feld volumes[] hinzufügen. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung lokaler SSDs.

        • Nein: Entfernen Sie das Feld disks[].

      5. Wird für die Reservierung der speziell ausgerichtete Nutzungstyp verwendet?

        • Ja: Ersetzen Sie SPECIFIC_RESERVATION_NAME durch den Namen der Reservierung.

        • Nein: Entfernen Sie das Feld reservation.

      Angenommen, Sie verwenden eine automatisch genutzte Reservierung für n2-standard-32-VMs, die keine Mindest-CPU-Plattform, GPUs oder lokale SSDs angeben. Außerdem sollten Sie keine VM-Instanzvorlage angeben. In diesem Fall müssen Sie VM_RESOURCES durch den folgenden Wert ersetzen:

      "policy": {
        "machineType": "n2-standard-32"
      }
      
    2. Verwenden Sie den Befehl gcloud batch jobs submit, um den Job zu erstellen und auszuführen:

      gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
      

      Ersetzen Sie Folgendes:

      • JOB_NAME: der Name des Jobs.

      • LOCATION: der Standort des Jobs. Wenn für den Job das Feld allowedLocations[] nicht angegeben ist, muss dies die Region sein, die die Zone der Reservierung enthält.

      • JSON_CONFIGURATION_FILE: der Pfad für eine JSON-Datei mit den Konfigurationsdetails des Jobs.

    API

    Stellen Sie eine POST-Anfrage an die Methode jobs.create, die die Unterfelder der VM-Instanzressource (instances[]) so festlegt, dass sie genau mit den VM-Attributen einer Reservierung übereinstimmen.

    Um beispielsweise einen einfachen Skriptjob zu erstellen, der VMs aus einer Reservierung nutzt, stellen Sie die folgende Anfrage:

    POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            VM_RESOURCES
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID Ihres Projekts.

    • LOCATION: der Standort des Jobs. Wenn für den Job das Feld allowedLocations[] nicht angegeben ist, muss dies die Region sein, die die Zone der Reservierung enthält.

    • JOB_NAME: der Name des Jobs.

    • VM_RESOURCES: die VM-Ressourcen, die der Reservierung entsprechen, die der Job nutzen soll. Dazu geben Sie die instances[]-Unterfelder an, die Sie in den vorherigen Schritten geplant haben.

      Beginnen Sie beispielsweise mit dem folgenden Wert für VM_RESOURCES:

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      Nehmen Sie die folgenden Änderungen vor, um diesen Wert zu verwenden:

      1. Möchten Sie eine Instanzvorlage verwenden?

        • Ja: Ersetzen Sie das Feld policy durch das Feld instanceTemplate und geben Sie eine vorhandene VM-Instanzvorlage an, die der Reservierung entspricht. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung einer VM-Instanzvorlage. Wenn die Reservierung GPUs oder lokale SSDs verwendet, müssen Sie auch das Feld installGpuDrivers bzw. volumes[] des Jobs konfigurieren. Andernfalls können Sie die verbleibenden Änderungen überspringen.

        • Nein: Ersetzen Sie MACHINE_TYPE durch denselben Maschinentyp wie die Reservierung.

      2. Enthält die Reservierung eine Mindest-CPU-Plattform?

        • Ja: Ersetzen Sie MIN_CPU_PLATFORM durch dieselbe Mindest-CPU-Plattform.

        • Nein: Entfernen Sie das Feld minCpuPlatform.

      3. Enthält die Reservierung GPUs?

        • Ja: Ersetzen Sie INSTALL_GPU_DRIVERS, GPU_TYPE und GPU_COUNT entsprechend der Reservierung. Im Codebeispiel zur Verwendung von GPUs finden Sie ein Beispiel.

        • Nein: Entfernen Sie die Felder installGpuDrivers und accelerators[].

      4. Umfasst die Reservierung lokale SSDs?

        • Ja: Ersetzen Sie LOCAL_SSD_SIZE und LOCAL_SSD_NAME entsprechend der Reservierung und stellen Sie die lokalen SSDs bereit, indem Sie dem Job das Feld volumes[] hinzufügen. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung lokaler SSDs.

        • Nein: Entfernen Sie das Feld disks[].

      5. Wird für die Reservierung der speziell ausgerichtete Nutzungstyp verwendet?

        • Ja: Ersetzen Sie SPECIFIC_RESERVATION_NAME durch den Namen der Reservierung.

        • Nein: Entfernen Sie das Feld reservation.

      Angenommen, Sie verwenden eine automatisch genutzte Reservierung für n2-standard-32-VMs, die keine Mindest-CPU-Plattform, GPUs oder lokale SSDs angeben. Außerdem sollten Sie keine VM-Instanzvorlage angeben. In diesem Fall müssen Sie VM_RESOURCES durch den folgenden Wert ersetzen:

      "policy": {
        "machineType": "n2-standard-32"
      }
      

Nächste Schritte