In diesem Dokument wird erläutert, wie Sie Ihre Batchressourcen mithilfe von Labels organisieren.
Labels sind Schlüssel/Wert-Paare, die auf Ressourcen angewendet werden, um sie zu gruppieren und zu beschreiben. Für Batch gibt es vordefinierte Labels, die automatisch auf Ressourcen angewendet werden, und benutzerdefinierte Labels, die Sie beim Erstellen eines Jobs definieren und anwenden können.
Mithilfe von Labels können Sie die Ergebnisse von Ressourcenlisten und Cloud Billing-Berichten filtern. Mit Labels können Sie beispielsweise Folgendes tun:
Klärn und organisiere die Liste der Aufgaben deines Projekts.
Unterscheiden Sie die Runnables eines Jobs, indem Sie Labels verwenden, um den Typ des angegebenen Containers oder Scripts zu beschreiben.
Sie können Kosten analysieren, indem Sie Cloud Billing-Berichte nach den Ressourcen filtern, die von Batch- oder bestimmten Jobs erstellt wurden.
Weitere Informationen zu Labels finden Sie auch in der Compute Engine-Dokumentation zu Labels.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Hilfeartikel Batch-Dateien erstellen und ausführen und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
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
) im 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 in der Compute Engine-Dokumentation angegebenen Anforderungen an Labels gelten für das Anwenden von Labels auf einen Batchjob und seine Ressourcen die folgenden Einschränkungen:
Batch unterstützt nur Labels für Ressourcen, die mit Batch erstellt wurden und zu den folgenden Typen gehören:
Jobs
Runnables
Grafikprozessoren (GPUs) für einen Job (falls vorhanden)
Nichtflüchtige Speicher (Bootlaufwerke und alle Speichervolumes) für einen Job
VM-Instanzen für einen Job
Nachdem Sie die vordefinierten Labels berücksichtigt haben, die Batch automatisch auf einen Job anwendet, können Sie die folgende Anzahl von benutzerdefinierten Labels definieren:
Sie können maximal 63 benutzerdefinierte Labels definieren, die auf den Job und seine ausführbaren Dateien angewendet werden.
Sie können maximal 61 benutzerdefinierte Labels definieren, die auf jede GPU, jedes nichtflüchtige Speichermedium und jede VM angewendet werden, die für den Job erstellt wurden.
In Batch können nur benutzerdefinierte Labels mit eindeutigen Namen definiert werden. Das hat folgende Konsequenzen:
Der Versuch, ein vordefiniertes Label zu überschreiben, führt zu Fehlern.
Wenn Sie ein doppeltes benutzerdefiniertes Label definieren, wird das vorhandene benutzerdefinierte Label überschrieben.
In Batch können Labels nur beim Erstellen eines Jobs definiert werden.
Labels für Jobs und ausführbare Dateien können nicht hinzugefügt, aktualisiert oder entfernt werden.
Es ist zwar möglich, mit der Compute Engine Labels für die für Jobs erstellten nichtflüchtigen Laufwerke und VMs hinzuzufügen, zu aktualisieren oder zu entfernen, dies wird jedoch nicht empfohlen. Der Zeitraum, in dem die Ressourcen für einen Job vorhanden sind, kann nicht zuverlässig geschätzt werden. Außerdem funktionieren Änderungen möglicherweise nicht richtig mit Batch.
Wenn Sie die Liste der Jobs mithilfe von Labels filtern möchten, müssen Sie die Liste der Jobs mit der gcloud CLI oder der Batch API aufrufen.
Vordefinierte Labels
Jedes vordefinierte Label hat einen Schlüssel, der mit dem Präfix batch-
beginnt. Standardmäßig werden in Batch automatisch die folgenden vordefinierten Labels angewendet:
Für jeden Job, den Sie erstellen:
batch-job-id
: Der Wert dieses Labels wird auf den Namen der Stelle festgelegt.
Für jede GPU, jedes nichtflüchtige Laufwerk und jede VM, die für einen Job erstellt wurde:
batch-job-id
: Der Wert dieses Labels wird auf den Namen der Stelle festgelegt.batch-job-uid
: Der Wert dieses Labels wird auf die eindeutige Kennung (UID) des Jobs festgelegt.batch-node
: Der Wert dieses Labels ist null. Es werden nur alle GPUs, persistenten Laufwerke und VMs gruppiert, die für Jobs erstellt werden. Sie können dieses Label beispielsweise verwenden, wenn Sie sich einen Cloud Billing-Bericht ansehen, um die Kosten für alle GPUs, nichtflüchtigen Laufwerke und VMs zu ermitteln, die mit Batch erstellt wurden.
Benutzerdefinierte Labels definieren
Sie können beim Erstellen eines Jobs optional ein oder mehrere benutzerdefinierte Labels definieren. Sie können benutzerdefinierte Labels mit neuen oder bereits in Ihrem Projekt verwendeten Schlüsseln definieren. Wählen Sie zum Definieren benutzerdefinierter Labels je nach Zweck des Labels eine oder mehrere der folgenden Methoden in diesem Dokument aus:
Benutzerdefinierte Labels für den Job und seine Ressourcen definieren
In diesem Abschnitt wird beschrieben, wie Sie dem Job und jeder GPU, jedem nichtflüchtigen Laufwerk und jeder VM, die für den Job erstellt wurden, ein oder mehrere benutzerdefinierte Labels zuweisen. Nachdem Sie den Job erstellt haben, können Sie diese Labels verwenden, um Cloud Billing-Berichte und die Listen mit Jobs, Persistent Disks und VMs Ihres Projekts zu filtern.
Benutzerdefinierte Labels für den Job definieren
In diesem Abschnitt wird erläutert, wie Sie dem Job ein oder mehrere benutzerdefinierte Labels zuweisen. Nach dem Erstellen der Aufgabe können Sie diese Labels verwenden, um die Listen der Aufgaben Ihres Projekts zu filtern.
Benutzerdefinierte Labels für ausführbare Dateien definieren
In diesem Abschnitt wird beschrieben, wie Sie ein oder mehrere benutzerdefinierte Labels auf ein oder mehrere ausführbare Dateien für den Job anwenden. Nach dem Erstellen des Jobs können Sie diese Labels verwenden, um die Joblisten Ihres Projekts zu filtern.
Benutzerdefinierte Labels für den Job und seine Ressourcen definieren
Labels, die im Feld labels
für die Zuweisungsrichtlinie eines Jobs definiert sind, werden auf den Job sowie auf jede GPU (falls vorhanden), jedes nichtflüchtige Laufwerk (alle Bootlaufwerke und alle neuen Speichervolumes) und jede VM angewendet, die für den Job erstellt wurde.
Sie können Labels für einen Job und seine Ressourcen definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
gcloud
So erstellen Sie beispielsweise einen einfachen Container-Job in us-central1
, der zwei benutzerdefinierte Labels definiert, die für den Job und die für den Job erstellten Ressourcen gelten:
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und das Feld
allocationPolicy.labels
angibt.{ "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ], "labels": { "VM_LABEL_NAME1": "VM_LABEL_VALUE1", "VM_LABEL_NAME2": "VM_LABEL_VALUE2" } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world!" ] } } ] } } ] }
Ersetzen Sie Folgendes:
VM_LABEL_NAME1
: Der Name des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE1
: Der Wert des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_NAME2
: Der Name des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE2
: Der Wert des zweiten Labels, der auf die für den Job erstellten VMs angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit dem Befehlgcloud batch jobs submit
.gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen einfachen Containerjob in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, die für den Job und die für den Job erstellten Ressourcen gelten, senden Sie eine POST
-Anfrage an die Methode jobs.create
und geben Sie das Feld allocationPolicy.labels
an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
],
"labels": {
"VM_LABEL_NAME1": "VM_LABEL_VALUE1",
"VM_LABEL_NAME2": "VM_LABEL_VALUE2"
}
},
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world!"
]
}
}
]
}
}
]
}
Ersetzen Sie Folgendes:
VM_LABEL_NAME1
: Der Name des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE1
: Der Wert des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_NAME2
: Der Name des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE2
: Der Wert des zweiten Labels, der auf die für den Job erstellten VMs angewendet werden soll.
Java
Node.js
Python
Benutzerdefinierte Labels für den Job definieren
Labels, die im Feld labels
für den Job definiert sind, werden nur auf den Job angewendet.
Sie können Labels für einen Job definieren, wenn Sie ihn mit der gcloud CLI oder der Batch API erstellen.
gcloud
So erstellen Sie beispielsweise einen einfachen Containerjob in us-central1
, der zwei benutzerdefinierte Labels für den Job selbst definiert:
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und das Feld
labels
angibt.{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello World!" ] } } ] } } ], "labels": { "JOB_LABEL_NAME1": "JOB_LABEL_VALUE1", "JOB_LABEL_NAME2": "JOB_LABEL_VALUE2" } }
Ersetzen Sie Folgendes:
JOB_LABEL_NAME1
: Der Name des ersten Labels, das auf Ihren Job angewendet wird.JOB_LABEL_VALUE1
: Der Wert des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_NAME2
: Der Name des zweiten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE2
: Der Wert des zweiten Labels, der auf Ihren Job angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit dem Befehlgcloud batch jobs submit
und den folgenden Flags:gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen Containerjob in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, die auf die Jobs selbst angewendet werden sollen, senden Sie eine POST
-Anfrage an die Methode jobs.create
und geben Sie das Feld labels
an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello World!"
]
}
}
]
}
}
],
"labels": {
"JOB_LABEL_NAME1": "JOB_LABEL_VALUE1",
"JOB_LABEL_NAME2": "JOB_LABEL_VALUE2"
}
}
Ersetzen Sie Folgendes:
JOB_LABEL_NAME1
: Der Name des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE1
: Der Wert des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_NAME2
: Der Name des zweiten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE2
: Der Wert des zweiten Labels, das auf Ihren Job angewendet werden soll.
Java
Node.js
Python
Benutzerdefinierte Labels für ausführbare Dateien definieren
Labels, die im Feld labels
für ein ausführbares Programm definiert sind, werden nur auf dieses Programm angewendet.
Sie können Labels für ein oder mehrere ausführbare Dateien definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
gcloud
So erstellen Sie beispielsweise einen Job in us-central1
, der zwei benutzerdefinierte Labels definiert, ein benutzerdefiniertes Label für jedes der beiden Runnables des Jobs:
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und die
runnables.labels
-Felder angibt.{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello from task ${BATCH_TASK_INDEX}!" ] }, "labels": { "RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1" } }, { "script": { "text": "echo Hello from task ${BATCH_TASK_INDEX}!" }, "labels": { "RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1" } } ] } } ] }
Ersetzen Sie Folgendes:
RUNNABLE1_LABEL_NAME1
: Der Name des Labels, das auf das erste ausführbare Element des Jobs angewendet werden soll.RUNNABLE1_LABEL_VALUE1
: Der Wert des Labels, der auf das erste ausführbare Element des Jobs angewendet werden soll.RUNNABLE2_LABEL_NAME1
: Der Name des Labels, das auf das zweite ausführbare Element des Jobs angewendet werden soll.RUNNABLE2_LABEL_VALUE1
: Der Wert des Labels, der auf das zweite ausführbare Element des Jobs angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit dem Befehlgcloud batch jobs submit
.gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen Job in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, eines für jedes der beiden Runnables des Jobs, senden Sie eine POST
-Anfrage an die Methode jobs.create
und geben Sie die Felder runnables.labels
an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello from ${BATCH_TASK_INDEX}!"
]
},
"labels": {
"RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1"
}
},
{
"script": {
"text": "echo Hello from ${BATCH_TASK_INDEX}!"
},
"labels": {
"RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1"
}
}
]
}
}
]
}
Ersetzen Sie Folgendes:
RUNNABLE1_LABEL_NAME1
: Der Name des Labels, das auf das ausführbare Element des ersten Jobs angewendet werden soll.RUNNABLE1_LABEL_VALUE1
: Der Wert des Labels, der auf das ausführbare Element des ersten Jobs angewendet werden soll.RUNNABLE2_LABEL_NAME1
: Der Name des Labels, das auf das ausführbare Element des zweiten Jobs angewendet werden soll.RUNNABLE2_LABEL_VALUE1
: Der Wert des Labels, der auf das ausführbare Element des zweiten Jobs angewendet werden soll.
Java
Node.js
Python
Nächste Schritte
Sie können Labels als Filter verwenden, wenn Sie Folgendes tun: