kubernetes configmap热加载

渡河人

在kubernetes中,configmap的用途用来传递参数给应用,主要的用法:
1、使用configmap挂载env
2、使用configmap挂载volume
具体的yaml文件不写了,具体的可以搜索一下
使用上述两种方法给应用传递参数之后,会有两种结果:
第一种:使用env方式挂载的configmap,在configmap更改之后,再次去查看变量的值,此时,变量的值是没有改变的。
第二种:使用volume的方式挂载configmap之后,当configmap更新之后,变量的值会发生变化,但是中间会存在一定的时间间隔,大约是10左右,这主要是因为kubelet 对pod的同步间隔是10秒,另外需要注意的是当使用subpath将configmap中的某个文件单独挂载到目录下,那这个文件是无法热更新的,这是configmap本身的逻辑决定的。

上述两种方式配置参数的方式可以根据自己的需要进行选择,如果对实时性没有要求可以使用volume进行挂载。当参数更新之后并不代表业务逻辑更新了,需要通知业务重新通知业务进行逻辑上的更新。

应用本身可能不存在热加载的逻辑,可能要考虑别的方式来对配置参数进行热加载:
第一种:使用sidecar方式来对配置参数监听,然后根据各自应用本身业务的逻辑来对参数进行热架子啊
第二种:不适用上述sidecar的方式,直接将主进程和sidecar进程打进同一个镜像中,然后进行热加载
第三种:应用本身监听配置的变化,在逻辑中处理热加载或者是使用第三方封装好的库。

上述方式可能会存在这样那样的限制,换一种解决思路就是对应用进行滚动更新操作,当pod发生滚动更新时,配置参数肯定会重新进行加载,这样就可以保证配置参数更新了,滚动更新实现方式:可以在yaml文件中添加annotation,每次更新参数时,更新该注解,也可以在CI流程中实现(将configmap计算一个hash值,每次更新都会改变,然后触发滚动更新操作)

参考链接:
https://aleiwu.com/post/confi...
https://jimmysong.io/kubernet...

阅读 2.7k
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
文章目录
宣传栏