【问题标题】:Deploying Docker Swarm mode services across multiple failure domains跨多个故障域部署 Docker Swarm 模式服务
【发布时间】:2016-09-01 11:25:55
【问题描述】:

我是 docker swarm 模式的新手(我特别指的是 docker v1.12 中的 swarm 模式,并不是指较旧的非集成“docker swarm”)。

我正在尝试评估它是否适合为新软件项目构建大型分布式容器化平台(我正在与类似的技术进行比较,例如 mesosphere、kubernetes 等)。

我对旧的非集成 docker swarm(不是 swarm 模式)的理解是,您可以使用过滤器将节点部署到多个故障域。 Docker Swarm 模式中是否有等价物?

例如,在一个测试环境中,我有 6 个虚拟机——所有虚拟机都在运行 docker。

我启动 VM 1 和 2 并将其称为我的故障域 1
我启动 VM 3 和 4 并将其称为我的故障域 2
我启动 VM 5 和 6 并将其称为我的故障域 3

所有故障域都由一个 swarm manager 和一个 swarm worker 组成。实际上,我每个域有 2 个节点可以托管服务容器。

我告诉 docker 创建一个新服务,并基于包含一个简单 Web 服务的映像运行 3 个容器。 Docker 做到了,启动了 3 个容器,我的服务正在运行;我可以毫无问题地访问我的负载平衡 Web 服务。万岁!

但是,我想特别告诉 docker 将我的 3 个容器分布在 domain1、domain2 和 domain3 上。

我该怎么做? (另外 - 我是否在正确的网站上发帖 - 这应该是在其他 stackexchange 网站之一上吗?)

【问题讨论】:

    标签: docker cross-domain scaling docker-swarm


    【解决方案1】:

    您可以像以前一样继续使用引擎标签。或者使用新的 swarm,您可以在 swarm 节点上定义节点标签。然后,使用新的 docker swarm,您将在您的服务上定义一个约束并创建 3 个单独的服务,每个服务都被限制在您的一个故障域中运行。

    对于节点标签,您将使用 docker node update --label-add az=1 vm1 将标签 az1 添加到您的 vm1 节点。对您的其他可用区(可用区是我倾向于使用的术语)和虚拟机重复此过程。

    现在在安排你的工作时,你添加一个约束,比如

    docker service create --constraint node.labels.az==1 \
      --name AppAZ1 yourimage
    

    对于节点标签或引擎标签:

    docker service create --constraint engine.labels.az==1 \
      --name AppAZ1 yourimage
    

    对每个可用区重复此操作。

    不幸的是,当您使用 --replicas 3 之类的东西(包括故障转移到每个 vm 集群中的第二个节点)时,我想不出一种方法来强制跨每个可用区自动分布。但是,如果您为每个任务选择每个集群的单个 VM,则可以将它们中的每一个标记为相同的标签(例如 --label-add vm=a,然后执行 --mode global --constraint node.label.vm==a 以在每个 A 节点上运行一项服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2019-08-13
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多