Ich habe über einen Job bei Jenkins nachgedacht, um die Preise für die Agentenkisten zu überprüfen, die wir aufdrehen. Ab und zu steigt der Preis und es wird ein oder zwei Stunden dauern, bis jemand merkt, dass keine neuen Agenten kommen, und dann müssen wir manuell hineingehen und den Kassakurs überprüfen und entsprechend anpassen oder Zonen wechseln usw.
Mein erster Instinkt war, dass der beste Weg darin besteht, einen stündlichen Jenkins-Job auszuführen, der a aws ec2 describe-spot-instance-requests
ausführt und nach fehlgeschlagenen Anforderungen sucht (und uns dann über einen Fehler hinwegtäuscht). Aber ich frage mich, ob es eine sauberere Methode gibt, bei der tatsächlich harte Preise verglichen werden (und daher genau angegeben werden kann, was und um wie viel passiert), anstatt erfolgreiche / fehlgeschlagene Anfragen zu prüfen.
Hat jemand etwas ähnliches eingerichtet? Wie hast du es gemacht?
Antworten:
Es wurde ein Open Source-Tool namens Autospotting entdeckt , das möglicherweise dabei hilft:
Wir haben dies in unserer zu erledigenden Pipeline. Sobald wir damit fertig sind, können wir mehr Kontext hinzufügen.
Aktualisieren:
Ein weiteres Tool, das kürzlich in einer Konferenz vorgeführt wurde, war Mapbox / Spotswap
Das funktioniert etwas anders. Es überwacht eine normale ASG entweder mit On-Demand- oder Reserved-Instanzen und stellt dann, falls sich eine Skalierung ergibt, Gebote und Provisionen auf einer separaten ASG für Instanzen mit ähnlichem Rechenlevel zur Verfügung.
quelle
Ich persönlich würde ein Modell wie dieses in Betracht ziehen:
Dann, wenn Sie Instanzen benötigen:
Sie können auch einige Toleranzen innerhalb der Lambdas (dh 10, 25, 50% Erhöhungen je nach Wichtigkeit) und eine feste Obergrenze für On-Demand festlegen. Es ist auch ein großartiger Ort, um die Logik zu entwickeln, um beispielsweise den billigsten AZ, den relativ billigsten Spot-Preis (
2xt2.medium
vst2.large
) usw. zu finden.quelle
Lassen Sie mich Ihnen eine werkzeugunabhängige Möglichkeit geben, dies zu versuchen.
Wir hatten das gleiche Problem mit der Infrastruktur, die wir aufbauen. Wir hatten also
if-else
Stilblöcke, um den Gebotspreis abhängig vom On-Demand-Preis der Instanz festzulegen.AWS verfügt über eine API zum Abrufen des On-Demand-Preises einer Instanz. Wir haben diesen Python-Wrapper für diesen Zweck verwendet.
Also, wenn wir die On-Demand - Preis bekommen (sagen wir mal
X
), wir gestecktif-else
Artblöcke, die sind0.4*X
,0.6*X
,0.8*X
,X
, die Mittel , die wir für einen Geldkurs im Bereich von 40% versuchen, 60%, 80% des auf -nachfrage preis. Wenn alles fehlschlägt, greifen wir auf die Erstellung von On-Demand-Instanzen zurück.Da dies unabhängig von den aktuellen Spotpreisen von AWS ist, zahlen wir niemals einen Preis über dem On-Demand-Preis.
Wenn Sie jedoch nach einer Möglichkeit suchen, dies im Handumdrehen zu tun, ist die Lösung von Hashfyre der richtige Weg.
quelle