← К программе курса

Модуль 6 / 24

Replicated и global services

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы сможете выбирать replicated или global mode, прогнозировать их реакцию на Drain и проверять возвращение workload после обслуживания узла.

  • объяснять cardinality обоих режимов
  • отличать replica slot от global slot, связанного с node ID
  • наблюдать эвакуацию tasks
  • возвращать availability узла в Active
02

2. Теория: replicated services

Replicated service поддерживает заданное число slots во всём кластере. Scheduler размещает их на подходящих Active nodes. Число replicas не связано напрямую с числом nodes: несколько tasks могут работать на одном узле.

Replicated mode подходит для масштабируемых приложений. При Drain task заменяется на доступном узле, чтобы сохранить общее desired число replicas.

03

3. Теория: global services

Global service поддерживает один task на каждом подходящем Active node. Явного параметра replicas нет; cardinality меняется вместе с количеством nodes, constraints и availability.

Этот режим удобен для node-local агентов: сборщиков логов и метрик. Имя global slot включает node ID. При Drain task этого узла завершается, а после Active создаётся новый task на том же узле.

04

4. Теория: Active, Pause и Drain

Active разрешает новые tasks. Pause запрещает новые назначения, сохраняя текущие. Drain запрещает новые и останавливает существующие service tasks, поэтому его используют для обслуживания.

Drain не останавливает standalone containers и не демонтирует manager из Raft. Manager-3 продолжал быть Reachable, пока его workload эвакуировался.

05

5. Методические указания

  • Перед Drain подтвердите quorum и Ready всех managers
  • Используйте только один узел
  • Сравнивайте service ps до и после изменения
  • Дождитесь convergence, не оценивайте мгновенный промежуточный статус
  • Всегда возвращайте узел в Active, даже после ошибки
  • Не ожидайте автоматического rebalance replicated tasks после возврата
06

6. Лабораторная работа: два режима

Создайте replicated service с тремя slots и global service. На трёх Active узлах оба покажут 3/3, но причины этого числа различны.

terminal
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-global
07

7. Лабораторная работа: Drain

Переведите manager-3 в Drain. Replicated slot будет создан на одном из двух Active nodes. Global task manager-3 получит Shutdown без замены на другом узле.

terminal
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-global
08

8. Лабораторная работа: возврат узла

Верните Active. Global service создаст новый task на manager-3. Replicated replacement обычно останется там, куда его назначили: Active не запускает rebalance.

terminal
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-global
09

9. Диагностика

Pending replicated task требует проверки availability, constraints, platform и reservations. Отсутствующий global task сначала сопоставляйте с eligibility узла.

terminal
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

10. Контроль, критерии освоения и cleanup

  • Откуда берётся число global tasks?
  • Почему replicated tasks могут собраться на одном node?
  • Чем Pause отличается от Drain?
  • Почему manager в Drain остаётся членом Raft?
  • Что вернётся автоматически после Active?
  • Почему replicated service не rebalance автоматически?

Модуль освоен, если вы заранее предсказываете обе реакции, подтверждаете их через task history и восстанавливаете три Ready/Active manager.

terminal
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