我在AWS上有2个节点的docker swarm集群。我停止了这两个实例,并最初启动了swarm manager,然后启动了worker。在停止实例之前,我有一个运行有4个副本的服务,这些副本分布在管理器和工作器之间。
当我启动swarm manager节点时,所有副本容器首先都在manager本身上启动,而根本没有移到worker上。
请告诉我如何做负载均衡?
worker 开始工作时,群体管理者不负责吗?

最佳答案

如果服务处于默认的“复制模式”,则在启动新节点时,Swarm当前(18.03)不会移动或替换容器。这是设计使然。如果要添加一个新节点,则不必停止其他容器,而要在新节点上创建新容器。 Swarm仅在必须执行复制操作时才停止容器以“移动”副本。
docker service update --force <servicename>将在符合其要求和约束的所有节点之间重新平衡服务。

进一步的建议:与其他容器协调器一样,您需要在节点上提供容量,以便处理在中断期间移动的任何服务副本的工作负载。您的备用容量应与您计划支持的冗余级别相匹配。例如,如果要处理两个节点同时发生故障的容量,则需要在所有节点上使用最少百分比的资源,以使这些工作负载转移到其他节点。

09-30 19:30
查看更多