当服务器死机片刻时,如何用 swarm 重新安排容器

How to reschedule containers with swarm when the server dies for a moment

我 运行 两台服务器使用 docker-compose 和 swarm

停止A服务器时,将A服务器中的容器移动到B服务器。

但是,当启动A服务器时,B服务器中的容器不会移动到A服务器。

我想知道服务器死机一瞬间如何正确安排死机容器的位置

首先,为了让您的 Swarm 能够在节点出现故障时 re-create 执行任务,您仍然需要让大多数管理器节点仍然可用...所以如果它只是一个双节点Swarm,这是行不通的,因为你需要三个管理器,一个失败,另一个担任领导角色,re-schedule 失败的副本。 (仅供参考)

我认为您要求的是 "re-balancing"。当一个节点重新上线(或添加一个新节点)时,Swarm 不会对设置为默认复制模式的服务做任何事情。 Swarm 没有 "move" 个容器,它会销毁 re-create 个容器,因此它认为节点 B 上的服务仍然健康,不会将其移回节点 A。它不想中断您在节点 B 上的 active/healthy 服务只是因为节点 A 恢复在线。

如果节点 B 确实失败,Swarm 将再次re-schedule 下一个最佳节点上的任务。

如果节点 B 有很多容器,并且工作不平衡(即节点 A 是空的,节点 B 有 3 个任务 运行),那么您可以强制进行服务更新,这将破坏和 re-create 该服务的所有副本,默认情况下会尝试将它们展开,这可能会导致其中一项任务最终返回到节点 A。

docker service update --force <serivcename>