如何将服务部署到 Docker Swarm 中的某些选择性节点中?

问题描述 投票:0回答:1

我有一个 swarm 集群,有 3 个工作节点(node1node2node3)和两个服务(service1service2)。无论如何,service1需要部署在node1node2中,而service2需要部署到node2node3中。然而,

deploy.placement.constraints
对于 1 个节点来说是可以的。在我的场景中,我制作了以下 compose.yml 文件:

version: "3.8"

services:
  service1: 
    image: IMAGE1
    deploy:
      replicas: 2
      restart_policy: 
        condition: on-failure 
      placement:
        constraints:
          - node.id==<node1_ID>
          - node.id==<node2_ID>
  service2: 
    image: IMAGE2
    deploy:
      replicas: 2
      restart_policy: 
        condition: on-failure 
      placement:
        constraints:
          - node.id==<node2_ID>
          - node.id==<node3_ID>

没有将服务部署到上述 compose.yml 的任何节点中。如果我注释掉部署到定义节点的

deploy.placement.constraints
服务中的node.id之一(即约束可以采用单个
node.id
)。

  • 如何使用
    deploy.placement.constraints
    而不是一个将服务部署到多个节点?
docker docker-swarm
1个回答
0
投票

为每个服务适当地标记节点,然后使用单个放置约束。放置约束在逻辑上相互“与”,这使得任何复杂的事情都有些困难。

docker node update node1 --label-add service1=true
docker node update node2 --label-add service1=true
docker node update node2 --label-add service2=true
docker node update node3 --label-add service2=true

services:
  service1:
    ...
    deploy:
      placement:
        constraints:
        - node.labels.service1==true
  service2:
    ...
    deploy:
      placement:
        constraints:
        - node.labels.service2==true
© www.soinside.com 2019 - 2024. All rights reserved.