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

Модуль 16 / 24

Rolling updates и rollback

DOCKER SWARM

Содержание
01

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

После модуля вы сможете проектировать rolling update, выбрать start-first/stop-first, настроить failure threshold и доказать автоматический rollback под HTTP-нагрузкой.

  • читать UpdateStatus и task history
  • задавать parallelism, delay и monitor
  • различать pause, continue и rollback
  • измерять клиентский результат
02

2. Теория: rolling update

Изменение TaskTemplate создаёт новые tasks по UpdateConfig. parallelism ограничивает одновременную замену, delay разделяет batches, monitor задаёт окно наблюдения, max failure ratio — допустимую долю отказов.

Convergence команды и доступность приложения — разные метрики. Проверяйте service state и непрерывный внешний трафик.

03

3. Теория: update order

stop-first освобождает ресурсы и порт перед запуском replacement, но временно уменьшает capacity. start-first сначала запускает новый task, затем останавливает старый; он требует headroom и совместимости двух версий.

Start-first не гарантирует zero downtime при одной replica без healthcheck и готовности приложения.

04

4. Теория: failure action и rollback

При отказе monitored task действие pause сохраняет состояние для оператора, continue продолжает рискованное обновление, rollback возвращает предыдущую service spec. RollbackConfig отдельно задаёт порядок и monitor.

Rollback возвращает orchestrator spec, но не откатывает миграции базы, внешние side effects и несовместимые данные.

05

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

  • Используйте immutable image reference в production
  • Фиксируйте исходный spec и 3/3
  • Запускайте load generator вне Swarm service
  • Считайте HTTP 000 отдельно от HTTP errors
  • Вносите одну контролируемую неисправность
  • После rollback проверяйте UpdateStatus и старый spec
06

6. Лабораторная работа: update policy

Создайте три replicas на отдельном ingress port 18082. Политика заменяет по одному task, использует start-first и автоматически откатывается при первой monitored failure.

terminal
ssh swarm-manager-3 docker service create --detach=true --name swarm-m16-web --replicas 3 --publish published=18082,target=80,mode=ingress --update-parallelism 1 --update-delay 2s --update-monitor 5s --update-failure-action rollback --update-max-failure-ratio 0 --update-order start-first --rollback-parallelism 1 --rollback-monitor 5s --rollback-order stop-first nginx:1.29-alpine
ssh swarm-manager-3 docker service inspect swarm-m16-web --pretty
ssh swarm-manager-3 docker service ps swarm-m16-web
terminal
curl --fail --silent http://10.77.0.11:18082/ >/dev/null
curl --fail --silent http://10.77.0.12:18082/ >/dev/null
curl --fail --silent http://10.77.0.13:18082/ >/dev/null
07

7. Лабораторная работа: непрерывные запросы

Запустите цикл в отдельном терминале перед update. Он записывает конечный код каждой попытки; ошибка curl должна учитываться, а не скрываться retry.

terminal
rm -f /tmp/swarm-m16-statuses
for n in $(seq 1 120); do
  curl --max-time 2 --silent --output /dev/null --write-out '%{http_code}\n' http://10.77.0.11:18082/ >> /tmp/swarm-m16-statuses
  sleep 0.2
done
08

8. Лабораторная работа: broken update и rollback

Замените command на немедленный exit 42. Первый новый task упадёт, update перейдёт в rollback, исходные nginx tasks останутся или восстановятся.

terminal
ssh swarm-manager-3 docker service update --detach=false --args 'sh -c "exit 42"' swarm-m16-web
ssh swarm-manager-3 docker service inspect swarm-m16-web --pretty
ssh swarm-manager-3 docker service ps swarm-m16-web --no-trunc
sort /tmp/swarm-m16-statuses | uniq -c

Проверенный результат: rollback_completed и 120 ответов HTTP 200.

09

9. Диагностика

Свяжите UpdateStatus.Message с первым Failed task, exit code и клиентской временной шкалой. Не объявляйте успех только по 3/3 после rollback.

terminal
ssh swarm-manager-3 docker service inspect swarm-m16-web --format '{{json .UpdateStatus}}'
ssh swarm-manager-3 docker service ps swarm-m16-web --no-trunc
ssh swarm-manager-3 docker service logs --raw swarm-m16-web
curl --max-time 5 --fail --show-error http://10.77.0.11:18082/
  • updating — процесс ещё идёт
  • paused — требуется решение оператора
  • rollback_started — возврат не завершён
  • rollback_completed — spec возвращён, данные проверяются отдельно
10

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

  • Что ограничивает parallelism?
  • Зачем monitor?
  • Как start-first влияет на capacity?
  • Чем rollback spec отличается от rollback данных?
  • Почему 3/3 недостаточно?
  • Какие запросы не покрывает этот тест?

Модуль освоен, если вы вызываете failure, получаете rollback_completed и сопоставляете 120 клиентских результатов с task history.

terminal
ssh swarm-manager-3 docker service rm swarm-m16-web
rm -f /tmp/swarm-m16-statuses
ssh swarm-manager-3 docker service ls
ssh swarm-manager-3 docker node ls