kubernetes中java应用程序的应用程序配置
我是java和k8新手,我对如何处理java应用程序的应用程序配置有些怀疑。我有一个spring boot应用程序,另外三个使用wildfly 因此,它们都有硬编码的应用程序配置,在启动它们时,只需使用如下内容:kubernetes中java应用程序的应用程序配置,java,docker,configuration,kubernetes,Java,Docker,Configuration,Kubernetes,我是java和k8新手,我对如何处理java应用程序的应用程序配置有些怀疑。我有一个spring boot应用程序,另外三个使用wildfly 因此,它们都有硬编码的应用程序配置,在启动它们时,只需使用如下内容: java -Dswarm.project.stage=development -jar foobar/target/foobar-swarm.jar 除了spring引导,它有一个包含应用程序配置数据的application.properties文件 因此,基本上这三个java应用程
java -Dswarm.project.stage=development -jar foobar/target/foobar-swarm.jar
除了spring引导,它有一个包含应用程序配置数据的application.properties文件
因此,基本上这三个java应用程序支持两个文件(我知道这是一个禁忌):
当开发人员想要部署到生产环境时,他会使用:
java -Dswarm.project.stage=production -jar foobar/target/foobar-swarm.jar
现在我们来看kubernetes,它有三种处理应用程序配置数据的方法:
1.) Env variables
2.) Config maps
3.) Secrets
我在考虑使用configmaps而不是env变量,因为它们有更多的变量
因此,开发人员给了我用外部文件覆盖这些硬编码变量的可能性:Dsystem.properties.file=/var/foobar/environment.properties
但是我仍然在用外部文件覆盖硬编码文件,我对这个解决方案不满意
因此,我基本上是在考虑这些硬编码文件是否可以在k8中从外部提供并使用configmaps填充-在k8世界中处理配置文件的最佳实践是什么
Tnx,
Tom这篇文章中有几个问题,但我只能回答与spring boot相关的问题 为spring boot应用程序指定配置的最简单、最方便的方法是通过其内置的评测功能。正如您已经提到的,您有
application.properties
。您可以根据您的使用情况创建类似的文件:应用程序生产.properties
,应用程序暂存.properties
,应用程序-k8s.properties
,等等。
Kubernetes部署不会以任何方式改变这一点。
您可以通过从kubernetes设置SPRING\u PROFILES\u ACTIVE
env变量来控制要拾取的配置
您可能会有这样的情况:
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"
它将从应用程序-k8s.properties
中选择配置
配置文件也支持环境变量。
在属性文件中可以有像
${YOUR_DB}
这样的占位符,Spring将自动拾取名为YOUR_DB
的env变量。使用此功能很方便,比如说,当您的应用程序pod必须有自己的db pod时。如果我没有弄错您的问题,您会问如何通过k8s ConfigMap配置Spring Boot应用程序。是的,你能做到
在此解决方案中,您必须使用docker image预打包应用程序文件
application-k8s.properties
,对吗?这意味着现在你有了不同环境的docker图像?@nir我不知道你的意思。无需在应用程序级别操作图像。您需要引用应用程序中的容器(图像实例)。您可以在应用程序-k8s.properties
中通过别名引用它们,这些别名来自您的部署。你也可以像我在回答中解释的那样,通过环境变量注入它们。也许我在你的建议中遗漏了一些东西,但休伯特·斯特罗比策的回答对我来说是有意义的。您的spring boot(或独立java)应用程序正在容器中启动,需要加载属性文件(application whatever.properties)。因此,您必须预先打包该属性文件,或者按照Hubert的建议装载configmap,或者让其他外部服务提供给spring boot
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"