Kubernetes Deployment 更新暂停与恢复机制
基本概念
Deployment 的暂停(pause)与恢复(resume)功能允许临时中断滚动更新过程。
核心使用场景
- 分批更新:先更新部分Pod验证后再继续
- 多配置变更:避免多次触发更新
- 紧急中断:发现问题时暂停更新过程
- 金丝雀发布:控制新版本发布节奏
暂停更新操作
命令格式
kubectl rollout pause deployment/<deployment-name>
实际效果
- 停止自动更新过程
- 新创建的ReplicaSet将不会自动扩展
- 旧ReplicaSet将不会自动缩减
- 允许手动进行中间状态调整
恢复更新操作
命令格式
kubectl rollout resume deployment/<deployment-name>
实际效果
- 继续被中断的滚动更新过程
- 新ReplicaSet开始按策略扩展
- 旧ReplicaSet开始按策略缩减
工作流程示例
-
初始暂停:
kubectl rollout pause deployment/nginx
-
进行多项变更:
kubectl set image deployment/nginx nginx=nginx:1.19 kubectl set resources deployment/nginx -c nginx --limits=cpu=200m,memory=512Mi
-
验证中间状态:
kubectl get pods -w kubectl rollout status deployment/nginx
-
最终恢复:
kubectl rollout resume deployment/nginx
状态检查命令
-
查看暂停状态:
kubectl rollout status deployment/<deployment-name>
-
查看Deployment详情:
kubectl describe deployment/<deployment-name> # 在Conditions部分会显示Progressing=False,Paused=True
[!NOTE]
备注:
- 暂停时间限制:长时间暂停可能导致控制器无法执行其他管理操作
- 资源保留:暂停期间新旧ReplicaSet都会保留相关资源
- 与HPA的交互:暂停期间HPA自动扩缩容也会被暂停
- 版本一致性:确保最终恢复前的多配置变更相互兼容
- 状态持久性:Deployment的暂停状态不会因API服务器重启而丢失
评论需开启科学上网!