Есть опция
max_replicas_per_node - позволяет ограничить количество реплик сервиса на одну ноду.Кейс простой: две ноды, две реплики сервиса → хочу строго 1+1, чтобы не было перекоса по памяти.
Ставлю:
max_replicas_per_node: 1Логично? Логично.
Дальше деплой новой версии с
start-first (это как rolling update в кубе, чтобы без даунтайма):- Поднимается новый контейнер
- Ждём healthcheck
- Гасим старый
- Повторяем
Но тут начинается веселье.
У нас уже есть по одной реплике на каждой ноде.
Swarm пытается поднять новую реплику → и не может:
- на node1 уже 1 → нельзя
- на node2 уже 1 → нельзя
- других нод нет
И всё. Деплой просто блокируется с
no suitable node.Почему?
Потому что в Swarm это правило жёсткое. Он не умеет временно нарушать placement constraints, даже ради rolling update.
Что с этим делать?
Да фиг его знает ¯\_(ツ)_/¯