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