Лучшая практика развертывания Liquibase + Spring Boot в контейнерах KubernetesJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Лучшая практика развертывания Liquibase + Spring Boot в контейнерах Kubernetes

Сообщение Anonymous »

Итак, у меня есть несколько приложений Spring Boot, которые используют Liquibase для управления изменениями схемы БД и развертываются в относительно простых контейнерах на базе Ubuntu.
Сейчас приложения поставляются с двумя контейнерами - один образ initContainer, который представляет собой Ubuntu+JDK+Maven на одном уровне, весь исходный код и MAVEN_HOME на втором уровне и запускает mvn liquibase:update, и одно приложение image это Ubuntu+JRE и запускает java -jar /app/app.jar с параметром Spring.liquibase.enabled=false в файле application.properties. Пока все хорошо, но с этим подходом есть две проблемы:
  • контейнеры инициализации неоправданно огромны (из всего репозитория Maven + метаданных, которые включает в себя кучу вещей, необходимых только во время компиляции и тестирования, а также поставку полного JDK вместо только JRE), содержит исходный код и, поскольку Maven тупой, также проверяет все зависимости, если они все еще актуальны.< /p>
  • Мне нужно настроить учетные данные базы данных в диаграмме Helm, чтобы Maven мог их получить. Вероятно, мне это сошло бы с рук, записав их в какой-нибудь объект Secret, который вводит переменные среды, но мне все равно приходится иметь дело с двумя разными способами экранирования пароля базы данных.

    initContainer запускается при запуске каждого модуля, когда я развертываю программное обеспечение или масштабирую серверные реплики.
Есть ли более чистый способ сделать это? Я бы предположил что-то вроде:
  • использование только одного контейнера приложения и для приложения, и для initContainer, но с использованием некоторого параметра в initContainers для запуска только Liquibase. Я попытался отключить Spring.main.web-application-type, но, к сожалению, мне не удалось предотвратить запуск таких вещей, как Redis, ElasticSearch или Swagger, с помощью Spring Boot.
    < /li>
    Использовать какой-нибудь крючок жизненного цикла Kubernetes для развертывания, создавая модули, чтобы при развертывании приложения Liquibase запускалась только один раз для время существования развертывания (поэтому оно не работает в масштабе каждого отдельного контейнера), но мне не удалось заставить это работать.
Существует ли какая-либо «лучшая практика» для современных версий Spring Boot, которая достигает моих целей? Все руководства в сети, кажется, отвечают только на вопрос «как отключить Liquibase во время запуска», но ни одно из тех, что я нашел до сих пор, не дает «запустить только Liquibase, а затем выйти без кода ошибки».

Подробнее здесь: https://stackoverflow.com/questions/792 ... containers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»