首页 > 其他分享 >使用reloader实现CM热更新后自动重启POD

使用reloader实现CM热更新后自动重启POD

时间:2024-07-24 14:39:35浏览次数:17  
标签:ConfigMap CM configmap 更新 POD Secret Pod Reloader reloader

目录

1.背景

在云原生环境中,配置管理通常通过ConfigMap和Secret对象来实现。尽管这些资源对象可以直接更新,但在更新ConfigMap或Secret时,挂载到Pod中的数据处理存在以下情况:

  • 环境变量挂载:通过Env方式挂载的环境变量在更新后不会自动同步。
  • 文件挂载:通过文件方式挂载的数据会同步更新,但可能存在秒级延时。

大多数情况下,当ConfigMap或Secret中的配置信息更新后,期望Pod内的应用能够及时读取到最新的值。通常的做法是手动触发Pod的滚动更新,以重新加载环境变量或文件内容。然而,当涉及到大量Pod时,这种手动操作变得繁琐且低效。
为了解决这一问题,社区开发了开源工具Reloader。Reloader能够在ConfigMap或Secret更新时,自动触发相关Pod的滚动更新。这一机制确保Pod能够及时应用新的配置,而无需手动干预,从而简化了运维操作,提高了效率。

2.Reloader简介

项目:https://github.com/stakater/Reloader
Reloader是一个开源的Kubernetes工具,专门用于监控ConfigMap和Secret的变化,并对相关的Pod及其关联的DeploymentConfigs、Deployments、Daemonsets、Statefulsets和Rollouts进行滚动升级。

2.1 原理

当Reloader检测到ConfigMap或Secret发生变化时,它会计算配置的SHA1哈希值(SHA1因其效率高且冲突少而被选择)。随后,Reloader会获取所有与此ConfigMap或Secret相关的Deployments、Daemonsets、Statefulsets和Rollouts,并检查这些资源的annotations中是否包含Reloader相关的注解。
这些注解通常指定一个特殊的环境变量。当Reloader找到这个环境变量时,它会获取其值,并将其与新的SHA1哈希值进行比较。如果哈希值不匹配,Reloader会更新这个环境变量的值。
如果环境变量不存在,Reloader会从ConfigMap中创建一个新的环境变量,赋予最新的哈希值,并更新相应的Deployment、Daemonset或Statefulset。
Kubernetes会检测到这个环境变量的变化,进而触发关联Pod的滚动升级。这样,即使在配置更新时,服务仍然可以继续运行,确保配置变更的无感知性。

3.Reloader部署

注:默认部署在default名称空间下

kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

4.使用方法

如果某deployment需要随着configmap的更新而自动重启pods
只需要添加注解reloader.stakater.com/auto: "true"即可:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  annotations:
    reloader.stakater.com/auto: "true" #添加注解
spec:
  replicas: 1

修改CM配置测试

[root@master01 nginx]# kubectl  apply  -f nginx-cm.yaml 
Warning: resource configmaps/nginx-default-cm is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
configmap/nginx-default-cm configured

查看pod可以看见已经触发 Pod 滚动更新

[root@master01 nginx]# kubectl get  pods

image.png

也可以指定对应的ConfigMap或Secret 的变动触发 Pod 滚动更新
在Deployment 的metadata.annotations中添加configmap.reloader.stakater.com/reload: "foo-configmap,bar-configmap,baz-configmap",指定这些 ConfigMap 才会触发 Pod 的更新。多个 ConfigMap 使用逗号分隔

kind: Deployment
metadata:
  annotations:
    configmap.reloader.stakater.com/reload: "foo-configmap,bar-configmap,baz-configmap"
spec:
  template: 
    metadata:

在Deployment 的metadata.annotations中添加secret.reloader.stakater.com/reload: "foo-secret,bar-secret,baz-secret",指定这些 Secret 才会触发 Pod 的更新。多个 Secret 使用逗号分隔

kind: Deployment
metadata:
  annotations:
    secret.reloader.stakater.com/reload: "foo-secret,bar-secret,baz-secret"
spec:
  template: 
    metadata:

标签:ConfigMap,CM,configmap,更新,POD,Secret,Pod,Reloader,reloader
From: https://www.cnblogs.com/Unstoppable9527/p/18320868

相关文章

  • 《安富莱嵌入式周报》第340期:开源便携RF信号发生器,六自由度3D鼠标,开源USB PD Sniffer,C
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV18w4m1k7NF/目录1、开源便携RF信号发生器,支持12.5MHz-6.4GHz2、关于ThreadX被移交Eclipse后,使用FileX的exFAT功能版权问题3、......
  • 易优CMS模板标签field字段值输出指定栏目ID的下级栏目的文档列表
    【基础用法】标签:field描述:获取channelartlist标签里的字段值,field标签只能在channelartlist标签里使用。用法:{eyou:channelartlisttypeid='栏目ID'type='son'row='20'}<ahref='{eyou:fieldname='typeurl'/}'>{eyou:fieldname='typen......
  • 帝国CMS网站给前台会员批量发送邮件
    一、登录后台,单击“用户”菜单,选择“批量发送邮件”子菜单,进入批量发送邮件界面: 二、进入批量发送邮件界面:接收会员组选择接收邮件的会员组(全选用"CTRL+A",选择多个用CTRL/SHIFT+点击选择)。每组发送个数分组发送设置,防止php超时中断执行。标题......
  • 易优CMS模板标签relevarticle相关文档
    [基础用法]标签:relevarticle描述:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联。在没有tag标签情况下,就以前3个关键词检索文档标题进行关联。这个标签随着数据量的增加可能会比较影响检索性能。提示:使用该标签之前,必须先安装相关文档......
  • 易优CMS模板标签uibackground背景图片在模板文件index.htm中调用uibackground标签,实现
    【基础用法】标签:uibackground描述:背景图片上传标签,使用时结合html一起才能完成可视化布局,只针对具有可视化功能的模板。用法:<divclass="eyou-edit"e-id="文件模板里唯一的数字ID"e-page='文件模板名'e-type="background"style="background-image:url({eyou:uibackgrounde......
  • 通天星CMSV6车载视频监控平台 disable存在SQL注入漏洞
    一、漏洞简介通天星CMSV6车载视频监控平台是东莞市通天星软件科技有限公司研发的监控平台,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。通天星科技应用于公交车车载、校车车载、大巴车车载、物流车载、油品运输车载、警车......
  • CMake 生成 Visual Studio 项目管理工程文件 sln
    前言全局说明CMake生成VisualStudio项目管理工程文件sln一、说明环境:Windows7旗舰版二、生成sln项目工程文件2.1UI界面版生成方式https://blog.csdn.net/analogous_love/article/details/1349075402.2命令行生成方式2.2.1看看都支持生成哪些版本2.2.......
  • 在 Kubernetes 中设置 Pod 优先级及其调度策略详解
    个人名片......
  • cmake Windows安装
    前言全局说明cmake安装一、说明环境:Windows7x64旗舰版二、官网&下载CMake是一个开源的、跨平台的工具家族,旨在构建、测试和打包软件。CMake用于使用简单的平台和编译器独立的配置文件来控制软件编译过程,并生成可以在您选择的编译器环境中使用的本机makefiles和......
  • CMake使用知识点之三——测试 用例
    知识点积累1内部宏${PROJ_SOURCE_DIR}:2单元测试代码cmake_minimum_required(VERSION3.10)project(ExampleProject)#启用测试enable_testing()#添加可执行文件main(如果有主程序的话)add_executable(mainmain.cpp)#添加测试可执行文件test1和test2add_e......