Вы можете управлять тем, на какие ноды попадают ваши сервисы, используя метки и ограничения.
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-22. Использование Constraints (Ограничений)
При создании сервиса укажите требование:
docker service create \
--name db \
--constraint 'node.labels.ssd == true' \
postgresВ файле стека (docker-compose.yml):
deploy:
placement:
constraints:
- node.role == worker
- node.labels.ssd == true3. Глобальные ограничения
Популярные встроенные метки:
node.role == managernode.hostname == db-servernode.platform.os == linux
Типичные ошибки
| Ошибка | Симптом | Решение |
|---|---|---|
| Constraint на несуществующий label | no suitable node (scheduling constraints not satisfied) | Сначала docker node update --label-add, потом деплой |
| БД на нескольких нодах | Конфликт данных, corruption | constraints: [node.labels.db == true] + одна реплика + volume |
--constraint vs --placement-pref | Неравномерное распределение | constraint = жёсткий фильтр, pref = мягкое предпочтение (spread) |