当前位置:   article > 正文

docker swarm如何让两个副本分别跑在两台不同的主机上

docker swarm如何让两个副本分别跑在两台不同的主机上

虽然 docker swarm 支持自动扩容部署,但是为了服务的稳定性、可靠性,有的时候甲方巴巴会要求一定要服务分散部署在不同的服务器上。
使用默认的部署方式,虽然副本为 N,但是部署的 N 个服务可能落在同一台服务器上。
在 Docker Swarm中,要让服务(service)的两个副本(replica)分别运行在不同的主机上,你需要做的是在部署服务时,使用 --constraint 标志来指定资源限制,例如主机的标签(labels)等都是可以的。

首先,确保你的两台主机已经加入到Docker Swarm集群中,并且每台主机有一个独特的标签来区分。可以通过以下命令给主机添加标签:

docker node update --label-add <key>=<value> <node-id>
  • 1

然后,当你部署服务时,可以使用 --constraint 标志来指定副本运行的主机标签。例如,如果你有两台主机,一台标签为 host=node1,另一台标签为 host=node2,你可以这样部署服务。

docker service create --replicas 2 --name my-service --constraint 'node.labels.host==node1' my-image
docker service create --replicas 2 --name my-service --constraint 'node.labels.host==node2' my-image
  • 1
  • 2

如果使用的yml文件来编排的服务,则修改文件内容如下:

version: '3.8'
 
services:
  my-service:
    image: my-image
    deploy:
      mode: replicated
      replicas: 2
      placement:
        constraints:
          - "node.labels.host == node1"
          - "node.labels.host == node2"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在部署服务前,确保已经标记了相应的节点:

docker node update --label-add host=node1 <NODE1_ID>
docker node update --label-add host=node2 <NODE2_ID>
  • 1
  • 2

这样,每个副本都会被调度到一个符合指定标签的节点上。如果你有多于两台主机,并且每个副本都需要在不同的主机上运行,你可能需要为每个副本指定不同的标签约束。

请注意,如果没有足够的节点来满足所有约束条件,服务可能会创建失败或者只能运行在部分节点上。因此,集群中节点的数量和资源容量至关重要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/1016107
推荐阅读
相关标签
  

闽ICP备14008679号