Verfügbarkeit durch Instanzflexibilität verbessern

In diesem Dokument wird beschrieben, wie Sie einen Batchjob erstellen und ausführen, der die Instanzflexibilität nutzt. Mit der Instanzflexibilität können Sie einen Job auf mehreren von Ihnen angegebenen Maschinentypen ausführen und diese optional einstufen.

Wenn Sie mehr Maschinentypen für einen Job zulassen, können Sie mit der Instanzflexibilität die Verfügbarkeit 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 Ressourcenverfügbarkeit verbessern. Mit der Instanzflexibilität können Sie beispielsweise Folgendes tun:

  • Die Wahrscheinlichkeit von Fehlern bei der Ressourcenverfügbarkeit und damit verbundene Planungsverzögerungen verringern.
  • Ressourcen mit höherer Verfügbarkeit auswählen, damit Jobs schneller abgeschlossen werden können, z. B.:
    • Die Wahrscheinlichkeit erhöhen, mehr Instanzen für Jobs zu erhalten, die parallele Verarbeitung unterstützen.
    • Spot-VMs erhalten, die weniger wahrscheinlich vorzeitig beendet werden.

Hinweis

  1. Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Artikel Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzererfü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 ein Job die Instanzflexibilität nutzt, gelten alle folgenden Einschränkungen:

  • Die Verbesserung der Verfügbarkeit steigt mit der Anzahl der Maschinentypen, die ein Job verwenden darf.

  • Für den Job kann nicht das Bereitstellungsmodell FLEX_START oder RESERVATION_BOUND angegeben werden.

  • Der Job kann keine speziell ausgerichtete Reservierung nutzen. Das reservation Feld muss nicht definiert oder auf NO_RESERVATION gesetzt sein.

    Eine speziell ausgerichtete 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 können nicht wiederholt werden. Jeder Maschinentyp darf nur in einer Instanzauswahl pro Job enthalten sein.

  • Jeder Job kann in seinen Instanzauswahlen bis zu 200 eindeutige Maschinentypen haben.

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

    • Batch versucht nur dann, einen oder mehrere Maschinentypen mit der höchsten Verfügbarkeit auszuwählen, wenn die Instanzauswahl für einen Rang mehrere Maschinentypen enthält. Diese Auswahl ist beispielsweise wichtig, wenn Ihr Job Spot-VMs haben soll, die weniger wahrscheinlich vorzeitig beendet werden, oder mehr Instanzen für einen Job, der Aufgaben parallel ausführen kann.
    • 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. Der Maschinentyp für eine Instanzvorlage, die im Job angegeben ist, 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 beispielsweise, dass Sie prüfen, ob mindestens die folgenden Eigenschaften für einen Job mit allen Maschinentypen kompatibel sind:

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

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

    • Prüfen Sie, ob der Bootlaufwerktyp mit jedem zulässigen Maschinentyp kompatibel ist. Zusammenfassend lässt sich sagen, dass Maschinentypen der 4. Generation und höher keine Persistent Disks unterstützen, Maschinentypen der 2. Generation und niedriger keine Hyperdisk unterstützen und Maschinentypen der 3. Generation und niedriger standardmäßig persistente Bootlaufwerke verwenden.

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

Job erstellen, der mehrere Maschinentypen verwenden darf

Wählen Sie eine der folgenden Methoden aus, um einen Job zu erstellen, der mehrere Maschinentypen verwenden darf.

gcloud

Führen Sie die folgenden Schritte aus, um mehrere Maschinentypen zu konfigurieren, während Sie mit der Google Cloud CLI einen Job erstellen:

  1. Fügen Sie die instanceFlexibilityPolicy Felder und die zugehörigen Unterfelder im allocationPolicy Feld 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 0 oder höher, die die Priorität für diese Instanzauswahl darstellt. Der niedrigste Wert hat die höchste Priorität. Wenn nicht angegeben, 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 sind. Jeder Maschinentyp darf nur in einer Instanzauswahl pro Job enthalten sein. 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. Während sich diese Funktion in der Vorschaubefindet, müssen Sie den gcloud alpha batch jobs submit Befehl verwenden, um den Job zu erstellen und zu senden.

    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 die Batch API verwenden möchten, um einen Job zu erstellen, der mehrere Maschinentypen nutzt, verwenden Sie die v1alpha jobs.create Methode , solange sich diese Funktion in der Vorschau befindet.

Wenn Sie mehrere Maschinentypen für einen Job angeben möchten, fügen Sie das instanceFlexibilityPolicy Feld und Unterfelder im allocationPolicy Feld 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 0 oder höher, die die Priorität für diese Instanzauswahl darstellt. Der niedrigste Wert hat die höchste Priorität. Wenn nicht angegeben, 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 sind. Jeder Maschinentyp darf nur in einer Instanzauswahl pro Job enthalten sein. 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