Модуль 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 работает.
После остановки Engine manager становится Unreachable. В кластере из трёх managers допускается обслуживание только одного одновременно: оставшиеся два образуют quorum.
3. N−1 capacity и disruption budget
Перед drain две оставшиеся ноды должны вместить все replicas с reservations и update headroom. Три replicas могут временно разместиться по схеме 2+1.
Stateful local volumes, host-mode ports и strict constraints могут помешать эвакуации. Такие зависимости проверяют до окна работ.
4. Обновление Engine
Сначала сравните installed и candidate version, release notes, совместимость API и rollback package. В лаборатории candidate уже равен 29.8.0, поэтому выполняется безопасный restart без бессмысленной переустановки.
Обновляйте по одному node: drain, verify, package/restart, verify, active. Leader лучше обслуживать после followers либо осознанно учитывать election.
5. Методические указания
- Зафиксируйте baseline и версию
- Проверьте disk и N−1 capacity
- Drain один manager
- Дождитесь replicas до остановки Engine
- Держите команду start рядом
- Верните Active только после Ready
6. Лабораторная работа: preflight
Проверьте quorum, placement, версии, candidate package и свободное место.
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. Лабораторная работа: эвакуация
Переведите manager-1 в Drain. Service остаётся 3/3 на двух nodes, двадцать 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 только после эвакуации. Подтвердите 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 сам не ребалансирует стабильные 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 после start — Engine, time и порты
- HTTP error — ingress capacity и health checks
10. Контроль, критерии освоения и cleanup
- Что делает Drain?
- Почему Drain не демонтирует manager?
- Как рассчитать N−1?
- Когда local volume блокирует перенос?
- Почему Active не ребалансирует tasks?
- В каком порядке обновлять managers?
Модуль освоен, если при Drain и restart сервис остаётся 3/3, HTTP errors равны нулю, а cleanup возвращает все nodes в Ready/Active. Команды restore являются cleanup лаборатории.