专栏首页Kubernetes手记Kubernetes配置热更新的两种方式
原创

Kubernetes配置热更新的两种方式

1 背景

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

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

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

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

用户定义Kubernetes的资源对象(例如Deployment、Daemonset 等),配置文件以configmap定义,通过Volumemounts进行挂载到Pod里,配置文件修改以后,服务可以自动reload加载更新配置。

2 解决方案

2.1 Reloader

  • 限制条件:Kubernetes版本在1.9以及以上
  • 集群安装reloader
  • 通过添加注解annotation的方式实现
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

2.1.1 全局 configmap 触发更新

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: log 
  labels:
    k8s-app: filebeat
  annotations:
    reloader.stakater.com/auto: "true"

2.1.2 按照指定的 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"

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mybatis批量更新的两种方式

    sr
  • 常用的两种spring、mybatis 配置方式

    转载自http://blog.csdn.net/qh_java/article/details/51601139

    allsmallpig
  • 清空设备配置的两种方式

    执行命令reset saved-configuration清除设备下次启动使用的配置文件信息,然后重启设备,重启时提示保存配置,请选择“N”不保存。

    用户8611941
  • SpringMVC配置字符过滤器的两种方式

    凡人飞
  • springboot配置Filter的两种方法

    ydymz
  • Meteor实现热重载的两种方式

    时见疏星
  • CentOS中Docker的MySQL更改配置后重启不了的两种解决方式

    项目要用到分库分表,然后自己手动更改了服务器中的Docker中MySQL的配置文件my.cnf。

    全栈开发Dream
  • 配置热更新,不想重启,如何更新Bean的状态?

    通过配置中心,应用可以实时的接收到配置的变更,但是,应用中一些 Bean 是通过 Spring 容器来管理的,配置变更之后,怎么来修改 Spring 容器中对应...

    用户1516716
  • FPGA的三种配置方式

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。...

    FPGA技术江湖
  • c3p0的3种配置方式

    1.通过setters方法一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件

    py3study
  • gitlab两种连接方式:ssh和http配置介绍

    gitlab环境部署好后,创建project工程,在本地或远程下载gitlab代码,有两种方式:ssh和http (1)ssh方式:这是一种相对安全的方式 ...

    洗尽了浮华
  • Intellij IDEA 4种配置热部署的方法

    转载自https://www.cnblogs.com/jcook/p/6910238.html

    allsmallpig
  • springboot开发之配置嵌入式Servlet容器两种方式

    (1)在主配置文件中修改与server的配置,例如server.port=8081等等

    西西嘛呦
  • 【javascript】原生js更改css样式的两种方式

    下面我给大家介绍的是原生js更改CSS样式的两种方式: 1通过在javascript代码中的node.style.cssText="css表达式1;css表达式...

    啦啦啦321
  • 串的两种模式匹配方式(BF/KMP算法)

    串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操...

    BWH_Steven
  • Android设置Activity全屏的两种方式

    如果要设置所有页面都为全屏的话就直接将theme属性添加到application标签中即可,例如:

    Vance大飞
  • 改善 Kubernetes 上的 JVM 预热问题

    JVM 预热是一个非常头疼而又难解决的问题。本文讨论了在运行在 Kubernetes 集群中的 Java 服务如何解决 JVM 预热问题的一些方法和经验。

    码农架构
  • 改善 Kubernetes 上的 JVM 预热问题

    JVM 预热是一个非常头疼而又难解决的问题。基于 JVM 的应用程序在达到最高性能之前,需要一些时间来“预热”。当应用程序启动时,通常会从较低的性能开始。这归因...

    CNCF
  • 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

    恒宇少年

扫码关注云+社区

领取腾讯云代金券