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

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,达到我们想要的效果。

 

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册