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

Модуль 21 / 24

Drain, обслуживание и обновление Engine

DOCKER SWARM

Содержание
01

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

После модуля вы безопасно выведете node в drain, обслужите Engine и вернёте workload при сохранении manager quorum и HTTP-доступности.

  • выполнять preflight
  • различать availability и manager status
  • обслуживать managers последовательно
  • проверять capacity и rollback
02

2. Теория: drain и manager role

Drain запрещает новые tasks и останавливает либо переносит существующие service tasks. Он не демонтирует manager: node продолжает участвовать в Raft, пока Engine работает.

После остановки Engine manager становится Unreachable. В кластере из трёх managers допускается обслуживание только одного одновременно: оставшиеся два образуют quorum.

03

3. N−1 capacity и disruption budget

Перед drain две оставшиеся ноды должны вместить все replicas с reservations и update headroom. Три replicas могут временно разместиться по схеме 2+1.

Stateful local volumes, host-mode ports и strict constraints могут помешать эвакуации. Такие зависимости проверяют до окна работ.

04

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.

05

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

  • Зафиксируйте baseline и версию
  • Проверьте disk и N−1 capacity
  • Drain один manager
  • Дождитесь replicas до остановки Engine
  • Держите команду start рядом
  • Верните Active только после Ready
06

6. Лабораторная работа: preflight

Проверьте quorum, placement, версии, candidate package и свободное место.

terminal
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/docker
07

7. Лабораторная работа: эвакуация

Переведите manager-1 в Drain. Service остаётся 3/3 на двух nodes, двадцать HTTPS-запросов должны пройти.

terminal
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/; done
08

8. Лабораторная работа: обслуживание Engine

Остановите Engine только после эвакуации. Подтвердите Unreachable при сохранении quorum и replicas, затем запустите Engine.

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

9. Возврат и диагностика

Верните Active. Swarm сам не ребалансирует стабильные tasks, поэтому учебный force update создаёт новую rollout и проверяет все nodes.

terminal
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

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

  • Что делает Drain?
  • Почему Drain не демонтирует manager?
  • Как рассчитать N−1?
  • Когда local volume блокирует перенос?
  • Почему Active не ребалансирует tasks?
  • В каком порядке обновлять managers?

Модуль освоен, если при Drain и restart сервис остаётся 3/3, HTTP errors равны нулю, а cleanup возвращает все nodes в Ready/Active. Команды restore являются cleanup лаборатории.