Docker Swarm Deploy忽略放置限制

时间:2019-07-05 19:49:29

标签: docker constraints global swarm

因此,撰写3.6版和部署群集服务时遇到问题。我想要实现的是仅根据应用于节点的标签值部署服务A或服务B。 发生的事情是两种服务都已部署(或者一种已经部署,而第二种由于端口使用而失败)。

 serviceA:
    image: serviceA:v1
    deploy:
      mode: global
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.labels.faces == cpu
    networks:
      - mynet
    ports:
      - "8888:8888"

  serviceB:
    image: serviceB:v1
    deploy:
      mode: global
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.labels.faces == gpu
    networks:
      - mynet
    ports:
      - "8888:8888"

在我的单个节点上,我定义了如下标签

# docker node inspect swarm-manager --pretty
ID:         0cpco8658ap5xxvxxblpqggpq
Labels:
 - faces=cpu
Hostname:               swarm-manager

这种配置是否可能?仅应实例化具有匹配标签的服务。

我想使用全局节点而不是复制节点,因为我们无需前往主节点即可自动添加其他节点,但是我在另一个论坛中读到这两个节点可能不兼容。

但是,如果我使用CLI手动创建所有内容,它将按预期工作

docker node update --label-add faces=cpu swarm-manager
docker service create -d --name serviceA --constraint node.labels.faces==cpu -p 8888 --mode global  serviceA:v1
docker service create -d --name serviceB --constraint node.labels.faces==gpu -p 8888 --mode global serviceB:v1

# docker service ls | grep service
c30y50ez605p        serviceA       global              1/1                 service:v1   *:30009->8888/tcp
uxjw41v42vzh        serviceB   global              0/0                 serviceB:v1          *:30010->8888/tcp

您可以看到使用CPU约束创建的服务可以正常工作,并且没有实例化具有GPU的服务(处于挂起状态)。

0 个答案:

没有答案