docker swarm - run - ¿Cómo configurar el escalado automático en el enjambre docker?
download docker image (3)
De acuerdo con este problema en GitHub , la autoescala no es compatible en este momento. Uno de los participantes en la discusión indicó que:
No disponible hoy. Swarm usa Docker-Compose para escalar estáticamente. Se necesita supervisión de CPU / QPS para realizar el escalado automático. Enjambre aún no tiene eso.
Se ha preguntado si hay entradas actuales que podrían estar vinculadas a esta pregunta, por lo que se podría implementar esta función.
Me gustaría saber cómo configurar esta herramienta para comenzar con un número mínimo de nodos y crecer a un número máximo de nodos cuando sea necesario.
¿Debo usar otra herramienta o puedo resolver esto por mí?
La ampliación es bastante fácil. Puede seguir programando contenedores cuando sea necesario. Luego simplemente crea un script que busca el contenedor pendiente y amplía el clúster. Por ejemplo, si está utilizando la plantilla oficial de CloudFormation en aws para swarm, solo puede cambiar el número deseado en el grupo de autoescalado. Un ejemplo de script de iteración 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
Respuesta corta : No hay una manera fácil de hacer esto con Docker Swarm por ahora.
El Docker Swarm (o el modo Swarm) no admite máquinas de autoescalado fuera de la caja. 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 la docker swarm join
).
Esto implicará una gran cantidad de secuencias de comandos, pero la idea es monitorear el clúster para el uso de la CPU / memoria / red (con top
o monit
) y una vez que supera un umbral (por ejemplo, el 70% de los recursos totales del clúster), se activa una secuencia de comandos. docker-machine
para ampliar el clúster. Usando la misma idea, también puede reducir la escala al drenar y eliminar los nodos (preferiblemente los nodos del Agent
) del grupo 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 usar este criterio o tendrá su infraestructura generando y destruyendo los nodos de 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 Manager
(recomendado 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 del Agent
ya que los recursos están siendo utilizados por los servicios de manera incremental).
Hasta cierto punto, también puede echar un vistazo a Docker InfraKit o Terraform para la automatización de la infraestructura y la supervisión del estado .
Actualización : ahora hay un prometedor autoescalador multiplataforma que admite el escalado automático de tareas en modo de enjambre: Orbiter . Aunque todavía no hay nada fuera de la caja para el servicio / autoescalado de la máquina.