kubernetes中java应用程序的应用程序配置

问题描述 投票:1回答:2

我是java和k8的新手,我对如何处理我的java应用程序的应用程序配置有一些疑问。我有一个春季启动应用程序,其他三个使用wildfly。

因此,他们都获得了硬编码的应用程序配置,并且在启动时只需使用以下内容:

java -Dswarm.project.stage=development -jar foobar/target/foobar-swarm.jar

除了具有由应用程序配置数据组成的application.properties文件的spring boot之外。

所以基本上三个java应用程序已经支持两个文件(我知道这是不是没有):

 - project-stages.yml
 - standalone.xml

当开发人员想要部署到生产时,他使用:

  java -Dswarm.project.stage=production -jar foobar/target/foobar-swarm.jar

而且,现在我们来到kubernetes,它有三种处理应用程序配置数据的方法:

1.) Env variables

2.) Config maps

3.) Secrets

我在考虑使用configmaps而不是env变量,因为它们有更多的benefits

因此,开发人员给了我用外部文件覆盖这些硬编码变量的可能性:Dsystem.properties.file = / var / foobar / environment.properties

但我仍然用外部文件覆盖硬编码文件,我对这个解决方案不满意!

因此,我基本上建议可以在外部提供这些硬编码文件,并在k8中使用configmaps填充 - 在k8世界中处理配置文件的最佳做法是什么?

Tnx,汤姆

java docker configuration kubernetes
2个回答
2
投票

帖子中有几个问题,但我只能解决与spring-boot相关的问题。

为spring boot app指定配置的最简单,最方便的方法是通过其内置的分析功能。正如你已经提到的,你有application.properties。您可以根据您的使用情况创建类似的文件:application-production.propertiesapplication-staging.propertiesapplication-k8s.properties等.Kubernetes部署不会以任何方式改变这一点。您可以通过从kubernetes设置SPRING_PROFILES_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"

它将从application-k8s.properties中选择配置。

Spring .properties配置也支持环境变量。您可以使用这样的占位符:${YOUR_DB}在您的属性文件中,spring将自动获取名为YOUR_DB的env变量。使用此功能很方便,假设您的应用程序窗格必须有自己的数据库窗格。


0
投票

如果我的问题正确,您就会问如何通过k8s ConfigMap配置Spring Boot应用程序。是的,你可以这样做。

  1. 使用WORKDIR work_dir创建一个Docker镜像,在其中启动Spring Boot应用程序,例如通过java -jar /work_dir/app.jar
  2. 创建ConfigMap
  3. 在k8s内运行上述图像的容器
  4. 将Spring Boot application.properties的ConfigMap挂载到Container作为/work_dir/config/application.properties
  5. 在ConfigMap中的更改中,容器中的文件会更新。您必须重新启动Spring Boot应用程序才能将更改设置为活动状态。
© www.soinside.com 2019 - 2024. All rights reserved.