← До програми курсу

Модуль 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