Модуль 21 / 24
Drain, обслуговування та оновлення Engine
Зміст
1. Цілі та результат модуля
Після модуля ви переведете node у drain, обслужите Engine і повернете workload зі збереженням manager quorum та HTTP-доступності.
- виконувати preflight
- розрізняти availability і manager status
- обслуговувати managers послідовно
- перевіряти capacity і rollback
2. Теорія: drain та manager role
Drain забороняє нові tasks і переносить service tasks. Він не демонтує manager: node бере участь у Raft, доки Engine працює.
Після stop Engine manager має Unreachable. У кластері з трьох managers обслуговують лише один одночасно, два інші зберігають quorum.
3. N−1 capacity та disruption budget
Два nodes мають вмістити replicas з reservations і update headroom. Три replicas тимчасово розміщуються 2+1.
Local volumes, host-mode ports і strict constraints можуть заблокувати evacuation; це перевіряють заздалегідь.
4. Оновлення Engine
Порівняйте installed і candidate version, release notes, API compatibility та rollback package. Candidate вже 29.8.0, тому лабораторія виконує restart без перевстановлення.
Порядок: drain, verify, package/restart, verify, active. Leader обслуговують після followers або враховують election.
5. Методичні вказівки
- Зафіксуйте baseline і version
- Перевірте disk та N−1
- Drain один manager
- Дочекайтеся replicas
- Тримайте start command поруч
- Active лише після Ready
6. Лабораторна робота: preflight
Перевірте quorum, placement, versions, candidate і disk.
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker service ps swarm-ingress-demo
ssh swarm-manager-1 docker version
ssh swarm-manager-1 apt-cache policy docker-ce
ssh swarm-manager-1 df -h / /var/lib/docker7. Лабораторна робота: evacuation
Переведіть manager-1 у Drain. Service лишається 3/3, двадцять HTTPS-запитів мають пройти.
ssh swarm-manager-3 docker node update --availability drain swarm-manager-1
sleep 15
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker service ps swarm-ingress-demo
for n in $(seq 1 20); do curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/; done8. Лабораторна робота: обслуговування Engine
Зупиніть Engine після evacuation. Перевірте Unreachable зі збереженням quorum і replicas, потім запустіть Engine.
ssh swarm-manager-1 sudo systemctl stop docker
sleep 10
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-1 sudo systemctl start docker
sleep 159. Повернення та діагностика
Поверніть Active. Swarm не rebalance стабільні tasks автоматично, тому force update створює rollout для перевірки всіх nodes.
ssh swarm-manager-3 docker node update --availability active swarm-manager-1
ssh swarm-manager-3 docker service update --detach=false --force swarm-ingress-demo
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker service ps swarm-ingress-demo
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/- replicas менше desired — capacity або constraints
- немає quorum — зупинено більше одного manager
- node Down — Engine, time або ports
- HTTP error — ingress capacity і health checks
10. Контроль, критерії засвоєння та cleanup
- Що робить Drain?
- Чому manager role зберігається?
- Як розрахувати N−1?
- Коли volume блокує migration?
- Чому Active не rebalance tasks?
- Який порядок update?
Модуль засвоєно, якщо під час Drain і restart service має 3/3, HTTP errors нуль, а всі nodes повернуті Ready/Active. Restore commands є cleanup.