我有一个 3 节点 docker swarm 集群,容器正在部署在所有 3 个节点上。
我有 2 个问题
1]node1
是经理,但它仍然处理容器,我不想再让它这样做了。节点 2 和节点 3 是工作节点,并且部署在 Centos 7 上,docker 版本为 17...
2]node3
重新启动时,所有容器都会自动移至节点 1 和节点 2,但是当节点 3 加入集群时,容器不会自动移回节点 3,负载由节点 1 和节点 2 处理。我怎样才能避免这种情况。
答案1
如果您不希望给定节点运行任何容器,您可以流走它
docker node update swarm-01.local --availability drain
这会将在集群(集群)模式下运行的任何容器移动到任何其他可用节点。不支持 swarm 感知(启动)docker run
命令的容器将继续在那里运行。
第二个问题中描述的行为旨在避免不必要地移动(停止/启动)容器而对最终用户造成服务中断,仅供参考:https://docs.docker.com/engine/swarm/admin_guide/#force-the-swarm-to-rebalance
当您向 swarm 添加新节点,或者节点在一段时间不可用后重新连接到 swarm 时,swarm 不会自动将工作负载分配给空闲节点。这是一个设计决定。如果集群为了平衡而定期将任务转移到不同的节点,那么使用这些任务的客户端就会受到干扰。目标是避免中断正在运行的服务,以实现集群之间的平衡。当新任务开始时,或者当正在运行任务的节点变得不可用时,这些任务将被分配给不太繁忙的节点。目标是最终平衡,将对最终用户的干扰降至最低。