我有一个 swarm 集群,有 3 个工作节点(node1、node2 和 node3)和两个服务(service1 和 service2)。无论如何,service1需要部署在node1和node2中,而service2需要部署到node2和node3中。然而,
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 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