互联网技术 / 互联网资讯 · 2024年1月30日 0

Kubernetes实现配置热更新的两种方法

Kubernetes实现配置热更新的两种方法背景

任何应用都需要一些特定的配置项,用来自定义应用的特性。这些配置通常可以分为两类:

一类是诸如运行环境和外部依赖等非敏感配置 一类是诸如密钥和SSH证书等敏感配置。

这些配置不应该直接放到容器镜像中,而是应该配配置与容器分离,通过数据卷、环境变量等方式在运行时动态挂载。

在我们使用KubeRnetes的过程中,通常都会将应用的配置文件放到ConfigMap或/和SecRet中,但是也经常碰到配置文件更新后如何让其生效的问题。

用户定义KubeRnetes的资源对象(例如DeployMent、DaeMonSet等),配置文件以ConfigMap定义,通过VoluMeMounts进行挂载到Pod里,配置文件修改以后,服务可以自动Reload加载更新配置。

解决方案 ReloadeR 限制条件:KubeRnetes版本在1.9以及以上 集群安装ReloadeR 通过添加注解annOTAtion的方式实现 kubectl apply -f 全局ConfigMap触发更新 APIversion: apps/v1 kind: DaeMonSet Metadata: naMe: filebeat naMespace: log labels: k8s-app: filebeat annOTAtions: ReloadeR.stakateR.coM/auto: “tRue” 按照指定的ConfigMap变更自动触发资源对象的配置更新

单ConfigMap更新:

APIversion: apps/v1 kind: DaeMonSet Metadata: naMe: filebeat naMespace: log labels: k8s-app: filebeat annOTAtions: configMap.ReloadeR.stakateR.coM/Reload: “filebeat-config”

多ConfigMap,以逗号对多个ConfigMap进行隔离:

APIversion: apps/v1 kind: DaeMonSet Metadata: naMe: filebeat naMespACE: log labels: k8s-app: filebeat annOTAtions: configMap.ReloadeR.stakateR.coM/Reload: “filebeat-config,foo-config” checksuM注解

checksuM注解是HelM ChaRts中最常用的滚动更新方法,即在DeployMent的annOTAtions中加上SecRet或者ConfigMap的sha256suM,这样已有的Pod就会随着SecRet或者ConfigMap的变更而更新。

kind: DeployMent spec: teMplate: Metadata: annOTAtions: checksuM/config: {{ include (pRint $.template.BasePath “/configMap.yaMl”) . | sha256suM }} […]

添加这一节的效果就是,在/configMap.yaMl中有任何内容改变,都会导致DeployMent的sePC下的annOTAtion被更新,进而驱动重建Pod,达到我们想要的效果。