一 背景
1.1 配置中心问题
在云原生中配置中心,例如:Configmap
和Secret
对象,虽然可以进行直接更新资源对象
- 对于引用这些有些不变的配置是可以打包到镜像中的,那可变的配置呢?
- 信息泄漏,很容易引发安全风险,尤其是一些敏感信息,比如密码、密钥等。
- 每次配置更新后,都要重新打包一次,升级应用。镜像版本过多,也给镜像管理和镜像中心存储带来很大的负担。
- 定制化太严重,可扩展能力差,且不容易复用。
1.2 使用方式
Configmap
或Secret
使用有两种方式,一种是env
系统变量赋值,一种是volume
挂载赋值,env写入系统的configmap是不会热更新的,而volume写入的方式支持热更新!
- 对于env环境的,必须要滚动更新pod才能生效,也就是删除老的pod,重新使用镜像拉起新pod加载环境变量才能生效。
- 对于volume的方式,虽然内容变了,但是需要我们的应用直接监控configmap的变动,或者一直去更新环境变量才能在这种情况下达到热更新的目的。
应用不支持热更新,可以在业务容器中启动一个sidercar容器,监控configmap的变动,更新配置文件,或者也滚动更新pod达到更新配置的效果。