Me gustaría saber cómo configurar esta herramienta para comenzar con un número mínimo de nodos y crecer hasta un número máximo de nodos cuando sea necesario.
¿Debo usar otra herramienta o Docker Swarm puede resolver esto por mí?
Respuesta corta : no hay una manera fácil de hacer esto con Docker Swarm por ahora.
Docker Swarm (o el modo Swarm) no admite máquinas de escalado automático listas para usar. Necesitaría usar otra solución para eso, como docker-machine para crear máquinas (con docker) en su infraestructura y vincularlas al clúster Swarm existente (con docker swarm join ).
Esto implicará una gran cantidad de secuencias de comandos, pero la idea es monitorear el clúster para el uso de CPU/Memoria/Red (con top o monit ) y una vez que supera un umbral (digamos el 70% de los recursos totales del clúster), desencadena una llamada de secuencia de comandos docker-machine para escalar el clúster. Con la misma idea, también puede reducir la escala mediante el drenaje y la eliminación de nodos (preferiblemente nodos de Agent ) del clúster de enjambre existente una vez que esté por debajo del umbral inferior.
Debe asegurarse de estar monitoreando el uso sostenido de los recursos si desea utilizar este criterio o tendrá su infraestructura generando y destruyendo nodos debido a los cambios frecuentes y repentinos en el uso de los recursos.
Puede definir un límite inferior y un límite superior para las máquinas en el clúster para mantener las cosas bajo control.
Tenga en cuenta que Swarm requiere al menos 3 nodos de Manager (se recomiendan 5) para mantener un quórum para el algoritmo de consenso distribuido. Por lo tanto , el límite inferior mínimo recomendado es de 5 nodos (que puede ampliar con los nodos de Agent a medida que los servicios utilizan los recursos de forma incremental).
Hasta cierto punto, también puede echar un vistazo a Docker InfraKit o Terraform para la automatización de la infraestructura y el control de la salud .
Actualización : ahora hay un prometedor escalador automático multiplataforma que admite el escalado automático de tareas en modo Swarm: Orbiter . Aunque todavía no hay nada listo para usar para el escalado automático de servicio/máquina.
Ampliar es bastante fácil. Puede seguir programando contenedores cuando sea necesario. Luego, simplemente crea un script que busca un contenedor pendiente y amplía el clúster. Por ejemplo, si está utilizando la plantilla oficial de CloudFormation en aws for swarm, puede cambiar el número deseado en el grupo de ajuste de escala automático. Un script de iteración de ejemplo podría verse así:
services=$(docker service ls --format '{{.ID}}') for service in $services; do tasks=$(docker service ps $service --format '{{.ID}}') for task in $tasks; do if docker inspect $task --format '{{.Status}}' | grep 'insufficient resources' 1>/dev/null; then scale-up-cmd fi done done