返回
Kubernetes热部署利器:Reloader
后端
2023-09-24 10:18:31
当我们使用k8s的ConfigMap作为配置文件时,面临着一个问题:一旦修改了ConfigMap,pod并不会自动重新加载配置,这时就需要重启pod来实现更新,在一些场景下,例如有状态应用,蓝绿部署或零宕机部署,pod的重启代价较大,为了解决这类问题,Reloader横空出世。
Reloader是一个运行在Kubernetes集群中的控制器,它可以自动监控ConfigMap的变化,并在ConfigMap发生变化时自动重启受影响的pod,从而实现热部署。
1. 部署Reloader
- 创建一个namespace用于部署Reloader,例如:
kubectl create namespace reloader-system
- 将Reloader部署到集群中:
kubectl apply -n reloader-system -f https://raw.githubusercontent.com/stakater/Reloader/master/manifests/reloader.yaml
- 查看Reloader是否已经成功部署:
kubectl get pods -n reloader-system
2. 使用Reloader实现热部署
- 创建一个ConfigMap,例如:
kubectl create configmap my-config --from-literal=key1=value1
- 在Deployment中使用ConfigMap:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
env:
- name: KEY1
valueFrom:
configMapKeyRef:
name: my-config
key: key1
- 修改ConfigMap:
kubectl patch configmap my-config --patch '{"data":{"key1":"value2"}}'
- 观察pod,可以看到pod会自动重启,并且新的配置已经生效。
3. 注意事项
- Reloader只支持对ConfigMap的键值进行修改,不支持对ConfigMap的元数据的修改。
- Reloader只支持对Deployment、StatefulSet和DaemonSet类型的资源进行热部署。
- Reloader默认只会重启发生变化的pod,如果需要重启所有受影响的pod,可以设置
reloader.stakater.com/restart:
为always
。 - Reloader默认不会等待pod重启完成,如果需要等待pod重启完成,可以设置
reloader.stakater.com/postStart:
为true
。
4. 总结
Reloader是一个非常有用的工具,它可以帮助我们轻松地实现Kubernetes中的热部署,从而提高应用程序的可用性和可靠性。