守护进程怎么滚动更新
守护进程集在每个节点上运行一个副本,更新时按节点逐个替换,而不是像普通部署那样在副本之间轮换。可用副本数参数决定同时允许有多少个节点处于更新中,集群规模越大这个参数越关键:它直接决定更新期间有多少节点暂时没有该组件。
基本信息
| 适用平台 | Kubernetes 1.20+ |
|---|---|
| 默认策略 | 滚动更新 |
| 关键参数 | 同时不可用数量,可用数字或百分比 |
| 副本分布 | 受节点数量与选择器决定 |
| 回滚方式 | 与前一个版本之间滚动切换 |
典型使用场景
- 节点级代理日志或监控组件升级
- 网络插件与存储插件的版本更新
- 集群规模大时控制同时更新的节点数量
- 节点加入后自动补齐组件副本
- 排查组件版本不一致:部分节点仍是旧版本
策略配置
策略配置
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # 同时只更新一个节点,或写 10%
maxSurge: 0 # 节点级组件通常就地替换,不做额外增援操作
操作
kubectl set image ds/node-agent agent=agent:2.4.0 -n kube-system # 触发更新
kubectl rollout status ds/node-agent -n kube-system --timeout=10m # 观察进度
kubectl get pods -l name=node-agent -n kube-system -o wide # 各节点版本
kubectl rollout undo ds/node-agent -n kube-system # 需要时回滚参数读法
| 参数 | 含义 | 取值建议 |
|---|---|---|
| 同时不可用数量 | 允许同时有几个节点不带组件 | 集群越大越应保守,先按一个节点起步 |
| 额外增援数量 | 是否允许临时多出副本 | 节点级组件通常设为零 |
| 更新策略 | 滚动或手动触发 | 需要人工窗口时改为手动 |
| 期望与就绪数 | 覆盖节点数与就绪副本 | 数量不符说明部分节点未成功 |
更新过程中,处于更新中的节点上该组件是缺失的。日志、监控与网络插件都存在这个窗口,因此参数取值要结合它们对业务的实际影响来定。
把同时不可用数量设置得过大,会让大量节点在短时间内同时失去代理组件,监控与日志出现盲区,排查窗口恰好在此刻丢失。