He estado pensando en un trabajo de Jenkins para verificar el precio de las cajas de agente que hacemos girar; De vez en cuando el precio sube y pasará una o dos horas antes de que alguien note que no hay nuevos agentes, y luego tenemos que entrar manualmente y verificar el precio spot y ajustarlo en consecuencia, o cambiar de zona, etc.
Mi primer instinto fue que la mejor ruta es tener un trabajo de Jenkins por hora que ejecute aws ec2 describe-spot-instance-requests
y verifique si hay solicitudes fallidas (y luego nos detiene en caso de falla). Pero me pregunto si hay un método más limpio que implique realmente comparar precios duros (y, por lo tanto, podría decirnos exactamente qué está mal y por cuánto), en lugar de mirar solicitudes exitosas / fallidas.
¿Alguien configuró algo similar? Como lo hiciste
Respuestas:
Descubrí una herramienta de código abierto llamada autospotting que podría ayudar con esto:
Tenemos esto en nuestra cartera de tareas pendientes, podremos agregar más contexto una vez que terminemos eso.
Actualizar:
Otra herramienta que se demostró recientemente en una conferencia fue mapbox / spotswap
Esto funciona de manera ligeramente diferente. Supervisa un ASG normal con instancias bajo demanda o reservadas y luego, si surge la escala, las ofertas y las provisiones detectan instancias de nivel de proceso similar en un ASG separado.
fuente
Yo personalmente consideraría un modelo como este:
Luego, cuando necesite instancias:
También podría establecer algunas tolerancias dentro de las lambdas (es decir, 10, 25, 50% de aumento según la importancia) y un límite máximo de demanda, por ejemplo. También es un gran lugar para construir la lógica para manejar, por ejemplo, encontrar el AZ más barato, encontrar el precio spot relativamente más barato (
2xt2.medium
vst2.large
), etc.fuente
Permíteme darte una forma agnóstica de tratar de hacer esto.
Nos enfrentamos al mismo problema en la infraestructura que estamos construyendo. Entonces, teníamos
if-else
bloques de estilo para establecer el precio de oferta, dependiendo del precio a pedido de la instancia.AWS tiene una API para obtener el precio a pedido de una instancia. Utilizamos este envoltorio de Python para este propósito.
Así, una vez que llegamos el precio bajo demanda (digamos
X
), nos metimos enif-else
bloques de estilo, que son0.4*X
,0.6*X
,0.8*X
,X
, lo que significa que estamos tratando de tener un precio de oferta en el rango de 40%, 60%, 80% de la de -precio de la demanda. Si todo falla, entonces volveremos a crear instancias bajo demanda.Además, como esto es independiente del precio actual de AWS, nunca pagamos un precio por encima del precio bajo demanda.
Pero, si está buscando una manera de hacerlo sobre la marcha, entonces la solución de Hashfyre debería ser el camino a seguir.
fuente