Выбор ответа Senior Деплой и эксплуатация обновлено

Rolling update и миграции

Вопрос

При rolling update новая версия кода удаляет колонку из модели, и миграция удаляет её из базы до выкладки. Что случится?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Старые экземпляры, ещё принимающие трафик, начнут падать на этой колонке. Во время rolling update старые и новые экземпляры работают одновременно, и схема должна подходить обоим.

Варианты ответа

  1. Старые экземпляры, ещё принимающие трафик, начнут падать на этой колонкеправильный ответ
  2. Ничего: старые экземпляры выключаются раньше, чем к базе применяется миграция
  3. Kubernetes откатит миграцию, если readiness-проба новых подов упадёт
  4. Django проигнорирует отсутствующую колонку и вернёт для неё None

Разбор

Во время rolling update старые и новые экземпляры работают одновременно, и схема должна подходить обоим. Старый код всё ещё выбирает колонку, которой нет, и получает ошибки базы. Поэтому удаление колонки делают в два релиза: сначала код перестаёт её использовать, потом отдельно удаляют её из базы. Ни Kubernetes, ни Django такие миграции не откатывают.

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

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