Verfügbarkeit durch Instanzflexibilität verbessern

In diesem Dokument wird beschrieben, wie Sie einen Batch-Job erstellen und ausführen, der die Flexibilität von Instanzen nutzt. Mit der Instanzflexibilität können Sie festlegen, dass ein Job auf mehreren von Ihnen angegebenen Maschinentypen ausgeführt werden darf. Optional können Sie die Maschinentypen auch nach Priorität ordnen.

Wenn Sie mehr Maschinentypen für einen Job zulassen, können Sie die Instanzflexibilität nutzen, um die Verfügbarkeit zu verbessern. Das ist die Wahrscheinlichkeit, dass Ressourcen zum Ausführen Ihres Jobs verfügbar sind. Weitere Informationen zur Auswahl der Verfügbarkeitsfunktionen für Ihre Arbeitslast finden Sie unter Verfügbarkeit von Ressourcen verbessern. Die Instanzflexibilität kann Ihnen beispielsweise bei Folgendem helfen:

  • Die Wahrscheinlichkeit von Ressourcenverfügbarkeitsfehlern und damit verbundenen Terminverzögerungen wird verringert.
  • Wählen Sie Ressourcen mit höherer Verfügbarkeit aus, damit Jobs schneller abgeschlossen werden können, z. B.:
    • Die Wahrscheinlichkeit erhöhen, dass mehr Instanzen für Jobs bereitgestellt werden, die parallele Verarbeitung unterstützen.
    • Spot-VMs verwenden, die seltener vorzeitig beendet werden.

Hinweis

  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. 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

Wenn für einen Job die Instanzflexibilität verwendet wird, gelten alle folgenden Einschränkungen:

  • Die Verfügbarkeit steigt mit der Anzahl der Maschinentypen, die für einen Job verwendet werden dürfen.

  • Im Job kann das Bereitstellungsmodell FLEX_START oder RESERVATION_BOUND nicht angegeben werden.

  • Der Job kann keine gezielte Reservierung nutzen. (Das Feld reservation muss undefiniert oder auf NO_RESERVATION gesetzt sein.)

    Eine speziell ausgewählte Reservierung umfasst alle Reservierungen für das Bereitstellungsmodell RESERVATION_BOUND und einige Reservierungen für das Bereitstellungsmodell STANDARD. Diese Funktionen sind von Natur aus inkompatibel, da die Instanzerstellung nur für den Maschinentyp der Reservierung erfolgreich sein kann.

  • Jeder Job kann bis zu 50 Instanzauswahlen haben.

  • Jede Instanzauswahl in einem Job muss einen eindeutigen Namen, einen eindeutigen Rang und einen oder mehrere eindeutige Maschinentypen haben.

  • Maschinentypen dürfen nicht wiederholt werden. Jeder Maschinentyp darf nur in einer Instanzauswahl pro Job enthalten sein.

  • Für jeden Job können in den Instanzauswahlen bis zu 200 eindeutige Maschinentypen angegeben werden.

  • Die Angabe mehrerer Maschinentypen in derselben Instanzauswahl ist optional, aber erforderlich, wenn Sie Ressourcen mit höherer Verfügbarkeit benötigen.

    • Bei Batch wird versucht, nur einen oder mehrere Maschinentypen mit der höchsten Verfügbarkeit auszuwählen, wenn für einen Rang mehrere Maschinentypen in der Instanzauswahl vorhanden sind. Diese Auswahl ist beispielsweise wichtig, wenn Sie möchten, dass Ihr Job Spot-VMs verwendet, die weniger wahrscheinlich vorzeitig beendet werden, oder mehr Instanzen für einen Job, der Aufgaben parallel ausführen kann.
    • Andernfalls, wenn die Instanzauswahl für einen Rang nur einen Maschinentyp enthält, hilft die Instanzflexibilität nur, Fehler bei der Ressourcenverfügbarkeit zu vermeiden.
  • Der Job darf das machineType-Feld nicht enthalten und der Maschinentyp für alle Instanzvorlagen, die im Job angegeben sind, wird ignoriert.

  • Sie müssen prüfen, ob jede Eigenschaft, die Sie für den Job angeben, mit jedem zulässigen Maschinentyp kompatibel ist. Andernfalls kann der Job nach dem Senden fehlschlagen, weil keine Instanzen erstellt werden können. Wir empfehlen Ihnen beispielsweise, zu prüfen, ob mindestens die folgenden Eigenschaften eines Jobs mit allen Maschinentypen kompatibel sind:

    • Standort (falls angegeben, Feld allowedLocations[]; andernfalls location)
    • Compute-Ressourcen pro Aufgabe (Feld computeResource)
    • Laufwerke und Images (Feld volumes[], Feld disk[] und Feld bootDisk)
    • Netzwerk (network-Feld)
    • Alle anderen Instanzeigenschaften (instances[]-Unterfelder):

      • Mindest-CPU-Plattform (Feld minCpuPlatform)
      • Bereitstellungsmodell (provisioningModel-Feld)
      • GPUs (accelerators[]-Feld)
  • Sie können keine Überschreibungen für Datenträger und Mindest-CPU-Plattformen für Batchjobs festlegen. Für alle Maschinentypen werden entweder die von Ihnen angegebenen Werte (in den policy-Unterfeldern oder einer Instanzvorlage) oder, falls nicht angegeben, die Standardwerte für einen Maschinentyp in der Instanzauswahl mit der höchsten Priorität verwendet. Wir empfehlen daher Folgendes:

    • Prüfen Sie, ob der Bootlaufwerktyp für jeden zulässigen Maschinentyp kompatibel ist. Zusammenfassend lässt sich sagen, dass Maschinentypen der 4. Generation und höher keine nichtflüchtigen Speicher unterstützen, Maschinentypen der 2. Generation und niedriger keine Hyperdisk und Maschinentypen der 3. Generation und niedriger standardmäßig nichtflüchtige Bootlaufwerke verwenden.

    • Geben Sie keine Mindest-CPU-Plattform oder optionalen Laufwerke an, es sei denn, Sie haben überprüft, dass sie für jeden zulässigen Maschinentyp unterstützt werden.

Job erstellen, der mehrere Maschinentypen verwenden darf

Wenn Sie einen Job erstellen möchten, der mehrere Maschinentypen verwenden darf, wählen Sie eine der folgenden Methoden aus.

gcloud

Wenn Sie mehrere Maschinentypen konfigurieren möchten, während Sie mit der Google Cloud CLI einen Job erstellen, führen Sie die folgenden Schritte aus:

  1. Fügen Sie das Feld instanceFlexibilityPolicy und die Unterfelder in das Feld allocationPolicy in der JSON-Datei ein, in der die Konfigurationsdetails Ihres Jobs angegeben sind. Das Feld instanceFlexibilityPolicy unterstützt eine oder mehrere Instanzauswahlen, die jeweils einen eindeutigen Namen, einen eindeutigen Rang und eine Liste mit einem oder mehreren Maschinentypen haben.

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    Ersetzen Sie Folgendes:

    • INSTANCE_SELECTION_NAME: ein Name für die Instanzauswahl. Wenn der Job mehrere Instanzauswahlen hat, muss jeder Name in diesem Job eindeutig sein.

    • RANK (optional): Eine Ganzzahl von null oder höher, die die Priorität für diese Instanzauswahl darstellt. Der niedrigste Wert hat die höchste Priorität. Wenn keine Angabe erfolgt, ist der Standardwert 0 (höchste Priorität). Wenn der Job mehrere Instanzauswahlen hat, muss jeder Rang in diesem Job eindeutig sein.

    • MACHINE_TYPES: Eine durch Kommas getrennte Liste mit einem oder mehreren Maschinentypen, die als Strings für diese Instanzauswahl geschrieben werden. Sie können jeden Maschinentyp nur in einer Instanzauswahl pro Job verwenden. Eine Liste mit drei Maschinentypen kann beispielsweise so geschrieben werden:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      Ersetzen Sie MACHINE_TYPE_1, MACHINE_TYPE_2 und MACHINE_TYPE_3 jeweils durch einen Maschinentyp, z. B. e2-micro, e2-small und n1-standard-2.

    Weitere Informationen finden Sie auch im Beispieljob.

  2. Solange sich diese Funktion in der Vorschau befindet, müssen Sie den gcloud alpha batch jobs submit-Befehl verwenden, um den Job zu erstellen und einzureichen.

    gcloud alpha 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.

REST

Wenn Sie mit der Batch API einen Job erstellen möchten, der mehrere Maschinentypen verwendet, verwenden Sie die v1alpha-Methode jobs.create, solange sich diese Funktion in der Vorschau befindet.

Wenn Sie mehrere Maschinentypen für einen Job angeben möchten, fügen Sie das Feld instanceFlexibilityPolicy und die Unterfelder im Feld allocationPolicy im Hauptteil der JSON-Datei ein. Das Feld instanceFlexibilityPolicy unterstützt eine oder mehrere Instanzauswahlen, die jeweils einen eindeutigen Namen, einen eindeutigen Rang und eine Liste mit einem oder mehreren Maschinentypen haben.

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

Ersetzen Sie Folgendes:

  • INSTANCE_SELECTION_NAME: ein Name für die Instanzauswahl. Wenn der Job mehrere Instanzauswahlen hat, muss jeder Name in diesem Job eindeutig sein.

  • RANK (optional): Eine Ganzzahl von null oder höher, die die Priorität für diese Instanzauswahl darstellt. Der niedrigste Wert hat die höchste Priorität. Wenn keine Angabe erfolgt, beträgt der Standardwert 0 (höchste Priorität). Wenn für den Job mehrere Instanzen ausgewählt wurden, muss jeder Rang in diesem Job eindeutig sein.

  • MACHINE_TYPES: Eine durch Kommas getrennte Liste mit einem oder mehreren Maschinentypen, die als Strings für diese Instanzauswahl geschrieben werden. Sie können jeden Maschinentyp nur in einer Instanzauswahl pro Job verwenden. Eine Liste mit drei Maschinentypen kann beispielsweise so geschrieben werden:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    Ersetzen Sie MACHINE_TYPE_1, MACHINE_TYPE_2 und MACHINE_TYPE_3 jeweils durch einen Maschinentyp, z. B. e2-micro, e2-small und n1-standard-2.

Weitere Informationen finden Sie auch im Beispieljob.

Beispiel für eine JSON-Konfigurationsdatei für einen Job

Wenn Sie beispielsweise die gcloud CLI oder die Batch API verwenden, können Sie die folgende JSON-Konfigurationsdatei verwenden, um einen einfachen Skriptjob mit zwei Instanzauswahlen zu erstellen:

  • Die Instanzauswahl mit dem Namen first-choice hat die höchste Priorität ("rank": 0) und drei Maschinentypen (e2-micro, e2-small und n1-standard-2).
  • Die Instanzauswahl mit dem Namen second-choice hat die zweite Priorität ("rank": 1) und einen Maschinentyp (e2-medium).
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

Nächste Schritte