如何确保每个Docker Swarm节点上至少运行一个服务

如何确保每个Docker Swarm节点上至少运行一个服务,docker,docker-swarm,Docker,Docker Swarm,您好,docker swarm目前作为管理者在3个节点上运行。我将一个简单的服务复制了6次,平均分布在所有3个节点上。但是,当我将1个或2个节点脱机时,所有服务将分布在其余节点之间。当我使所有节点重新联机时,所有服务都保留在未脱机的节点上。我知道这是设计的,因为概念是你不能为了重新平衡而让服务离线。但是,要在生产环境中运行此服务,我需要在一个节点上始终至少运行一个服务 是否需要自动平衡以确保每个Docker Swarm节点上至少运行一个服务 这不适用于每个节点的多个副本。但如果您不了解全球服务:

您好,docker swarm目前作为管理者在3个节点上运行。我将一个简单的服务复制了6次,平均分布在所有3个节点上。但是,当我将1个或2个节点脱机时,所有服务将分布在其余节点之间。当我使所有节点重新联机时,所有服务都保留在未脱机的节点上。我知道这是设计的,因为概念是你不能为了重新平衡而让服务离线。但是,要在生产环境中运行此服务,我需要在一个节点上始终至少运行一个服务


是否需要自动平衡以确保每个Docker Swarm节点上至少运行一个服务

这不适用于每个节点的多个副本。但如果您不了解全球服务:

Swarm模式有两种类型的服务,
复制
全局
。对于
replicated
服务,您可以指定swarm manager要调度到可用节点上的副本任务数。对于
global
服务,调度程序在每个可用节点上放置一个任务

docker service create \
  --name <service name> \
  --mode global \
  <image name:tag>
docker服务创建\
--名字\
--模式全局\
请注意
--模式全局

复制模式是默认模式

我知道这是设计的,因为概念是你不能接受服务 为了重新平衡而离线


您可以在不停机的情况下缩小和再次放大以在节点之间重新平衡容器,因为一个容器将始终可用。

因此我的问题可能措辞错误。我不介意每个节点上运行多个服务,我的要求是在生产环境中,每个节点上至少运行一个服务。至于重新平衡,我希望有一种更自动化的方法,使用swarm来实现,而不是手动或编写脚本,即,如果节点重新联机,swarm works将耗尽其中一个活动节点上运行的服务实例,并将其转移到新启动的节点node@SteveFitzsimons你找到解决这个问题的办法了吗。在aws遭遇网络问题,影响了5台服务器中的3台之后,我最近遇到了这个问题。Docker将服务移回两个可用主机。问题发生在服务器重新可用后,docker没有将其推回到服务器。必须手动运行docker更新以重新平衡。我正在考虑的选项是使用traefik公开任何外部服务,然后在切换到新服务之前使用其加权标志来耗尽服务。这并不理想,但作为Swarm,我真正拥有的唯一选择似乎就是杀死一个容器,即使存在开放的连接