我是docker swarm模式的新手(我特别在谈论docker v1.12中的swarm模式,我并不是指旧的非集成’docker swarm’).
我正在尝试评估它是否适合为新的软件项目构建一个大型分布式集装箱平台(我正在与类似的技术进行比较,例如mesosphere,kubernetes等).
我对旧的非集成docker swarm(非swarm模式)的理解是,您可以使用过滤器将节点定位到多个故障域. Docker Swarm模式中是否存在等价物?
例如,在测试环境中,我有6个VM – 所有运行的docker.
我启动VM 1和2并将其称为我的失败域1
我启动VM 3和4并将其称为我的失败域2
我启动VM 5和6并将其称为我的失败域3
所有故障域都包含一个swarm管理器和一个swarm worker.实际上,每个域有2个节点可以托管服务容器.
我告诉docker创建一个新服务,并根据包含简单Web服务的图像运行3个容器. Docker做了它并且旋转了3个容器并且我的服务正在运行;我可以毫无问题地访问我的负载均衡Web服务.欢呼!
但是,我想特别告诉docker在domain1,domain2和domain3上分发我的3个容器.
我怎样才能做到这一点? (也 – 我是在正确的网站上发布的 – 这应该是在其他一个堆叠交换网站上吗?)
对于节点标签,您将使用docker node update –label-add az = 1 vm1,这会将标签az1添加到您的vm1节点.为您的其他AZ(可用区域是我倾向于使用的术语)和VM重复此过程.
现在,在安排作业时,您可以添加一个约束
docker service create --constraint node.labels.az==1 \
--name AppAZ1 yourimage
docker service create --constraint engine.labels.az==1 \
--name AppAZ1 yourimage
为你的每个AZ重复这个.
不幸的是,当你使用像–replicas 3这样包含故障转移到每个vm集群中的第二个节点的东西时,我无法想到一种强制分布在每个AZ上的方法.但是,如果为每个任务选择每个群集一个VM,则可以将每个任务标记为相同的标签(例如–label-add vm = a,然后执行–mode global –constraint node.label. vm == a在每个A节点上运行一个服务.