在Kubernetes中,Deployment提供了一种暂停和恢复Rollout的机制。当需要对应用程序进行升级或回滚操作时,可以使用该机制来控制Rollout过程的暂停和恢复。
- 暂停Rollout
执行以下命令可以暂停当前正在进行的Rollout:
kubectl rollout pause deployment/nginx-deployment # 暂停nginx-deployment的rolling update
此时,新旧Pod副本都不会继续替换。如果想查看Deployment的状态,可以使用 kubectl rollout status
命令。
- 恢复Rollout
执行以下命令可以恢复之前被暂停的Rollout:
kubectl rollout resume deployment/nginx-deployment # 恢复nginx-deployment的rolling update
此时,Kubernetes会自动将新Pod副本逐步替换为旧版本,并保证整个过程中不会有宕机时间(零停机)。
除了上述方法外,还可以通过修改Deployment的 .spec.paused
字段来实现暂停/恢复Rollout。例如:
- 将Deployment暂停:
kubectl patch deployment nginx-deployment -p '{"spec":{"paused":true}}'
- 将Deployment恢复:
kubectl patch deployment nginx-deployment -p '{"spec":{"paused":false}}'
以上两种方法等价于调用 kubectl rollout pause/resume
命令。