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
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie Erste Schritte mit Batch. Aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
- Achten Sie darauf, dass Sie die Berechtigungen zum Erstellen einer Reservierung oder zum Aufrufen einer vorhandenen Reservierung haben, die die VMs eines Jobs nach Bedarf nutzen sollen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batchjob-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batchjob-Bearbeiter (
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
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.
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.
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 FeldsallowedLocations[]
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 auspolicy
-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:
- Wenn der Job eine VM-Instanzvorlage verwendet, muss die Vorlage die Reservierungsaffinität wie in der Dokumentation zu Reservierungen beschrieben konfigurieren.
- Wenn der Job keine Vorlage verwendet und die Reservierung speziell als Ziel verwendet wird, geben Sie den Namen der Reservierung im Feld
reservation
des Jobs an. - Wenn der Job keine Vorlage verwendet und die Reservierung automatisch genutzt wird, lassen Sie das Feld
reservation
des Jobs weg.
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.
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
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 dieinstances[]
-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:
Möchten Sie eine Instanzvorlage verwenden?
Ja: Ersetzen Sie das Feld
policy
durch das FeldinstanceTemplate
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 FeldinstallGpuDrivers
bzw.volumes[]
des Jobs konfigurieren. Andernfalls können Sie die verbleibenden Änderungen überspringen.Nein: Ersetzen Sie
MACHINE_TYPE
durch denselben Maschinentyp wie die Reservierung.
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
.
Enthält die Reservierung GPUs?
Ja: Ersetzen Sie
INSTALL_GPU_DRIVERS
,GPU_TYPE
undGPU_COUNT
entsprechend der Reservierung. Im Codebeispiel zur Verwendung von GPUs finden Sie ein Beispiel.Nein: Entfernen Sie die Felder
installGpuDrivers
undaccelerators[]
.
Umfasst die Reservierung lokale SSDs?
Ja: Ersetzen Sie
LOCAL_SSD_SIZE
undLOCAL_SSD_NAME
entsprechend der Reservierung und stellen Sie die lokalen SSDs bereit, indem Sie dem Job das Feldvolumes[]
hinzufügen. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung lokaler SSDs.Nein: Entfernen Sie das Feld
disks[]
.
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 SieVM_RESOURCES
durch den folgenden Wert ersetzen:"policy": { "machineType": "n2-standard-32" }
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 FeldallowedLocations[]
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 Methodejobs.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 FeldallowedLocations[]
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 dieinstances[]
-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:
Möchten Sie eine Instanzvorlage verwenden?
Ja: Ersetzen Sie das Feld
policy
durch das FeldinstanceTemplate
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 FeldinstallGpuDrivers
bzw.volumes[]
des Jobs konfigurieren. Andernfalls können Sie die verbleibenden Änderungen überspringen.Nein: Ersetzen Sie
MACHINE_TYPE
durch denselben Maschinentyp wie die Reservierung.
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
.
Enthält die Reservierung GPUs?
Ja: Ersetzen Sie
INSTALL_GPU_DRIVERS
,GPU_TYPE
undGPU_COUNT
entsprechend der Reservierung. Im Codebeispiel zur Verwendung von GPUs finden Sie ein Beispiel.Nein: Entfernen Sie die Felder
installGpuDrivers
undaccelerators[]
.
Umfasst die Reservierung lokale SSDs?
Ja: Ersetzen Sie
LOCAL_SSD_SIZE
undLOCAL_SSD_NAME
entsprechend der Reservierung und stellen Sie die lokalen SSDs bereit, indem Sie dem Job das Feldvolumes[]
hinzufügen. Ein Beispiel dafür finden Sie im Codebeispiel zur Verwendung lokaler SSDs.Nein: Entfernen Sie das Feld
disks[]
.
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 SieVM_RESOURCES
durch den folgenden Wert ersetzen:"policy": { "machineType": "n2-standard-32" }
Nächste Schritte
- Informationen zu Problemen beim Erstellen oder Ausführen eines Jobs finden Sie unter Fehlerbehebung.
- Aufträge und Aufgaben ansehen
- Möglichkeiten zur Joberstellung