Основная статья по docker node update
тут
Для примера у нас есть 3-и ноды:
SRV-APP-DCR31
SRV-APP-DCR32
SRV-APP-DCR33
За разможно добавить только на 1-у ноду
docker node update --label-add POOL1=true SRV-APP-DCR32
docker node update --label-add POOL1=true SRV-APP-DCR33
docker node inspect --format '{{ .Spec.Labels }}' SRV-APP-DCR33
docker node update --label-rm POOL2 SRV-APP-DCR31
max_replicas_per_node: 1
- ограничевает количество реплик на одной ноде
Параметр выше работает начиная с версии 3.8
replicas: 2
- всего количество реплик для сервиса nginx
constraints: [node.labels.POOL2 == true]
- ограничение на каких нодах и с каким тэгом запускать сервис.
version: "3.9"
services:
nginx:
image: nginx:latest
ports: ["3333:80"]
deploy:
replicas: 2
placement:
max_replicas_per_node: 1
constraints: [node.labels.POOL1 == true]
или вот так:
version: "3.9"
services:
nginx:
image: nginx:latest
ports: ["3333:80"]
deploy:
replicas: 2
placement:
max_replicas_per_node: 1
constraints:
- node.labels.POOL2 == true
также можно ограничивать через node.role
которая может принимать значение worker
или manager
Роль worker выбираем когда больше 2-ух реплик нужно разместить.
version "3.9"
services:
foo:
image: hello-world
deploy:
replicas: 2
placement:
max_replicas_per_node: 1
constraints:
- node.role==worker