Spot-Instanzen

Spot-Instanzen sind stark rabattierte Versionen der Standard-Instanzen. Sie sind darauf ausgelegt, verfügbare Rechenressourcen für unterbrechbare oder zustandslose Arbeitslasten zu nutzen. Spot-Instanzen können jederzeit vorzeitig beendet (oder verdrängt) werden.

Mit Spot Instances können Sie das am besten kompatible Profil wählen, das Ihren Workload-Merkmalen, Leistungsanforderungen und Preisvorstellungen entspricht. Spot-Instanzen sind ideal für fehlertolerante, unterbrechbare Arbeitslasten, da IBM Cloud VPC diese Instanzen je nach Ressourcenbedarf vorverlegt.

Spot-Instanzen sind ideal für die folgenden Arbeitslasten, aber nicht darauf beschränkt.

  • Testserver für die Entwicklung
  • Datenanalytik
  • Bild-Rendering
  • Containerisierung
  • Batch-Verarbeitung

Vorteile der Spot-Instanz

Spot-Instanzen haben die folgenden Vorteile.

  • Kostengünstig
  • Skalierbar - Sie können Spot-Instanzen durch Auto-Scale für VPC hinzufügen oder entfernen
  • Spot-Instanzen verwenden nicht die Standard-Instanzquote. Spot-Instanzen haben ihre eigenen Quoten (der Standardwert ist 100).
  • Keine Mindestlaufzeit
  • Größenveränderbar (die Instanz muss zum Ändern der Größe angehalten werden)

Einschränkungen der Spot-Instanz

Spot-Instanzen sind nicht mit den folgenden Funktionen kompatibel.

  • Burstable Instanzen
  • Dedizierte Hosts
  • Reservierungen

Details zu Spot-Instanzen

  • Spot-Instanzen unterstützen nur GPU-Profile und Flex-Profile.
  • Auto Scale und Instanzgruppen unterstützen Spot-Instanzen.
  • Platzierungsgruppen werden unterstützt, aber bedenken Sie, dass die Verwendung von Platzierungsgruppen Kapazitätsfehler verursachen kann.

Spot-Instanzen haben keine garantierte freie Kapazität. Wenn keine Kapazität verfügbar ist, können Sie es in einer anderen Zone oder Region versuchen oder es später noch einmal versuchen.

Instanzprofile haben eine Eigenschaft mit der Bezeichnung availability_class, die entweder "standard", "spot" oder beides ist. Wenn "spot" im Wertefeld enthalten ist, können Sie das Profil verwenden, um eine Spot-Instanz zu erstellen.

Wenn Sie eine Instanz erstellen, müssen Sie eine Reihe neuer Felder festlegen:

  • availability.class muss "spot" sein
  • availability_policy.preemption kann "stoppen" oder "löschen" sein (die Voreinstellung ist "stoppen")

Siehe das folgende Beispiel für die Eigenschaften in einer API-Anfrage.

{
   "availability": {
       "class": "spot"
   },
   "availability_policy": {
       "preemption": "delete"
   },
   ...
}

Zurückstellung

Eine Spot-Instanz wird vorgezogen, wenn die Plattform feststellt, dass es notwendig ist, die Spot-Instanz zu evakuieren. Zu Beginn der Vorkaufsfrist wird die Vorkaufsrichtlinie angewandt, und es beginnt eine Vorkaufsfrist von 30 Sekunden, in der die besten Anstrengungen unternommen werden. Nach Ablauf dieser Nachfrist wird die Spot-Instanz zwangsweise abgeschaltet.

Die Preemption Policy bestimmt das Verhalten der Spot-Instanz, wenn die Instanz preempted wird. Die Eigenschaft availability_policy.preemption hat, wenn sie zu unterstützten Instanzen hinzugefügt wird, den Wert "stop" oder "delete". Diese Eigenschaft gilt nur für Spot-Instanzen, bei denen availability.class = spot.

  • "stop" - die Instanz geht in den "stopped"-Zustand über, wenn die Preemption abgeschlossen ist. Sie können die Instanz erneut starten oder sie löschen.
  • "delete" - die Instanz wird nach der Voreinstellung gelöscht.

Änderungen, die während einer Preemption an der Preemption Policy vorgenommen werden, werden erst bei der nächsten Preemption übernommen.

Sie werden auf zwei Arten über ein Vorkaufsrecht informiert.

  • Im Betriebssystem der Spot-Instanz wird ein Befehl zum ordnungsgemäßen Herunterfahren erteilt. Dieser Shutdown-Befehl kann innerhalb des Gastes programmatisch beantwortet werden.
  • Wenn eine Spot-Instanz für die Preemption ausgewählt wird, wird zu Beginn des Preemption-Prozesses ein benutzerseitiges Protokoll gesendet. Beispiel: " instance.00002 ": "Spot-Instanz {{.instanceID}} ist für Preemption ausgewählt". Nach 30 Sekunden und wenn die Spot-Instanz noch nicht gestoppt ist, wird ein erzwungenes Herunterfahren innerhalb des Gastes durchgeführt. Weitere Informationen zur Protokollierung finden Sie unter Protokollierung für VPC.

Spot-Instanzen, die aufgrund einer Verkleinerung mit einer Instanzgruppe gelöscht werden, gelten nicht als unterbrechungsfrei, so dass die Unterbrechungsrichtlinie ignoriert wird.

Wenn eine Spot-Instanz vorzeitig beendet wird, wird ein Befehl zum geordneten Herunterfahren an das Betriebssystem der Spot-Instanz gesendet. Diese Shutdown-Anforderung kann abgefangen und ein Shutdown-Skript ausgeführt werden, indem das Shutdown-Skript erstellt und zu einer systemd Service-Datei hinzugefügt wird. Ein Beispielskript finden Sie unter usr/local/bin/ibm-cloud-shutdown-script.sh.

#!/bin/bash
OUTPUT_FILE="/tmp/counter.out"
counter=0
while true; do
    echo "$counter" > "$OUTPUT_FILE"
    ((counter++))
    sleep 1
done

Dieses Skript ist ein Platzhalter für die Durchführung eines Shutdowns. Um das Skript aus der Servicedatei systemd auszuführen, fügen Sie den Pfad zu Ihrem Skript in das Feld ExecStop feld der Servicedatei ein, wie im folgenden Beispiel gezeigt.

Beispiel systemd Service-Datei, die sich unter /etc/systemd/system/ibm-cloud-shutdown-script.service befindet:

[Unit]
Description=IBM Cloud Shutdown Script
Wants=network-online.target rsyslog.service
After=network-online.target rsyslog.service
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=true
ExecStop=/usr/local/bin/ibm-cloud-shutdown-script.sh
TimeoutStopSec=0
KillMode=process
[Install]
WantedBy=multi-user.target

Die Zeitspanne zwischen dem Befehl zum geordneten Herunterfahren und dem nachfolgenden Force-Stop-Befehl beträgt 30 Sekunden. Wenn also ein Shutdown-Skript nach Ablauf der 30 Sekunden noch läuft, wird es durch den Force-Stop unterbrochen. Diese 30-Sekunden-Frist ist ein Versuch und kann je nach den Umständen variieren.

Wiedererstellung einer Spot-Instanz mit Hilfe einer Instanzgruppe

Wenn eine Spot-Instanz vorgezogen wird und Mitglied einer Instanzgruppe ist, versucht die Instanzgruppe, eine Spot-Instanz zu erzeugen, um die vorgezogene Spot-Instanz zu ersetzen. Die neue Spot-Instanz wird erstellt und mit einem der Subnetze verbunden, die im Subnetz-Array der Instanzgruppe angegeben sind.

Wenn Sie eine Spot-Instanz nach der Preemption automatisch neu erstellen wollen, können Sie eine Instanzgruppe verwenden, um diese Spot-Instanzen neu zu erstellen.

  1. Erstellen Sie eine Instanzvorlage, die Ihren Bedürfnissen entspricht, mit der Instanz availability.class bis spot und der availability_policy.preemption bis delete.

  2. Erstellen Sie eine Instanzgruppe mit der von Ihnen erstellten Instanzvorlage.

    Um die Wahrscheinlichkeit zu erhöhen, dass Sie Kapazität für Ihre Spot-Instanz finden (wenn die Kapazität in einer Zone begrenzt ist), geben Sie mehrere Subnetze an, die über Zonen in der Region für hohe Verfügbarkeit verteilt sind. { :tip}

Um Ihre Preempted-Instanzen in einem gestoppten Zustand zu halten, müssen Sie stop für die Konfiguration von availability_policy.preemption_ angeben. Nachdem die Spot-Instanz von der Instanzgruppe erstellt wurde, müssen Sie eine PATCH /instance_groups/{instance_group_id}/memberships/{id} übermitteln und false für die Eigenschaft delete_instance_on_membership_delete angeben.