1

我是 Docker 的新手,今天我想知道一个问题。我知道有旨在平衡“工作量”的 spread 和 binpack 策略。但是有没有办法通过使用 Docker、Swarm 来提供如下拓扑的容器?

在此处输入图像描述

或者我应该自定义调度程序?或者有没有合适的集群管理工具?有什么建议吗?

4

1 回答 1

3

更新:此答案适用于旧版 docker/swarm,不适用于自 docker 1.12 以来可用的新Swarm 模式

labels在这些机架/机器上启动 docker 守护程序时,您可以通过 Swarm 实现此目的。

使用标签设置 Docker 守护进程

假设我们有这个拓扑:

rack1
  |___ node1

rack2
  |___ node2
  |___ node3

我们可以使用自定义标签设置 docker 守护进程来反映这一点:

机架 1 上的节点 1

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack1 --label machine=node1`

机架 2 上的节点 2

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node2

机架 2 上的节点 3

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376 -d --label rack=rack2 --label machine=node3

使用约束

使用 Swarm,您可以使用约束来为您的容器选择一个位置。在这个例子中,我们只使用Rack 1上的节点子集来调度我们的容器:

docker run -d -P -e constraint:rack==rack1 --name web nginx

如果每个机架有多个节点(rack2例如),您还可以链接约束。在下一个示例中,我们将node3位于的容器固定到rack2.

docker run -d -P -e constraint:rack==rack2 -e constraint:node==node3 --name web nginx
于 2015-08-18T19:23:21.150 回答