Docker只能在工作者群中运行任务

假设我们在群模式下工作,我们有三个节点:

  • manager1
  • worker1
  • worker2

是否有可能创build一个服务,并指定这些任务只需要在worker(worker1和worker2)中运行,而不是在manager(manager1)

我正在运行以下命令来创build服务:

docker-machine ssh manager1 "docker service create --network dognet --name dog-db redis" 

当我服务:

 docker-machine ssh manager1 "docker service ps dog-db" 

我得到:

 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 3kvfpbhl6fj0qwtglc5k7sbkw dog-db.1 redis manager1 Running Preparing 4 seconds ago 

虽然你可以使用约束条件 (使用--constraint node.role=worker )来根据angular色(pipe理者或者工作者)去除一个节点的子集,但是我会尽可能地禁止pipe理者像Worker一样工作)与:

 # Disables the Manager as a Worker node docker node update --availability drain manager1 

这个想法是,pipe理器应该保持安全,避免资源过载(CPU,RAM,fds),如果部署的服务使用的资源高于Manager上可用的资源,则可能会发生这种情况。 它可以触发失败级联的情况 ,并且集群可能会变得非常不稳定(或者没有对更多请求做出响应)。

Manager的核心是维护关键组件(如证书颁发和轮换,分布式数据存储,networking),但由于pipe理人员资源不足,使整个集群变得不稳定是不好的。

相关问题:

  • 如何杀死你的经理
  • Orchestrator不处理任务缩放中的dynamic更新 。

来源 :我是Docker Swarm的维护者,编写了Swarm模式的pipe理指南 。

是的,您可以根据节点angular色约束服务。 将您的命令更改为:

docker service create --network dognet --constraint node.role==worker --name dog-db redis