知识卡片

ConfigMap挂载方式决定能否热更新

专业/工作 · 528

内容

Kubernetes ConfigMap 有三种消费方式:作为容器启动的命令行参数、注入成环境变量、或挂载成卷。三者里只有挂载成卷这一种,在 ConfigMap 内容变化后会被 Kubernetes 自动同步更新到容器内的文件系统,环境变量和命令行参数一旦容器启动就固定死了,ConfigMap 改了也不会反映到运行中的容器里,除非重建 Pod。Spring Boot 又正好会自动发现 /config 子目录下的属性文件,这让”挂载成卷”和”应用能读到最新配置”这两件事天然对上——把 ConfigMap 挂到 /workspace/config(Buildpacks 的工作目录)就是这个组合拳的具体落地。发散:这是[[配置热更新不等于重启]]在 Kubernetes 原生配置机制上的对应版本——同样是”改配置不重启应用”这个诉求,在配置服务器体系里靠事件刷新实现,在 K8s 原生体系里靠卷挂载的自动同步实现,但光是文件更新了,应用要不要真的重新读取这些新值,还是另一个问题。

参考来源

《Cloud Native Spring in Action》第14章《Configuration and secrets management》