2016-05-05 2 views
9

У меня есть миграция базы данных, которую я хотел бы запустить до развертывания новой версии моего приложения в кластере Kubernetes. Я хочу, чтобы эти миграции выполнялись автоматически в рамках конвейера непрерывной доставки. Миграция будет инкапсулирована как изображение контейнера. Каков наилучший механизм для достижения этого?Как лучше всего запускать одноразовые задачи миграции в кластере кубернетов

Требования к решению:

  • быть в состоянии определить, является ли миграция не удалось, так что мы впоследствии не пытаться развернуть новую версию приложения в кластере.
  • сдавать, если сбой миграции - не продолжать его повторную попытку.
  • иметь возможность доступа к журналам для диагностики неудачных миграций.

Я предположил, что функциональность Работа в Kubernetes бы сделать это легко, но, как представляется, несколько проблем:

бы использовать «голые стручки» быть лучшим подход? Если да, то как это может работать?

+2

Как вы это сделали? С той же самой дилеммой ... –

ответ

5

Вы могли бы попытаться сделать оба задания миграции и приложения независимо друг от друга, выполнив следующие действия:

  • Есть возвращение рабочих мест миграции успешно, даже если миграция не удалось. Храните машиночитаемую запись где-нибудь, что было результатом миграции. Это можно сделать либо явно (например, путем написания последней версии схемы в каком-либо поле таблицы базы данных), либо неявно (предположим, что при успешном задании на миграцию должно быть создано определенное поле). Задача миграции вернет код ошибки, если он не по техническим причинам (так же как недоступность базы данных, к которой должна применяться миграция). Таким образом, вы можете выполнять миграцию через Kubernetes Jobs и полагаться на его способность работать до завершения в конечном итоге.
  • Создал новую версию приложения, чтобы она могла работать с базой данных как на этапах до и после миграции. Это означает, что это зависит от ваших бизнес-требований: приложение может либо простаивать до тех пор, пока миграция не завершится успешно, либо может привести к другим результатам для своих клиентов в зависимости от текущей фазы. Ключевым моментом здесь является то, что приложение обрабатывает результат миграции, созданный ранее заданиями миграции, и действует соответственно, не прерываясь ошибочно.

Объединение этих двух подходов к проектированию, вы должны иметь возможность разрабатывать и выполнять задания и приложения миграции независимо друг от друга и не должны вводить временную связь.

Является ли эта идея действительно разумной для реализации, зависит от более конкретных деталей вашего дела, таких как сложность усилий по миграции базы данных. Альтернатива, как вы упомянули, заключается в простом развертывании неуправляемых модулей в кластере, который выполняет миграцию. Это требует немного дополнительной проводки, так как вам нужно будет регулярно проверять результат и различать успешные и неудачные результаты.

Смежные вопросы