java应用程序在kubernetes中的应用程序configuration
我是新来的Java和K8,我对如何处理我的Java应用程序的应用程序configuration有一些怀疑。 我有一个春季启动应用程序,其他三个使用野蛮。
所以,他们都得到了硬编码的应用程序configuration,启动它们时只需使用如下所示:
java -Dswarm.project.stage=development -jar foobar/target/foobar-swarm.jar
除了具有由应用程序configuration数据组成的application.properties文件的spring启动。
所以基本上这三个Java应用程序已经支持两个文件(我知道是不是):
- project-stages.yml - standalone.xml
而当开发人员想要部署到生产时,他使用:
java -Dswarm.project.stage=production -jar foobar/target/foobar-swarm.jar
而现在我们来到kubernetes,它有三种处理应用程序configuration数据的方式:
1.) Env variables 2.) Config maps 3.) Secrets
我正在考虑使用configmaps而不是envvariables,因为它们有更多的好处 。
所以,开发人员给了我用外部文件覆盖这些硬编码variables的可能性: Dsystem.properties.file = / var / foobar / environment.properties
但是我仍然用外部文件覆盖硬编码的文件,而且我对这个解决scheme不满意!
所以,我基本上看在build议可以这些硬编码的文件提供外部和填充configuration文件在K8 – 什么是处理在K8世界的configuration文件的最佳做法?
Tnx,Tom
这个post中有几个问题,但我只能解决与spring-boot有关的问题。
指定configuration到弹簧启动应用程序的最简单和最方便的方式是通过其内置的configuration文件function。 正如你已经提到你有application.properties
。 您可以根据您的使用情况创build类似的文件: application-production.properties
, application-staging.properties
, application-k8s.properties
等。Kubernetes部署不会以任何方式更改。 您可以通过从kubernetes设置SPRING_PROFILES_ACTIVE
envvariables来控制select哪个configuration。
你可能有这样的事情:
docker run -e SPRING_PROFILES_ACTIVE=k8s -d -p 0.0.0.0:8080:8080 \ --name=yourapp your_image_name bash -c "java -jar yourapp.jar"
它将从application-k8s.properties
selectconfiguration。
Spring .properties
configuration也支持环境variables。 你可以在你的属性文件中有这样的占位符: ${YOUR_DB}
,spring会自动select名为YOUR_DB
envvariables。 使用这个function很方便,比如说你的应用程序窗口必须有自己的db窗格。
如果我的问题得到了解决,您正在问如何通过k8s ConfigMapconfigurationSpring Boot应用程序。 是的,你可以这么做。
- 用WORKDIR work_dir创build一个Docker镜像,在其中启动Spring Boot应用程序,例如通过java -jar /work_dir/app.jar
- 创build一个ConfigMap
- 在k8s内运行上述图像的容器
- 将Spring Boot的application.properties的ConfigMap挂载到容器中,作为/work_dir/config/application.properties
- ConfigMap中的更改会更新容器中的文件。 您必须重新启动Spring Boot应用程序才能将您的更改设置为活动状态。
- 如何从泊坞窗图像中排除应用程序设置(并将其添加到容器中)?
- 如何configurationdocker组合正确地公开端口?
- 为openstack安装novadocker
- 在spark上configuration,总是在spark master web UI的job application中错误的executor_cores
- Docker(Kubernetes)中Java应用程序的configuration
- 我可以从命令行添加新的共享目录到Docker吗?
- 所有的WSO2 API Manager的configuration都保存在数据库中吗?
- Docker nginx错误在安assembly置文件
- 通过导出/导入移动Docker容器:丢失像启动命令一样的configuration