Как использовать свойства из конфигурационных карт в загрузочном приложении Java Spring, развернутом через Helm - PullRequest
0 голосов
/ 11 мая 2018

У меня есть простое загрузочное приложение Spring, которое мне нужно развернуть при разработке и создавать различные пространства имен в кластере Kubernetes с помощью Helm.

Я думал о сохранении нескольких application.properties (application-dev.properties, application-prod.properties) файлы для каждой среды, а затем создайте из них файлы config через файлы values.yaml, которые также будут отличаться для каждой среды и будут указаны при выполнении обновления Helm.

Теперь вопрос заключается в том, как мне потреблятьзначения из config.maps, как я понимаю, могут либо смонтировать файл свойств внутри контейнера, например /deployment/application.properties

, либо выставить каждое свойство как переменную среды внутри контейнера.

Но какиспользовать их из приложения Java?

Кроме того, в момент создания образа контейнера в нем находятся свойства .properties текущего приложения / встроенные ресурсы / файлы, и это приложение используется по умолчанию, поэтому мне нужно перезаписатьПовторите это поведение, когда приложение выполняется внутри контейнера, в отличие от того, когда приложение просто собирается и запускается вручную на рабочем столе разработчика.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вы, конечно, можете использовать переменные среды, как предлагает Бал Чуа.Если вы сделаете это, вы можете переопределить определенные значения во время установки с помощью --set или, если у вас много настроек, вы можете использовать флаг «- values» и передать в файл custom values.yaml.

Другой подход заключается в загрузке всего файла с использованием .Files.Glob (пример в github ) и загрузке файла как части диаграммы.Затем вы можете смонтировать файл в / config , чтобы использовать его в приложении весенней загрузки.Тогда ваш конфигурационный файл будет в той же форме, что и загрузочный конфигурационный файл Spring, а не helm values.yaml.Хотя во многих случаях не должно быть большой разницы.

Существует обсуждение того, как вы можете сделать подобное для секретов (вероятно, вы захотите поместить свои пароли в секреты) и использовать его для CI / CD вhttps://dzone.com/articles/hunting-treasure-with-kubernetes-configmaps-and-se (это статья, сопровождающая пример github).По сути, вы бы использовали .Files.Glob с .AsSecrets вместо .AsConfig для кодирования содержимого.На многих картах руля есть возможность сгенерировать случайный пароль, если он не указан, но, наверное, вам это не нужно.

0 голосов
/ 22 мая 2018

Я бы порекомендовал монтировать файлы (application.properties или application.yml) внутри ConfigMap в какую-то файловую систему, которые Spring Boot может автоматически обнаруживать, - тогда ваше приложение остается красивым и простым

0 голосов
/ 12 мая 2018

Springboot может автоматически выводить переменные из переменных окружения.В вашем application.properties или application.yaml просто используйте $ {MY_ENVIRONMENT_VARIABLE: my-defaultvalue}.
Используйте helm для заполнения вашего configmap.Используйте configmap в качестве переменных среды в манифесте развертывания.

Таким образом, вам не нужно иметь несколько application.properties для dev, int, prod внутри вашего образа.Сохраняя его нетронутым во время развертывания.

И тогда в вашей диаграмме управления вы можете иметь несколько значений values.yaml, например values-dev.yaml или values-int.yaml.вы также можете динамически устанавливать значения helm из командной строки, переопределяя файл yaml.

У меня есть демонстрационное приложение в github https://github.com/balchua/demo,, которое использует этот шаблон.

...