集群化Docker并由Swarmpipe理
我是Docker的新手,今天我想知道一个问题。 我知道有传播和binpack策略是打算平衡“工作量”。 但有没有什么办法通过使用Docker,Swarm来configuration像下面的拓扑一样的容器?
或者我应该自定义调度程序? 还是有没有适合的集群pipe理工具? 有什么build议吗?
更新 :这个答案适用于传统的docker/群,而不适用于Docker 1.12以后的新Swarm模式
在这些机架/机器上启动docker守护进程时,可以通过Swarm通过labels
来实现这一点。
用标签设置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,您可以使用约束来获取容器的位置。 在这个例子中,我们只使用机架1上的节点子集来调度我们的容器:
docker run -d -P -e constraint:rack==rack1 --name web nginx
假设每个机架有多个节点(例如rack2
),您也可以链接限制。 在下一个示例中,我们将容器固定到位于rack2
上的rack2
。
docker run -d -P -e constraint:rack==rack2 -e constraint:node==node3 --name web nginx