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
应用将自动触发重启。