GitOps и миграции баз данных
Я пытаюсь внедрить GitOps в нашей компании. В основном у нас есть микросервисы, написанные на Django (однако это может быть любой другой веб-фреймворк). У меня концептуальная проблема с миграцией базы данных. Прямые миграции просты: вы запускаете их как задание, контейнер инициализации или перехватчики в helm. А как насчет обратной миграции? Допустим, я хочу выполнить откат с версии 1.1 до версии 1.0, и у меня есть некоторые миграции, которые нельзя применить. И что теперь? Я хотел использовать argo cd или flux.
Есть действительно хорошая статья: https://www.weave.works/blog/how-to-correctly-handle-db-schemas-during-kubernetes-rollouts. Однако это требует определенной дисциплины, которой у вас нет в Django.
1 ответ
Одна из стратегий, которую вы можете применить, заключается в том, что любая миграция базы данных должна быть обратно совместима (особенно DDL), чтобы при откате к более старой версии состояние базы данных по-прежнему было совместимо с более старой версией. Это должно быть сделано в качестве руководства по дизайну/архитектуре.
Бывший:
- Никогда не удаляйте таблицу как часть миграции
- Никогда не бросайте столбец
- Никогда не меняйте тип столбца и т. д.