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

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

猜你喜欢

转载自blog.csdn.net/handsome0916/article/details/128696716