Ответ вслух Senior Ansible обновлено

Обновить 50 серверов без простоя

Вопрос

Интервьюер: «У вас 50 серверов с приложением за nginx-балансировщиком, деплой через Ansible. Как обновить без простоя и что будете делать, если на 10-м сервере что-то пошло не так?»

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Плейбук с serial: [1, 5, "25%"]: сначала один сервер как канарейка, потом партии побольше, и maxfailpercentage: 0, чтобы любая ошибка останавливала выкатку.

Что должно прозвучать в ответе

  • Партии через `serial` (например, 1, затем 10%, затем 25%) и `max_fail_percentage`

  • Вывод хоста из балансировщика через `delegate_to`, ожидание дренирования

  • Конкретная версия артефакта, миграции один раз через `run_once` и совместимые

  • Health check перед возвратом в балансировщик

  • Остановка выкатки при ошибке и откат на прошлую версию тем же плейбуком

  • Наблюдение за метриками между партиями

Что могут спросить следом

  • Что если миграция уже применилась, а код откатили?
  • Как ускорить, если 50 серверов по одному идут два часа?

Разбор

Образцовый ответ: «Плейбук с serial: [1, 5, "25%"]: сначала один сервер как канарейка, потом партии побольше, и max_fail_percentage: 0, чтобы любая ошибка останавливала выкатку. Для каждого хоста: через delegate_to на балансировщик убираю его из upstream, жду, пока закончатся соединения, ставлю конкретную версию артефакта, рестарт, жду health check через uri с повторами и возвращаю в upstream. Миграцию гоняю один раз в начале через run_once, и она совместима со старым кодом. Если на 10-м сервере проверка не прошла, плей останавливается: 9 серверов на новой версии, один выведен, остальные на старой. Смотрю причину; если это баг версии, запускаю тот же плейбук с прошлой версией. Совместимая миграция делает откат кода безопасным».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.