Вы можете управлять тем, на какие ноды попадают ваши сервисы, используя метки и ограничения.

1. Добавление меток (Labels) на ноды

Пометьте ноды в соответствии с их характеристиками (SSD, GPU, Zone).

# На менеджере
 
> **TL;DR:** Labels на нодах + constraints в сервисах = контроль размещения.
> `node.role`, `node.labels`, `engine.labels` фильтры для placement.
docker node update --label-add ssd=true node-1
docker node update --label-add zone=us-east node-2

2. Использование Constraints (Ограничений)

При создании сервиса укажите требование:

docker service create \
  --name db \
  --constraint 'node.labels.ssd == true' \
  postgres

В файле стека (docker-compose.yml):

deploy:
  placement:
    constraints:
      - node.role == worker
      - node.labels.ssd == true

3. Глобальные ограничения

Популярные встроенные метки:

  • node.role == manager
  • node.hostname == db-server
  • node.platform.os == linux

Типичные ошибки

ОшибкаСимптомРешение
Constraint на несуществующий labelno suitable node (scheduling constraints not satisfied)Сначала docker node update --label-add, потом деплой
БД на нескольких нодахКонфликт данных, corruptionconstraints: [node.labels.db == true] + одна реплика + volume
--constraint vs --placement-prefНеравномерное распределениеconstraint = жёсткий фильтр, pref = мягкое предпочтение (spread)