前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes配置热更新的两种方式

Kubernetes配置热更新的两种方式

原创
作者头像
Honest1y
发布2021-08-12 23:13:04
3.3K0
发布2021-08-12 23:13:04
举报
文章被收录于专栏:Kubernetes手记Kubernetes手记

1 背景

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

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

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

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

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

2 解决方案

2.1 Reloader

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

2.1.1 全局 configmap 触发更新

代码语言:javascript
复制
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 更新
代码语言:javascript
复制
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: log 
  labels:
    k8s-app: filebeat
  annotations:
    configmap.reloader.stakater.com/reload: "filebeat-config"
  • 多 configmap,以逗号对多个 configmap 进行隔离
代码语言:javascript
复制
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 的变更而更新。

代码语言:javascript
复制
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]

添加这一节的效果就是,在/configmap.yaml中有任何内容改变,都会导致Deployment的sepc下的annotation被更新,进而驱动重建pod,达到我们想要的效果。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 背景
  • 2 解决方案
    • 2.1 Reloader
      • 2.1.1 全局 configmap 触发更新
      • 2.1.2 按照指定的 configmap 变更自动触发资源对象的配置更新
    • 2.2 checksum 注解
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档