作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们上一小节介绍了注解(Annotations)的功能可以用于标注各种资源的属性,其实它不仅仅可以标注资源属性,还可以作为某些资源功能的开关。然后我们在Kubernets(k8s)-ConfigMap的时候介绍过,更新ConfigMap并会触发业务重启,而我们今天要讲解的Reloader就可以利用注解(Annotations)把业务的自动更新实现。
Reloader 是一个Kubernetes控制器,它可以监控配置文件(ConfigMap)或秘密(Secrets)的变化,并在这些资源发生变化时重新启动或重新加载相应的Pod。这在配置文件或证书等敏感信息更新时非常有用,因为它可以确保Pod使用了最新的配置或证书。
主要功能
-
监控Kubernetes ConfigMap和Secrets的变化。
-
当检测到变化时,触发Pod的重启或发送HTTP请求来触发配置的重新加载。
-
支持自定义重新加载策略,例如,只重启特定的容器或发送特定的HTTP请求。
如何使用
1. 安装Reloader
bash
#使用helm安装,具体ns可以调整和修改
#添加仓库helm repo add stakater https://stakater.github.io/stakater-charts
#安装reloader
helm install reloader stakater/reloader --namespace kube-system
#直接使用yaml文件
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
我们这里使用yaml文件安装,我们可以看见它创建了什么资源可以更容易理解里面的逻辑,这个逻辑和我们讲ServiceAccount的逻辑是一样的,也可以进去看看它具体是申请了哪些权限。当Pod正常拉起以后,我们就可以

2. 配置资源
在部署你的应用程序时,你需要在工作负载中添加相应的注解(Annotations),以指示Reloader如何处理配置更新。
例如,以下是一个具有ConfigMap和Secret监视的Deployment的示例:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: myapp
annotations:
reloader.stakater.com/auto: "true" # 启用Reloader自动重载
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: 192.168.31.43:5000/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: nginx-conf-volume
mountPath: /etc/nginx/conf.d # 假设这是Nginx配置文件的位置
volumes:
- name: nginx-conf-volume
configMap:
name: nginx-config # 引用的ConfigMap名称

bash
#下面的事件就是该Deploy因为更新了cm,而触发Pod更新
Normal Reloaded 87s (x2 over 2m57s) reloader-configMaps Changes detected in 'nginx-config' of type 'CONFIGMAP' in namespace 'default', Updated 'nginx-deployment' of type 'Deployment' in namespace 'default'
Normal ScalingReplicaSet 87s deployment-controller Scaled up replica set nginx-deployment-5c78d84c48 to 1
Normal ScalingReplicaSet 86s deployment-controller Scaled down replica set nginx-deployment-5dcf45bb6b to 0
3. 配置重新加载策略
reloader
还支持更复杂的重新加载策略,例如:
注解
描述
reloader.stakater.com/auto: "true"
自动监控所有关联的ConfigMap和Secret的变化,并在发生变化时触发Pod的滚动更新。
reloader.stakater.com/only: "true"
仅当特定资源发生变化时才重启Pod。通常需要结合reloader.stakater.com/match
注解使用。
reloader.stakater.com/ignore: "true"
忽略某些资源的变化,即使这些资源发生了变化也不会触发Pod的滚动更新。通常需要结合reloader.stakater.com/match
注解使用。
reloader.stakater.com/container-name: "my-container"
仅重启特定名称的容器,适用于多容器Pod。
注意事项
-
确保
reloader
控制器有足够的权限来监视和重启你的Pod,所以可以查看集群角色的权限是怎么申请的。 -
考虑到重启Pod可能会造成服务中断,请确保你的应用程序能够优雅地处理重启。
-
在生产环境中使用之前,应该在测试环境中充分测试
reloader
的配置。
reloader
是一个非常有用的工具,特别是在需要动态更新应用程序配置的场景中。通过自动化配置更新后的Pod重启,它可以大大简化Kubernetes集群的管理工作。
但是我们也在生产环境遇到过大面积的Pod意外重启的情况,虽然并没有发生故障,但是这也是一个不太好的情况。一般而言就是集群部署的时候会打开这个功能,当集群运行以后就会给关闭这个功能。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。