Docker swarm 运行 tasks only in workers

Docker swarm run tasks only in workers

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

是否可以创建一个服务并指定任务只需要 运行 工作人员(worker1 和 worker2)而不是经理(manager1)

我正在运行使用以下命令来创建服务:

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

当我 ps 服务时:

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  

是的,您可以根据节点角色限制服务。将您的命令更改为:

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

虽然您可以使用 constraints(使用 --constraint node.role=worker)根据节点的角色(经理或工作人员)消除一部分节点,但我会尽量禁止经理像工人一样行事

# Disables the Manager as a Worker node

docker node update --availability drain manager1

想法是,管理器应避免资源过载(CPU、RAM、fds),如果部署的服务使用的资源高于管理器上可用的资源,则可能会发生这种情况。它可以触发 级联故障场景 并且集群可能变得非常不稳定(或不再响应任何请求)。

Manager 的核心是维护关键组件(例如证书颁发和轮换、分布式数据存储、网络),如果让整个集群不稳定是很糟糕的,因为 Managers 运行 资源不足.

相关问题:

来源:我是 Docker Swarm 的维护者并为 Swarm 模式编写了 Administration Guide