Kubernetes ConfigMap热更新

2022-11-06,,

ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中.

总结

更新 ConfigMap 后:

使用该 ConfigMap 挂载的 Env 不会同步更新
使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新

ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值,且同一个 namespace 中的 pod 的环境变量是不断累加的,参考 Kubernetes中的服务发现与docker容器间的环境变量传递源码探究。为了更新容器中使用 ConfigMap 挂载的配置,可以通过滚动更新 pod 的方式来强制重新挂载 ConfigMap,也可以在更新了 ConfigMap 后,先将副本数设置为 0,然后再扩容。


在kubernetes中,更新configMap后,pod是不会自动识别configMap中的变动。

configMap更新后,如果想使pod中引用configMap的变量生效,

通常简单的做法是:

方法1. 删除该pod,让其自动产生一份新的pod.

方法2. 修改pod的配置,让其自动产生一份新的pod.

方法3. 增加一个sidecar,让其监控configMap的变化,来重启pod.

原理就是:通过更新deployment中的Annotations,增加一个version的key,每次需要更新configMap,只要upgrade一次kustomization.yaml中的commonAnnotations->version的值,发布后,pod就会自动重建一次,以此来发现confiMap的新值。

参考网址:https://blog.csdn.net/kozazyh/article/details/89137223

Kubernetes ConfigMap热更新的相关教程结束。

《Kubernetes ConfigMap热更新.doc》

下载本文的Word格式文档,以方便收藏与打印。