Docker Swarm 如何负载均衡?

How does Docker Swarm load balance?

我有一个通过 docker swarm join 命令启动的 10 个 Swarm 节点集群

如果我想通过

将 docker 实例扩展到 15
docker service create --replicas 15 

docker swarm 如何知道从哪里启动容器?

它是循环法还是考虑了计算资源(使用了多少cpu/mem)?

当您在 Swarm 模式下创建或扩展服务时,Elected Leader 上的 scheduler(其中一位管理器)将选择一个节点来 运行 服务。目前有 3 种策略可供领导者使用。

  • 传播
  • binpack
  • 随机

spreadbinpack 策略根据节点的可用 CPU、RAM 和容器数量计算排名。 random 策略不使用计算。它随机选择一个节点,主要用于调试。

spread策略下,Swarm针对容器数量最少的节点进行优化。 binpack 策略使 Swarm 优化最拥挤的节点。

Swarm 默认使用传播。 请记住,您也可以 Constraint 特定节点上的容器。

无法在 docker 版本 1.12.1(发布日期的最新版本)

中设置策略