springboot程序上k8s配置文件的解决方案

文章讨论了如何在将Java程序(Dockerfile示例)部署到容器时处理不同的环境配置。由于Springboot的配置文件在jar包内不可修改,建议将配置文件放在jar同级的config文件夹中,但不包含在Dockerfile中。通过Kubernetes的ConfigMap,可以将配置映射到pod中的文件,例如创建一个名为myconf的ConfigMap并将其挂载到应用的/volumes/myconfig,以此实现环境配置的动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java程序上容器,比较简单,用现成的openjdk镜像就可以了,dockerfile文件一般如下:

FROM openjdk:8-jdk

# 将项目jar包添加到容器

ADD test.jar test.jar

# ENTRYPOINT 执行项目test.jar及外部配置文件
ENTRYPOINT ["java", "-jar", "test.jar"]

然而配置文件却成了问题,因为我们各个环境的配置是不一样的,但是jar包是用同一个(假如各个环境的jar包不一样,打包会比较麻烦,也不优雅),而spring boot的配置文件是写在jar包里的无法修改。那怎么办呢?

我们可以在test.jar的同一个目录下,创建一个config文件夹,然后把配置文件写进去这个文件夹,但是我们写dockerfile的时候不要写上去。假如在dockerfile指定不同环境的配置文件,打包起来也很复杂也不优雅。

因此,我们需要将configmap的配置,映射成文件,比如将某个configmap的一项,映射到config/application.properties文件下,比如创建configmap配置文件:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconf
  namespace: tsp
data:
  application.properties: |
    server.port = 8080
    spring.redis.host = 127.0.0.1

在config map中创建一项,名字就叫application.properties,内容就是配置文件的内容

然后在k8s的deployment里将配置加载到pod中

...
deployment.spec
  volumes:
      - name: myconfig
        configMap:
          name: front-conf
  
  containers:
  - name: app
    image: xxx.docker.com/project/myapp:myversion
    ...
    volumeMounts:
      - name: myconfig
        mountPath: /config/application.properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值