我正在将Spring Boot应用程序部署到kubernetes。我的docker文件如下。
FROM alpine-jdk1.8:latest
RUN mkdir -p /ext/app
COPY target/app-service.war /ext/app
ENV JAVA_OPTS="" \
APPLICATION_ARGS=""
CMD java ${JAVA_OPTS} -jar /ext/app/app-service.war ${APPLICATION_ARGS}
我在conf目录下有许多配置文件,但也有秘密。
因此,在Kubernetes中将它们移到了秘密中,将很少移到configMaps中。但是,创建了1个以上的configmap和秘密来分组配置和秘密。
因为有很多configMap和秘密,所以我不得不创建许多卷挂载和卷,并使用spring confg位置将所有这些卷作为逗号分隔的值添加到类路径中。
- name: APPLICATION_ARGS
value: --spring.config.location=file:/conf,.....
还有其他更好的方法吗?
谢谢
答案 0 :(得分:1)
这是秘密的好方法,但for configMaps则少。
如果您的战争应用程序可以依赖于环境变量,则可能的方法是将configMap转换为rc文件(具有属性的文件),然后可由应用程序读取一次并使用
您可以在The Kubernetes Wars的“ {knu:t hæugen”中看到这种方法的示例:
如何处理配置?
Kubernetes喜欢在环境变量而不是配置文件中进行应用程序配置。
在使用convict的节点应用程序中,这很容易,在红宝石应用程序中,这非常容易,而在Java应用程序中,从相对容易到很血腥。但是如何使配置进入复制控制器?我们选择使用configmaps(一个kubernetes对象)存储配置,引用rc文件中的变量并将其维护在git控制的文件中。
因此,当我们要更改为应用程序配置时,请更新配置文件并运行一个脚本,该脚本将更新configmap并重新加载该应用程序的所有Pod