Так что у меня проблема с compose version 3.6 и развертыванием сервисов swarm.То, чего я пытаюсь добиться, это развернуть только службу 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
Вы можете видеть, что служба, созданная с ограничением ЦП, работала и служба с GPU не была создана (в состоянии ожидания).