
Tengo un grupo de instancias administrado con escalado automático.
Cada instancia ejecuta un programa que sondea un sitio remoto y pregunta "¿tiene algún trabajo para mí?" Si la respuesta es "no", se duerme unos segundos y repite. Consideramos esto uninactivoinstancia. De lo contrario, recibe instrucciones sobre qué hacer, se marca a sí mismo.ocupado, hace lo que tiene que hacer (puede tardar desde unos minutos hasta unas horas), devuelve los resultados y vuelve a serinactivo.
Quiero que el escalador automático se asegure de que siempre haya al menos unoinactivopor ejemplo, para que pueda seleccionar cualquier trabajo disponible. No puede estar basado en CPU, ya que los trabajos pueden pasar cantidades significativas de tiempo sin usar mucha CPU, o es posible que no tengan suficiente paralelismo para usar todos los núcleos, etc.
Si fuera posible para el escalador automático extraer un servidor de métricas arbitrario para una métrica particular, la vida sería simple: cada instancia ya está ejecutando un exportador de nodos de Prometheus, por lo que puede exportar una métrica comoestá ocupado, establecido en 0 o 1, que Prometheus luego puede agregar, agregar 1 a la suma y exportar como la métrica que el escalador automático podría usar. Pero esto no es posible.
La documentación de Google sobre cómo usar las métricas de Prometheus para el escalador automático, aunque está vinculada desde la página GCE MIG, solo habla de cómo hacerlo paraKubernetesescalado automático, que, por supuesto, no es lo que estoy usando aquí.
Ya he pensado en hacer que las instancias creen una métrica de controlador de pila personalizada, que actualizan, pero si la instancia muere antes de actualizar su métrica a 0, nunca se restablecerá, por lo que el escalador automático no lo sabrá.
Esto no puede ser muy difícil o poco común (o eso, o no puedo pensar en los términos correctos para buscar :()). ¿Alguna sugerencia?