In diesem Dokument wird beschrieben, wie Sie Jobs erstellen, die auf reservierten Ressourcen ausgeführt werden, und wie Sie verhindern, dass Jobs Reservierungen verbrauchen.
Reservierungen sind ein Feature 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. Eine Reservierung für eine VM verursacht folgende Kosten: ab dem Erstellen und bis zum Löschen der Reservierung. Aber während die Sie nutzen, entsprechen die Gesamtkosten denen einer VM ohne Reservierung.
Reservierungen sind in der Regel nützlich, wenn die Verfügbarkeit von Kapazitäten entscheidend ist oder um Fehler beim Abrufen von Ressourcen zu vermeiden. Für Batch-Jobs sollten Sie spezielle Reservierungen verwenden, um die Zeit für die Jobplanung zu minimieren. Sie können auch versuchen, vorhandene Reservierungen zu verwenden, wenn sie gerade nicht genutzt werden. Wenn Sie nicht ausreichend genutzte Reservierungen haben, z. B. Reservierungen, die für Rabatte für die zugesicherte Nutzung erforderlich sind, können Sie Jobs so konfigurieren, dass sie versucht werden, zu verwenden, wenn sie nicht genutzt werden, um Ihre angefallenen Kosten zu optimieren. Wenn Sie die Ressourcenverfügbarkeit für andere Arbeitslasten in Ihrem Projekt zu priorisieren, einen Job explizit daran hindern, Reservierungen zu nutzen.
Weitere Informationen zu Reservierungen finden Sie in der Compute Engine-Dokumentation zu Reservierungen.
Hinweise
- Wenn Sie Batch zum ersten Mal verwenden, lesen Sie Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie den Voraussetzungen für Projekte und Nutzer.
- Sie benötigen die Berechtigungen, um eine Reservierung zu erstellen oder eine vorhandene Reservierung aufzurufen, die die VMs eines Jobs bei Bedarf nutzen sollen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batch-Job-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 auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch-Job-Bearbeiter (
Beschränkungen
Zusätzlich zu den allgemeinen Einschränkungen für Reservierungen gelten für Batch-Reservierungen 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 den Job oder die Reservierung eine Richtlinie für kompakte Platzierung angegeben ist.
Voraussetzungen
In diesem Abschnitt werden die Anforderungen zusammengefasst, die die VMs eines Jobs erfüllen müssen, um eine Reservierung zu nutzen. Weitere Informationen zu allen Anforderungen finden Sie in der Compute Engine-Dokumentation unter Allgemeine Anforderungen an Reservierungen und weiter unten in diesem Dokument unter Vorgehensweise zur Planung der Konfiguration.
Damit die VMs eines Jobs im Allgemeinen eine Reservierung nutzen können, müssen folgende Bedingungen erfüllt sein:
Für den Job und die Reservierung müssen VM-Attribute genau übereinstimmen.
Sie müssen alle in diesem Dokument genannten Einschränkungen einhalten und alle anderen allgemeinen Anforderungen für Reservierungen.
Damit jede VM eines Jobs erfolgreich eine Reservierung nutzt, muss die Reservierung während der VM-Laufzeit
Die ungenutzte Kapazität einer Reservierung ist die Differenz zwischen VM-Anzahl und die Anzahl der VMs, die sie derzeit nutzen. VMs versuchen, Reservierungen zu nutzen, wenn Sie nicht verwendete Reservierungskapazität haben. Eine VM kann also einen Reservierung, wenn die VM erstellt wird, oder später in ihrer Laufzeit. Eine VM nicht die Nutzung einer Reservierung beenden, bis die VM nicht mehr ausgeführt wird oder die Reservierung gelöscht.
Abhängig von Ihrer gesamten ungenutzten Reservierungskapazität, kann keine, einige oder alle Die VMs des Jobs können Reservierungen nutzen und die Anzahl der reservierten VMs während der Joblaufzeit variieren.
Job erstellen und ausführen, der reservierte VMs nutzen kann
Konfiguration planen Schließen Sie Ihren Auftrag und Ihre Reservierung ab, um sicherzustellen, dass sie kompatibel sind. führen Sie die folgenden Schritte aus.
Wenn Sie eine vorhandene Reservierung nutzen möchten, müssen Sie eine mit einer entsprechenden Konfiguration. Wenn Sie vorhaben, eine neue Reservierung die gewünschten Konfigurationsoptionen aus.
Ermitteln Sie die Reservierungseigenschaften. Aufgrund der Einschränkungen Der Freigabetyp muss single-project sein. Dies ist die Standardeinstellung. Option für eine Reservierung. Legen Sie die Werte für die folgenden Reservierungseigenschaften fest:
- Verbrauchstyp*
- VM-Anzahl†
* Die Verbrauchstyp (spezifisch 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 Festlegung dieses Werts die Anzahl der VMs des Jobs.
Bestimmen Sie die VM-Attribute für den Job und die Reservierung. Aufgrund der Einschränkungen kann weder für den Job noch für die Reservierung eine Richtlinie für kompakte Platzierung angegeben werden. Dies ist die Standardoption für Reservierungen und Jobs. Legen Sie die Werte fest, die Sie für Folgendes verwenden möchten: VM-Attribute, die exakt übereinstimmen müssen für die Reservierung und den Job:
- Projekt
- Zone*
- Maschinentyp†
- Mindest-CPU-Plattform† (falls zutreffend‡)
- GPU-Typ und -Anzahl† (falls vorhanden‡)
- Typ und Anzahl lokaler 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 der
allowedLocations[]
oder, wenn Sie den Parameter FeldallowedLocations[]
, Standort des Jobs festlegen in die Region ein, die diese Zone enthält.†Der Job muss alle diese Eigenschaften entweder mit den Unterfeldern
policy
oder mit einer VM-Instanzvorlage definieren. Für einen Job kann keine Kombination auspolicy
-Unterfeldern und einer Vorlage angegeben werden.‡ Ein optionales Feld kann nicht für eine Ressource definiert und bei der anderen ausgelassen werden. Definieren oder lassen Sie das optionale Feld sowohl für die Reservierung als auch für den Job aus. Wenn für den Job eine VM-Instanzvorlage angegeben ist, gilt dies auch für die Felder der angegebenen Vorlage.
#Die Reservierung Verbrauchstyp bestimmt die für die VMs des Jobs erforderliche Reservierungsaffinität, die müssen Sie im Job wie folgt angeben:
- Wenn der Job eine VM-Instanzvorlage verwendet, 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 ausgerichtet ist, geben Sie den Namen der Reservierung im Feld
reservation
des Jobs an. - Wenn der Job keine Vorlage verwendet und die Reservierung
automatisch verbraucht, lassen Sie die
reservation
.
Reservierung vorbereiten Falls noch nicht geschehen, Reservierung erstellen die die VMs des Jobs nutzen sollen. Achten Sie darauf, dass die Reservierung die die Sie geplant haben.
Erstellen und ausführen Sie den Job. Mit der gcloud CLI oder der Batch API können Sie 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 der die Unterfelder der Ressource „VM-Instanz“ (
instances[]
) so festgelegt sind, dass sie genau mit den VM-Attributen einer Reservierung übereinstimmen.Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, 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, unter Angabe derinstances[]
-Unterfelder, die Sie in der vorherigen Schritten.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 folgende Ä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. Sehen Sie sich beispielsweise das Beispiel für die Verwendung einer VM-Instanzvorlage an. Wenn für die Reservierung GPUs oder lokale SSDs verwendet werden, müssen Sie außerdem das FeldinstallGpuDrivers
und das Feldvolumes[]
des Jobs konfigurieren. Andernfalls überspringen Sie die restlichen Änderungen.Nein: Ersetzen Sie
MACHINE_TYPE
durch denselben Maschinentyp wie in der 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
so, dass sie der Reservierung entsprechen. Sehen Sie sich beispielsweise das Codebeispiel zur Verwendung von GPUs an.Nein: Entfernen Sie das Feld
installGpuDrivers
und denaccelerators[]
.
Umfasst die Reservierung lokale SSDs?
Ja: Ersetzen Sie
LOCAL_SSD_SIZE
undLOCAL_SSD_NAME
, um der Reservierung zu entsprechen, und stellen Sie die lokalen SSDs bereit, indem Sie Feldvolumes[]
für den Job. Sehen Sie sich hierzu das Codebeispiel für mit lokalen SSDs.Nein: Entfernen Sie das Feld
disks[]
.
Wird für die Reservierung der speziell angestrebte Nutzungstyp verwendet?
Ja: Ersetzen Sie
SPECIFIC_RESERVATION_NAME
durch den Namen der Reservierung.Nein: Entfernen Sie das Feld
reservation
.
Angenommen, Sie verwenden eine automatisch in Anspruch genommene Reservierung für
n2-standard-32
VMs, für die keine Mindest-CPU-Plattform, GPUs oder lokalen SSDs angegeben sind. Darüber hinaus haben Sie keine VM-Instanzvorlage angeben möchten. In diesem Fall müssen SieVM_RESOURCES
ersetzen durch den folgenden Wert:"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. Sofern der Job nicht dieallowedLocations[]
, das muss die Region sein die die Zone der Reservierung enthält.JSON_CONFIGURATION_FILE
: Pfad für ein JSON-Objekt mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine
POST
-Anfrage an den Methodejobs.create
mit dem die Unterfelder der VM-Instanzressource (instances[]
) um genau mit den VM-Attributen einer Reservierung abzugleichen.Um beispielsweise einen einfachen Skriptjob zu erstellen, der VMs aus einem Reservierung erforderlich ist, 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
: den Standort der Stelle. Sofern im Job nicht das FeldallowedLocations[]
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 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 folgende Ä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. Beispiel: finden Sie im Codebeispiel für Mit einer VM-Instanzvorlage Wenn die Reservierung GPUs oder lokale SSDs verwendet, müssen Sie außerdem das FeldinstallGpuDrivers
des Jobs konfigurieren undvolumes[]
. Andernfalls überspringen Sie die restlichen Änderungen.Nein: Ersetzen Sie
MACHINE_TYPE
durch denselben Maschinentyp wie in der 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
so, dass sie der Reservierung entsprechen. Sehen Sie sich hierzu das Codebeispiel für mit GPUs.Nein: Entfernen Sie das Feld
installGpuDrivers
und das Feldaccelerators[]
.
Enthält die Reservierung lokale SSDs?
Ja: Ersetzen Sie
LOCAL_SSD_SIZE
undLOCAL_SSD_NAME
, um der Reservierung zu entsprechen, und stellen Sie die lokalen SSDs bereit, indem Sie Feldvolumes[]
für den Job. Sehen Sie sich hierzu das Codebeispiel für mit lokalen SSDs.Nein: Entfernen Sie das Feld
disks[]
.
Wird für die Reservierung der speziell angestrebte Nutzungstyp verwendet?
Ja: Ersetzen Sie
SPECIFIC_RESERVATION_NAME
durch den Namen der Reservierung.Nein: Entfernen Sie das Feld
reservation
.
Angenommen, Sie verwenden ein automatisch verbrauchtes Reservierung für
n2-standard-32
VMs, die keine angibt Mindest-CPU-Plattform, GPUs oder lokale SSDs. 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" }
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 zum Verhindern von Reservierungen
konsumieren, siehe
VMs ohne Nutzung von Reservierungen erstellen
in der Compute Engine-Dokumentation.
Sie können einen Job, der keine reservierten VMs verbrauchen kann, mit der Methode gcloud CLI oder Batch API verwenden.
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben und das Feld
reservation
aufNO_RESERVATION
festgelegt ist.Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der keine Reservierungen aufnimmt, 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" } }
Verwenden Sie zum Erstellen und Ausführen des Jobs die Methode
gcloud batch jobs submit
-Befehl: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
, die das Feld reservation
auf NO_RESERVATION
festlegt.
Wenn Sie beispielsweise einen einfachen Script-Job 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
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Hilfeartikel Fehlerbehebung.
- Aufträge und Aufgaben ansehen
- Weitere Informationen zu Optionen zum Erstellen von Jobs