Estive pensando em um trabalho de Jenkins para verificar o preço das caixas de agente que fabricamos; de vez em quando o preço aumenta e leva uma ou duas horas antes que alguém perceba que não há novos agentes chegando, e então precisamos entrar manualmente e verificar o preço à vista e ajustar de acordo, ou mudar de zona etc.
Meu primeiro instinto foi que o melhor caminho é ter um trabalho Jenkins por hora que execute aws ec2 describe-spot-instance-requests
ae verifique se há solicitações com falha (e depois nos atrasa em uma falha). Mas estou imaginando se existe um método mais limpo que envolva realmente comparar preços rígidos (e, portanto, poderia nos dizer exatamente o que está acontecendo e quanto), em vez de analisar solicitações bem-sucedidas / com falha.
Alguém criou algo semelhante? Como você fez isso?
Respostas:
Detectou uma ferramenta de código aberto chamada autospotting que pode ajudar com isso:
Temos isso em nosso pipeline de tarefas, poderemos adicionar mais contexto assim que terminarmos.
Atualizar:
Outra ferramenta que foi recentemente demonstrada em uma conferência foi mapbox / spotswap
Isso funciona de maneira um pouco diferente. Ele monitora um ASG normal com instâncias On Demand ou Reservadas e, em seguida, se houver escala, os lances e as provisões detectam instâncias de nível de computação semelhante em um ASG separado.
fonte
Eu pessoalmente consideraria um modelo como este:
Então, quando você precisar de instâncias:
Você também pode definir algumas tolerâncias dentro das lambdas (ou seja, 10, 25, 50% de aumento com base na importância) e um limite máximo de demanda, por exemplo. Também é um ótimo lugar para construir a lógica para lidar com, por exemplo, encontrar o AZ mais barato, encontrar o preço spot relativamente mais barato (
2xt2.medium
vst2.large
) etc.fonte
Deixe-me dar uma maneira independente de ferramenta de tentar fazer isso.
Enfrentamos o mesmo problema na infraestrutura que estamos construindo. Portanto, tínhamos
if-else
blocos de estilo para definir o preço da oferta, dependendo do preço sob demanda da instância.A AWS possui uma API para obter o preço sob demanda de uma instância. Usamos esse wrapper Python para esse fim.
Assim, uma vez que temos o preço on-demand (digamos
X
), nós ligadoif-else
blocos de estilo, que são0.4*X
,0.6*X
,0.8*X
,X
, o que significa que estão tentando para um preço de oferta na faixa de 40%, 60%, 80% do on preço sob demanda. Se tudo falhar, voltaremos a criar instâncias sob demanda.Além disso, como isso é independente dos preços spot atuais da AWS, nunca pagamos um preço acima do preço sob demanda.
Mas, se você estiver procurando uma maneira de fazê-lo on-the-fly, a solução da Hashfyre deve ser o caminho a seguir.
fonte