知识卡片

Kustomize靠改名触发滚动重启

专业/工作 · 528.c.1

内容

[[ConfigMap挂载方式决定能否热更新]]提到就算把 ConfigMap 挂载成卷,Kubernetes 也只会同步更新容器里的文件内容,不会重启应用去重新读取——这在应用没有主动监听文件变化的情况下等于没更新。Kustomize 的 configMapGenerator 换了个思路解决这个问题:它不直接复用同名 ConfigMap,而是每次根据输入内容算出一个哈希值拼进 ConfigMap 名字里,内容一变名字就变,Deployment 引用的是这个带哈希后缀的名字,名字变了 Kubernetes 就判定 Pod 模板发生了变化,从而自动触发一次滚动重启——重启过程里旧实例被逐个替换成读到新配置的新实例,全程零停机。发散:这是用”改一个引用字段”这种间接手段去触发”该发生却不会自动发生”的重启动作,本质上是把配置变更伪装成了 Kubernetes 原生就支持自动感知的字段变更,绕过了系统本身不支持的能力缺口。

参考来源

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