跨多个故障域部署Docker Swarm模式服务

我是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个容器.

我怎样才能做到这一点? (也 – 我是在正确的网站上发布的 – 这应该是在其他一个堆叠交换网站上吗?)

最佳答案
您可以像以前一样继续使用引擎标签.或者使用新的swarm,您可以在swarm节点上定义节点标签.然后,使用新的docker swarm,您将在服务上定义约束并创建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节点上运行一个服务.

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...