Как развернуть приложение spring boot без изменения записей в базе данных на kubernetes?

#postgresql #spring-boot #kubernetes #docker-compose #kompose

Вопрос:

У меня есть приложение Spring Boot, которое действует как REST API, оно использует JPA и Hibernate для сопоставления объектов с таблицами базы данных PostgreSQL. Я собираюсь развернуть свое приложение при выпуске через Kubernetes. Все приложение построено с помощью окна настройки инструментов-создать, а затем преобразовано с помощью инструмента Создать. Несколько раз объектная модель изменяется, поэтому схема таблицы базы данных для этого объекта. Как лучше всего развернуть мое приложение и новые схемы баз данных в Kubernetes без изменения записей, потери пользовательских данных или предотвращения каких-либо конфликтов с базой данных?

Комментарии:

1. Используйте какой-нибудь инструмент управления миграцией баз данных, например liquibase

2. cloud.google.com/blog/products/databases/…

Ответ №1:

Вам следует отключить создание схемы гибернации, чтобы убедиться, что она не удаляет данные.

Далее вам следует выяснить, является ли Liquibase https://www.liquibase.org/ или Взлетно-посадочная полоса https://flywaydb.org/ подходит для вашего варианта использования для объединения миграций в рамках вашего приложения.

Комментарии:

1. Поэтому для liquibase я протестировал небольшой проект, который подключается к базе данных postgresql, я внес изменения в один из столбцов в качестве примера сценария сначала удалил столбец с именем first_name , затем синхронизировал данные liquibase, но он не применяет обновления. Я действительно вижу столбец first_name , но у него есть нулевое значение. Таким образом, liquibase не создает резервные копии данных и не может передавать данные из старого столбца в новый столбец?

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

3. @Я пробовал liquibase, но когда код выталкивается, у меня есть gitlab-runner , который создает новый образ docker и помещает его в реестр контейнеров, после чего он преобразует образ docker с помощью Compose в артефакт Kubernetes , но контейнер docker для базы данных будет удален из модуля, так как обойти это?