Mit VM-Reservierungen für die Ressourcenverfügbarkeit sorgen

In diesem Dokument wird beschrieben, wie Sie Jobs erstellen, die auf reservierten Ressourcen ausgeführt werden, und wie Sie verhindern, dass Jobs Reservierungen nutzen.

Reservierungen sind eine Funktion von Compute Engine. Eine Reservierung bietet ein sehr hohes Maß an Sicherheit beim Beschaffen von Kapazitäten 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 Zeitpunkt an, an dem Sie die Reservierung erstellen, bis zu dem Zeitpunkt, an dem Sie sie löschen. Während Sie diese VM nutzen, entsprechen die Gesamtkosten jedoch denen einer VM ohne Reservierung.

Reservierungen sind in der Regel nützlich, wenn die Verfügbarkeit von Kapazität von entscheidender Bedeutung ist oder um Fehler beim Abrufen von Ressourcen zu vermeiden. Für Batch sollten Sie dedizierte Reservierungen verwenden, um die Jobplanungszeit zu minimieren, oder versuchen, vorhandene Reservierungen zu nutzen, wenn sie nicht verwendet werden. Wenn Sie nicht ausreichend genutzte Reservierungen haben, z. B. Reservierungen, die für Rabatte für zugesicherte Nutzung erforderlich sind, können Sie Jobs so konfigurieren, dass sie versuchen, diese Reservierungen zu nutzen, wenn sie nicht verwendet werden. So können Sie Ihre angefallenen Kosten optimieren. Wenn Sie die Ressourcenverfügbarkeit für andere Arbeitslasten in Ihrem Projekt priorisieren möchten, können Sie alternativ explizit verhindern, dass ein Job Reservierungen nutzt.

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

Hinweise

  1. Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
  2. Prüfen Sie, ob Sie die Berechtigungen zum Erstellen einer Reservierung oder zum Aufrufen einer vorhandenen Reservierung haben, die von den VMs eines Jobs nach Bedarf genutzt werden soll.
  3. Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

    Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Beschränkungen

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

  • Die VMs eines Jobs können keine freigegebenen Reservierungen nutzen.
  • Die VMs eines Jobs können keine Reservierungen nutzen, wenn für eine der beiden eine Richtlinie für kompakte Platzierung angegeben ist.
  • Wenn Sie einen Job mit der Google Cloud -Konsole erstellen, werden passende Reservierungen automatisch von den zugehörigen VMs genutzt. Wenn Sie eine bestimmte Reservierung nutzen oder verhindern möchten, dass VMs Reservierungen nutzen, müssen Sie das Feld reservation definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.

Voraussetzungen

In diesem Abschnitt werden die Anforderungen zusammengefasst, die erfüllt sein müssen, damit die VMs eines Jobs eine Reservierung nutzen können. Weitere Informationen zu allen Anforderungen finden Sie in der Compute Engine-Dokumentation unter Allgemeine Anforderungen für Reservierungen und weiter unten in diesem Dokument unter Vorgehensweise zum Planen der Konfiguration.

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

    • Im Job und in der Reservierung müssen VM-Attribute angegeben werden, die genau übereinstimmen.

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

  • Damit jede VM eines Jobs eine Reservierung nutzen kann, muss die Reservierung während der Laufzeit der VM eine nicht genutzte Kapazität haben.

    Die nicht genutzte Kapazität einer Reservierung ist die Differenz zwischen der Anzahl der VMs und der Anzahl der VMs, die sie derzeit nutzen. VMs versuchen, Reservierungen zu nutzen, wenn Sie nicht genutzte Reservierungskapazität haben. Eine VM kann also eine Reservierung nutzen, wenn sie erstellt wird oder später während der Laufzeit. Eine VM nutzt eine Reservierung so lange, bis die VM nicht mehr ausgeführt wird oder die Reservierung gelöscht wird.

    Je nach Ihrer gesamten ungenutzten Reservierungskapazität können keine, einige oder alle VMs eines Jobs Reservierungen nutzen. Die Anzahl der reservierten VMs kann während der Laufzeit des Jobs variieren.

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

  1. Konfiguration planen So prüfen Sie, ob Ihr Job und Ihre 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. Reservierungsattribute ermitteln Aufgrund der Einschränkungen muss der Freigabetyp single-project sein. Dies ist die Standardoption für eine Reservierung. Legen Sie die Werte fest, die Sie für die folgenden Reservierungseigenschaften verwenden möchten:

      • Verbrauchstyp*
      • VM-Anzahl

      *Der Verbrauchstyp der Reservierung (spezifisch ausgewählt oder automatisch genutzt) bestimmt, welche VMs die Reservierung nutzen können.

      Die Anzahl der VMs gibt die Gesamtkapazität einer Reservierung an. Berücksichtigen Sie bei der Entscheidung für diesen Wert die Anzahl der VMs des Jobs.

    2. VM-Attribute für den Job und die Reservierung ermitteln Aufgrund der Einschränkungen kann weder im Job noch in der Reservierung eine Richtlinie für kompakte Platzierung angegeben werden. Dies ist jedoch die Standardoption für Reservierungen und Jobs. Legen Sie die Werte fest, die Sie für die folgenden VM-Attribute verwenden möchten. Diese müssen für die Reservierung und den Job genau übereinstimmen:

      • Projekt
      • Zone*
      • 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, wenn Sie das Feld allowedLocations[] weglassen, den Standort des Jobs auf die Region festlegen, die diese Zone enthält.

      Im Job müssen alle diese Attribute entweder mit den policy-Unterfeldern oder mit einer VM-Instanzvorlage definiert werden. Für einen Job kann keine Kombination aus policy-Unterfeldern und einer Vorlage angegeben werden.

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

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

      • Wenn für den Job eine VM-Instanzvorlage verwendet wird, muss die Vorlage die Reservierungsaffinität wie in der Dokumentation zu Reservierungen beschrieben konfigurieren.
      • Wenn für den Job keine Vorlage verwendet wird und die Reservierung speziell darauf ausgerichtet ist, geben Sie den Namen der Reservierung im Feld reservation des Jobs an.
      • Wenn für den Job keine Vorlage verwendet wird und die Reservierung automatisch genutzt wird, lassen Sie das Feld reservation des Jobs weg.
  2. Reservierung vorbereiten: Erstellen Sie die Reservierung, die von den VMs des Jobs genutzt werden soll, falls Sie dies noch nicht getan haben. Prüfen Sie, ob die Reservierung die geplanten Attribute hat.

  3. Job erstellen und ausführen Sie können einen Job erstellen und ausführen, der VMs aus der vorbereiteten Reservierung verwendet, indem Sie die gcloud CLI oder die Batch API verwenden:

    gcloud

    1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben werden, mit denen die Unterfelder der VM-Instanzressource (instances[]) genau den VM-Attributen einer Reservierung entsprechen.

      Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der VMs aus einer Reservierung verwendet, 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 finden Sie im Codebeispiel für die Verwendung einer VM-Instanzvorlage. Wenn in der Reservierung GPUs oder lokale SSDs verwendet werden, müssen Sie auch die Felder installGpuDrivers und volumes[] des Jobs konfigurieren. Andernfalls überspringen Sie die restlichen Änderungen.

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

      2. Ist in der Reservierung eine Mindest-CPU-Plattform enthalten?

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

        • Nein:Entfernen Sie das Feld minCpuPlatform.

      3. Sind in der Reservierung GPUs enthalten?

        • Ja:Ersetzen Sie INSTALL_GPU_DRIVERS, GPU_TYPE und GPU_COUNT entsprechend der Reservierung. Codebeispiel für die Verwendung von GPUs

        • Nein:Entfernen Sie das Feld installGpuDrivers und das Feld accelerators[].

      4. Enthält die Reservierung lokale SSDs?

        • Ja:Ersetzen Sie LOCAL_SSD_SIZE und LOCAL_SSD_NAME entsprechend der Reservierung und hängen Sie die lokalen SSDs ein, indem Sie dem Job das Feld volumes[] hinzufügen. Ein Beispiel finden Sie im Codebeispiel für die Verwendung lokaler SSDs.

        • Nein:Entfernen Sie das Feld disks[].

      5. Wird für die Reservierung der speziell ausgewählte Verbrauchstyp 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, in der keine Mindest-CPU-Plattform, GPUs oder lokalen SSDs angegeben sind. Außerdem möchten 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. Sofern im Job nicht das Feld allowedLocations[] angegeben ist, muss dies die Region sein, die die Zone der Reservierung enthält.

      • JSON_CONFIGURATION_FILE: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.

    API

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

    Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, 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. Sofern im Job nicht das Feld allowedLocations[] 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 mit der Reservierung übereinstimmen, die vom Job genutzt werden 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 finden Sie im Codebeispiel für die Verwendung einer VM-Instanzvorlage. Wenn in der Reservierung GPUs oder lokale SSDs verwendet werden, müssen Sie auch die Felder installGpuDrivers und volumes[] des Jobs konfigurieren. Andernfalls überspringen Sie die restlichen Änderungen.

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

      2. Ist in der Reservierung eine Mindest-CPU-Plattform enthalten?

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

        • Nein:Entfernen Sie das Feld minCpuPlatform.

      3. Sind in der Reservierung GPUs enthalten?

        • Ja:Ersetzen Sie INSTALL_GPU_DRIVERS, GPU_TYPE und GPU_COUNT entsprechend der Reservierung. Codebeispiel für die Verwendung von GPUs

        • Nein:Entfernen Sie das Feld installGpuDrivers und das Feld accelerators[].

      4. Enthält die Reservierung lokale SSDs?

        • Ja:Ersetzen Sie LOCAL_SSD_SIZE und LOCAL_SSD_NAME entsprechend der Reservierung und hängen Sie die lokalen SSDs ein, indem Sie dem Job das Feld volumes[] hinzufügen. Ein Beispiel finden Sie im Codebeispiel für die Verwendung lokaler SSDs.

        • Nein:Entfernen Sie das Feld disks[].

      5. Wird für die Reservierung der speziell ausgewählte Verbrauchstyp 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, in der keine Mindest-CPU-Plattform, GPUs oder lokalen SSDs angegeben sind. Außerdem möchten Sie keine VM-Instanzvorlage angeben. In diesem Fall müssen Sie VM_RESOURCES durch den folgenden Wert ersetzen:

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

Job erstellen und ausführen, der keine reservierten VMs nutzen kann

Wenn Sie verhindern möchten, dass ein Job Reservierungen nutzt, setzen Sie das Feld reservation auf NO_RESERVATION. Weitere Informationen dazu, wie Sie verhindern, dass Reservierungen genutzt werden, finden Sie in der Compute Engine-Dokumentation unter Verhindern, dass Compute-Instanzen Reservierungen nutzen.

Sie können einen Job erstellen und ausführen, der keine reservierten VMs nutzen kann, indem Sie die gcloud CLI oder die Batch API verwenden.

gcloud

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben und das Feld reservation auf NO_RESERVATION festgelegt wird.

    Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der keine Reservierungen nutzen kann, 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": [
          {
            "policy": {
              "reservation": "NO_RESERVATION"
            }
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  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.

    • JSON_CONFIGURATION_FILE: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Stellen Sie eine POST-Anfrage an die Methode jobs.create, in der das Feld reservation auf NO_RESERVATION festgelegt wird.

Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der keine Reservierungen nutzen kann, 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": [
      {
        "policy": {
          "reservation": "NO_RESERVATION"
        }
      }
    ],
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID Ihres Projekts.

  • LOCATION: Der Standort des Jobs.

  • JOB_NAME: Der Name des Jobs.

Nächste Schritte