Модуль 6 / 24
Replicated и global services
Содержание
1. Цели и результат модуля
После модуля вы сможете выбирать replicated или global mode, прогнозировать их реакцию на Drain и проверять возвращение workload после обслуживания узла.
- объяснять cardinality обоих режимов
- отличать replica slot от global slot, связанного с node ID
- наблюдать эвакуацию tasks
- возвращать availability узла в Active
2. Теория: replicated services
Replicated service поддерживает заданное число slots во всём кластере. Scheduler размещает их на подходящих Active nodes. Число replicas не связано напрямую с числом nodes: несколько tasks могут работать на одном узле.
Replicated mode подходит для масштабируемых приложений. При Drain task заменяется на доступном узле, чтобы сохранить общее desired число replicas.
3. Теория: global services
Global service поддерживает один task на каждом подходящем Active node. Явного параметра replicas нет; cardinality меняется вместе с количеством nodes, constraints и availability.
Этот режим удобен для node-local агентов: сборщиков логов и метрик. Имя global slot включает node ID. При Drain task этого узла завершается, а после Active создаётся новый task на том же узле.
4. Теория: Active, Pause и Drain
Active разрешает новые tasks. Pause запрещает новые назначения, сохраняя текущие. Drain запрещает новые и останавливает существующие service tasks, поэтому его используют для обслуживания.
Drain не останавливает standalone containers и не демонтирует manager из Raft. Manager-3 продолжал быть Reachable, пока его workload эвакуировался.
5. Методические указания
- Перед Drain подтвердите quorum и Ready всех managers
- Используйте только один узел
- Сравнивайте service ps до и после изменения
- Дождитесь convergence, не оценивайте мгновенный промежуточный статус
- Всегда возвращайте узел в Active, даже после ошибки
- Не ожидайте автоматического rebalance replicated tasks после возврата
6. Лабораторная работа: два режима
Создайте replicated service с тремя slots и global service. На трёх Active узлах оба покажут 3/3, но причины этого числа различны.
ssh swarm-manager-2 docker service create --detach=true --name swarm-m06-replicated --replicas 3 alpine:3.22 sleep 3600
ssh swarm-manager-2 docker service create --detach=true --name swarm-m06-global --mode global alpine:3.22 sleep 3600
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker service ps swarm-m06-replicated
ssh swarm-manager-2 docker service ps swarm-m06-global7. Лабораторная работа: Drain
Переведите manager-3 в Drain. Replicated slot будет создан на одном из двух Active nodes. Global task manager-3 получит Shutdown без замены на другом узле.
ssh swarm-manager-2 docker node update --availability drain swarm-manager-3
ssh swarm-manager-2 docker node ls
ssh swarm-manager-2 docker service ps swarm-m06-replicated
ssh swarm-manager-2 docker service ps swarm-m06-global8. Лабораторная работа: возврат узла
Верните Active. Global service создаст новый task на manager-3. Replicated replacement обычно останется там, куда его назначили: Active не запускает rebalance.
ssh swarm-manager-2 docker node update --availability active swarm-manager-3
ssh swarm-manager-2 docker node ls
ssh swarm-manager-2 docker service ps swarm-m06-replicated
ssh swarm-manager-2 docker service ps swarm-m06-global9. Диагностика
Pending replicated task требует проверки availability, constraints, platform и reservations. Отсутствующий global task сначала сопоставляйте с eligibility узла.
ssh swarm-manager-2 docker node inspect swarm-manager-3 --pretty
ssh swarm-manager-2 docker service inspect swarm-m06-replicated --pretty
ssh swarm-manager-2 docker service inspect swarm-m06-global --pretty
ssh swarm-manager-2 docker service ps swarm-m06-global --no-trunc- 0/N у global — проверяйте command/image и общие ограничения
- task остаётся Shutdown на Drain — это ожидаемый desired state
- manager Reachable и Drain одновременно — допустимое разделение ролей
10. Контроль, критерии освоения и cleanup
- Откуда берётся число global tasks?
- Почему replicated tasks могут собраться на одном node?
- Чем Pause отличается от Drain?
- Почему manager в Drain остаётся членом Raft?
- Что вернётся автоматически после Active?
- Почему replicated service не rebalance автоматически?
Модуль освоен, если вы заранее предсказываете обе реакции, подтверждаете их через task history и восстанавливаете три Ready/Active manager.
ssh swarm-manager-2 docker node update --availability active swarm-manager-3
ssh swarm-manager-2 docker service rm swarm-m06-replicated swarm-m06-global
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker node ls