Ich möchte die Kosten unserer automatisch skalierenden EC2-Gruppen optimieren, indem sie Spot-Instanzen anstelle von On-Demand-Instanzen starten.
Was ich wirklich möchte, ist, dass einige Server als On-Demand-Instanzen in der Gruppe bleiben können, unabhängig davon, was mit dem Preismarkt für Spotinstanzen passiert. Dann möchte ich, dass alle zusätzlichen Server in der Gruppe, die über meinem konfigurierten Minimum liegen, Spot-Instanzen sind. Ich bin im Allgemeinen mit der Verzögerung beim Hinzufügen von Servern über Spot-Anfragen einverstanden.
Ich kann anscheinend keinen Weg finden, dies zu tun, und ich habe versucht, die AWS-Dokumentation zu durchsuchen. Es scheint, dass eine ASG entweder auf Abruf oder vor Ort sein kann, aber kein Hybrid.
Ich könnte möglicherweise manuell eine On-Demand-Instanz zum Elastic Load Balancer hinzufügen, der der Auto-Scaling-Gruppe zugewiesen ist, aber dann würde die Last dieses Servers nicht in die Auto-Scaling-Messungen und -Trigger einbezogen.
Ich nehme an, ich könnte einen lächerlich hohen Gebotspreis eingeben, um sicherzustellen, dass ich immer die Server bekomme, die ich brauche, aber dann schaue ich mir die Preisentwicklung an und sehe gelegentlich große Spitzen.
Die AWS-Dokumentation widerspricht sich selbst, da an einer Stelle angegeben wird, dass bei Eingabe eines Server-Minimums sichergestellt ist, dass diese Anzahl vorhanden ist. Aber wenn Sie über Spot-Instanzen lesen, gibt es keine Zusicherungen. Die Preisdifferenz für Spot ist überzeugend, daher möchte ich diese so weit wie möglich nutzen und gleichzeitig eine stets aktuelle Basis beibehalten. Ist das möglich?
quelle
Der oben diskutierte Ansatz wäre etwas chaotisch und nicht so flexibel. Der kanonischere Ansatz besteht darin, nur zwei ASGs zu erstellen (eine für Spot- und eine für On-Demand) und diese dann beide bei derselben ELB zu registrieren ( hier beschrieben ). Dies gibt Ihnen die Möglichkeit, jedes einzeln zu steuern, anstatt zu versuchen, mit LC-Swaps in einem einzigen ASG zu spielen.
quelle
Dieser hybride Auto-Scaling- Ansatz scheint leider nicht sofort verfügbar zu sein.
Möglicherweise können Sie diese Einschränkung jedoch wie folgt umgehen (ungetestet, nur ein Systemdesign, mit dem ich schon eine Weile jongliert habe):
Mögliche Problemumgehung
Wie unter Verwenden der automatischen Skalierung zum Starten von Spot-Instanzen beschrieben , ist das Spot-Preis-Gebot ein Parameter der verwendeten Startkonfiguration . Wie Sie bereits betont haben, ist keine Hybridstartkonfiguration verfügbar, sondern muss entweder bei Bedarf oder vor Ort sein. Dies bedeutet, dass für den Anwendungsfall zwei verschiedene Startkonfigurationen erforderlich sind.
Dies scheint nicht sofort zu helfen, da Sie einer Auto Scaling-Gruppe jeweils nur eine Startkonfiguration mit den folgenden (teilweise veralteten) Einschränkungen zuordnen können (siehe Startkonfiguration ):
Die betonten Teile sind der Schlüssel aber mit dem ehemaligen der Forderung Deckung der On-Demand - Instanzen zu halten , nachdem sie von der jeweiligen Anfangs On-Demand - Startkonfiguration der zusätzlichen Punktstartkonfiguration zu ändern läuft, und diese nicht unbedingt der Fall sein mehr aufgrund Die kürzlich eingeführten Richtlinien zur Beendigung der automatischen Skalierung (zur Abwechslung gab es normalerweise keine Fanfare über einen begleitenden AWS-Blogbeitrag), dokumentiert in der Richtlinie zur Beendigung der automatischen Skalierung für Ihre automatische Skalierungsgruppe :
Wie in umrissener Wie Sie Ihre Kündigung Politik Works , können Sie nun festlegen , NewestInstance , wenn Sie die letzte Instanz gestartet wollen beendet werden , die vor kurzem ins Leben gerufen Spot - Instanzen eine der sein würde:
Natürlich kann dies etwas mehr sein, z. B. können Sie entweder eine der Richtlinien als eigenständige Richtlinie angeben oder mehrere Richtlinien in einer geordneten Liste auflisten. Dieser Ansatz sollte jedoch sicherstellen, dass alle Instanzen in die Liste einbezogen werden automatische Skalierung von Messungen und Triggern ; Eine Einschränkung bleibt jedoch:
Vorbehalt
Wenn der Load Balancer eine der On-Demand-Instanzen aus einem anderen Grund beendet (z. B. weil sie an sich ungesund geworden ist), wird sie nicht automatisch durch eine On-Demand-Instanz ersetzt. Sie müssen dieses Ereignis also separat überwachen und berücksichtigen, z. B. indem Sie die On-Demand-Startkonfiguration vorübergehend erneut aktivieren.
Viel Glück!
quelle
Ich habe mich von den Antworten hier inspirieren lassen, um https://github.com/ashwanthkumar/matsya zu finden
Es hilft Ihnen dabei, Folgendes zu tun
quelle
Wenn Sie nur 1 ASG mit einer statischen Anzahl von On-Demand-Instanzen möchten, sollte Folgendes funktionieren:
Erstellen Sie eine Auto Scaling-Gruppe basierend auf der Spot Instance Launch-Konfiguration.
Unterbrechen Sie die automatische Skalierung in ASG
Fügen Sie ASG manuell On-Demand-Instanzen (statische Grundlast) hinzu und aktivieren Sie den Instanzschutz für diese Instanzen.
Setzen Sie die automatische Skalierung in ASG fort
Die Standardrichtlinie für die automatische Skalierung ignoriert jetzt die On-Demand-Instanzen (aus Schutzgründen) und beendet die gleiche Anzahl von Spot-Instanzen wie die On-Demand-Instanz, um die gewünschte Anzahl der Gruppe zu erreichen. Bei Scale-In- oder Out-Aktivitäten werden nur Spot-Instanzen gestartet oder beendet.
quelle