¿Cómo configurar el escalado automático en docker swarm?


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 puede docker swarm resolver esto por mí?

Author: 030, 2017-01-16

3 answers

Respuesta corta: No hay una manera fácil de hacer esto con Docker Swarm por ahora.

Docker Swarm (o modo Swarm) no soporta auto-scaling máquinas fuera de la caja. Tendría que usar otra solución para eso como docker-machine para crear máquinas (con docker) en su infraestructura y vincularlas al clúster de Swarm existente (con docker swarm join).

Esto implicará una gran cantidad de scripting, pero la idea es monitorear el clúster para el uso de CPU / Memoria / Red (con top o monit) y una vez que va más allá de un umbral (por ejemplo 70% del total de recursos del clúster), desencadena un script que llama a docker-machine para escalar el clúster. Usando la misma idea, también puede reducir la escala mediante drenando y eliminando nodos (preferiblemente nodos Agent) del clúster de enjambre existente una vez que esté por debajo del umbral inferior.

Debe asegurarse de que está monitoreando el uso sostenido de recursos si desea usar este criterio o tendrá su Infraestructura de generación y destrucción de nodos de los cambios frecuentes y repentinos en el uso de recursos.

Puede definir un límite inferior y un límite superior para las máquinas del clúster para mantener las cosas bajo control.

Tenga en cuenta que Swarm requiere al menos 3 Manager nodos (recomendado 5) para mantener un quórum para el algoritmo de Consenso Distribuido. Así que el límite inferior mínimo recomendado es 5 nodos (que puede extender con Agent nodos a medida que se utilizan los recursos de forma incremental por servicios).

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 autoscaler multiplataforma que admite el modo Swarm escalado automático de tareas: Orbiter . Aunque todavía nada fuera de la caja todavía para el servicio/autoscaling de la máquina.

 30
Author: abronan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-18 20:55:53

Escalar es bastante fácil. Puede seguir programando contenedores cuando sea necesario. A continuación, solo tiene que crear un script que busque el contenedor pendiente y escalar 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 escalado automático. Un script de iteración de ejemplo podría tener este aspecto:

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
 1
Author: user2658308,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-02 02:56:49

De acuerdo con este problema en GitHub, autoscaling no es compatible en este momento. Uno de los participantes en el debate indicó que:

No disponible hoy. Swarm utiliza Docker-Compose para escalar estáticamente. La supervisión de CPU/QPS es necesaria para realizar el escalado automático. Enjambre no tiene eso todavía.

Se ha hecho una pregunta si hay tickets actuales que podrían estar vinculados a esta pregunta para que esta característica pueda implementarse.

 0
Author: 030,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 18:58:54