Настройки размещения позволяют вам "распределять" свои реплики по узлам с определенными тегами, выбирая их максимально разнообразные.
Ограничения будут ограничивать (ограничивать) реплики теми узлами, которые соответствуют ограничению.
Представьте, что у вас 4 сервера в 2 центрах обработки данных (восток, запад), и некоторые серверы имеют SSD-накопитель, а другие нет.
Если вы примените следующие метки к узлам:
node-1: datacenter=us-east, disk=ssd
node-2: datacenter=us-east, disk=ssd
node-3: datacenter=us-west, disk=sas
node-4: datacenter=us-west, disk=nl-sas
Если вы развернете службу с 2 репликами и хотите обеспечить географическую избыточность, вы запустите эту службу следующим образом:
docker service create \
--replicas 2 \
--name webserver \
--placement-pref 'spread=node.labels.datacenter' \
mywebservice:production
Docker Swarm затем попытается «распределить» 2 реплики по обоим центрам обработки данных, так что в итоге вы получите 1 реплику на узле-1 или узле-2, а другую реплику на узле-3 или узле-4. .
Если у вас есть служба (например, отчетная работа), которая выполняет много операций ввода-вывода в секунду, вы, вероятно, захотите использовать ваши SSD-оборудованные серверы, поэтому вы наложите ограничение на службу:
docker service create \
--constraint 'node.labels.disk == ssd' \
myreporter:latest