2 min read

当Configmap更新后Pod自动重启

当Configmap更新后Pod自动重启

背景

在Kubernetes环境中,Pod 和ConfigMap是两种完全独立的资源,如果configmap产生变化,Pod并不会自动重新启动。但是我们有时候希望有这两者之间有个联动关系,即Configmap资源生产变化时,就自动重启Pod,以达到配置生效的目的。

解决方案

引入 Reloader

一个 Kubernetes 控制器,用于监视 ConfigMap 和 Secrets 中的更改,并在 Pod 及其关联的部署、StatefulSet、DaemonSet 和 DeploymentConfig 上执行滚动升级。

其它方案,如wave也可以实现:https://github.com/wave-k8s/wave

快速指南

安装 Reloader

安装Reloader
我们直接使用 helm 进行安装

# helm repo add stakater https://stakater.github.io/stakater-charts
# helm install reloader stakater/reloader --version 1.0.11

安装完毕后,将会看到集群中多了个Reloader的Pod应用。

# k get pod
NAME                                   READY   STATUS    RESTARTS   AGE
reloader-reloader-85f9d94b44-28g6c     1/1     Running   0          4h54m

示例:

集群中有个deploy资源,名为redis-haproxy,而该资源引用了redis-haproxy-configmap的configmap资源,我们需要改动redis-haproxy-configmap资源后立马将redis-haproxy控制器的Pod自动重启。

  • 编辑redis-haproxy deploy控制器,在annotations中加入对应内容:
...
metadata:
  annotations:
    configmap.reloader.stakater.com/reload: "redis-configmap"
 ...

如果是映射secret资源的话,内容为:`secret.reloader.stakater.com/reload: "redis-secret"

此时我们随意改动redis-haproxy-configmap中的内容,保存退后后, redis-haproxy 应用将自动触发重启。

参考引用