Zastanawiałem się nad pracą Jenkinsa, by sprawdzić ceny pudełek agentów, które rozwijamy; co jakiś czas gwałtowne wzrosty cen i minie godzina lub dwie, zanim ktokolwiek zauważy, że nie pojawiają się nowi agenci, a następnie musimy wejść ręcznie i sprawdzić cenę spotową i odpowiednio ją dostosować lub zmienić strefy itp.
Mój pierwszy instynkt polegał na tym, że najlepszą drogą jest cogodzinne zadanie Jenkinsa, które uruchamia aws ec2 describe-spot-instance-requests
i sprawdza, czy nie ma nieudanych żądań (a następnie zwalnia nas z błędu). Zastanawiam się jednak, czy istnieje czystsza metoda, która polega na porównywaniu twardych cen (i dlatego mogłaby powiedzieć nam dokładnie, co jest nie tak i o ile), zamiast patrzeć na udane / nieudane żądania.
Czy ktoś skonfigurował coś podobnego? Jak to zrobiłeś?
Odpowiedzi:
Zauważyłem narzędzie typu open source o nazwie autospotting, które może pomóc:
Mamy to w przygotowaniu, będziemy w stanie dodać więcej kontekstu, kiedy to zakończymy.
Aktualizacja:
Kolejnym narzędziem, które niedawno zostało zaprezentowane podczas konferencji, było mapbox / Spotwap
Działa to nieco inaczej. Monitoruje normalny ASG za pomocą instancji On-Demand lub Reserved, a następnie, jeśli pojawi się skala, oferty i rezerwy wykrywają instancje o podobnym poziomie obliczeniowym na osobnym ASG.
źródło
Osobiście rozważyłbym taki model:
Gdy potrzebujesz instancji:
Można również ustawić pewne tolerancje w ramach lambdas (tj. 10, 25, 50% wzrostów w zależności od ważności) i na przykład twardy limit zapotrzebowania na żądanie. Jest to również świetne miejsce do zbudowania logiki do obsługi, na przykład znalezienia najtańszej AZ, znalezienia stosunkowo najtańszej ceny spotowej (
2xt2.medium
vst2.large
) itp.źródło
Pozwól, że podam ci próbę zrobienia tego bez użycia narzędzi.
Ten sam problem napotkaliśmy w infrastrukturze, którą budujemy. Mieliśmy więc
if-else
bloki stylu, aby ustawić cenę oferty, w zależności od ceny instancji na żądanie.AWS posiada interfejs API do uzyskiwania ceny instancji na żądanie. W tym celu wykorzystaliśmy to opakowanie w języku Python .
Więc kiedy dostaliśmy cenę na żądanie (powiedzmy
X
), podłączyliśmy wif-else
blokach typu, które są0.4*X
,0.6*X
,0.8*X
,X
, co oznacza, że próbują za cenę kupna w granicach 40%, 60%, 80% ceny na -potrzebna cena. Jeśli wszystko zawiedzie, wracamy do tworzenia instancji na żądanie.Ponieważ jest to niezależne od aktualnych cen spotowych AWS, nigdy nie płacimy ceny wyższej niż cena na żądanie.
Ale jeśli szukasz sposobu na zrobienie tego w locie, rozwiązaniem powinno być rozwiązanie Hashfyre.
źródło