kubectl rollout滚动更新

用户希望应用程序始终可用,而开发人员则需要每天多次部署它们的新版本。 在 Kubernetes 中,这些是通过滚动更新(Rolling Updates)完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例,实现零停机的 Deployment 更新。 新的 Pod 将被调度到具有可用资源的节点上。
kubectl rollout命令解析
| 子命令 | 功能描述 | 示例 |
|---|---|---|
| history | 查看资源的版本历史 | kubectl rollout history deployment/nginx-deployment |
| pause | 暂停部署 | kubectl rollout pause deployment/nginx-deployment |
| restart | 重新启动部署 | kubectl rollout restart deployment/nginx-deployment |
| resume | 恢复已暂停的部署 | kubectl rollout resume deployment/nginx-deployment |
| status | 查看部署的当前状态 | kubectl rollout status deployment/nginx-deployment |
| undo | 回滚到之前的版本 | kubectl rollout undo deployment/nginx-deployment |
补充说明:
history:- 查看特定版本的详细信息:
kubectl rollout history deployment/nginx-deployment --revision=2
- 查看特定版本的详细信息:
pause和resume:- 这两个命令通常成对使用,用于控制部署过程
restart:- 用于触发 Deployment 中所有 Pod 的重新创建
status:- 可以添加
--watch标志来持续监控状态:kubectl rollout status deployment/nginx-deployment --watch
- 可以添加
undo:- 回滚到特定版本:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
- 回滚到特定版本:
步骤(官方)
- 检查当前状态:
1 | |
- 更新应用程序版本:
1 | |
- 验证更新:
1 | |
- 回滚更新(如果需要):
1 | |
- 清理:
1 | |
重启回滚(优雅)
- 使用 kubectl rollout restart
这是最直接的方法:
1 | |
这个命令会触发一个滚动重启过程:
逐个替换旧的 Pod
确保新 Pod 运行正常后才终止旧 Pod
继续此过程直到所有 Pod 都被更新
监控重启进度
使用以下命令监控重启进度:
1 | |
- 自定义重启策略
通过修改 Deployment 的更新策略来自定义重启行为:
1 | |
maxUnavailable: 更新过程中允许不可用的 Pod 的最大数量maxSurge: 更新过程中允许创建的超出期望 Pod 数量的 Pod 数
- 使用环境变量触发重启
如果想在不更改镜像的情况下触发重启,可以更新一个环境变量:
1 | |
- 使用注释触发重启
另一种方法是更新 Deployment 的注释:
1 | |
- 分批重启(高级技巧)
对于大型部署进行分批重启:
1 | |
这会逐个删除 Pod,触发 Kubernetes 创建新的 Pod 来替换。
注意事项:
- 确保你的应用程序能够优雅地处理重启
- 在生产环境中进行重启之前,先在测试环境中验证
- 考虑使用就绪探针(Readiness Probe)来确保新 Pod 在接收流量前已准备就绪
- 监控应用程序性能,确保重启过程不会对用户体验产生负面影响
- 使用
maxUnavailable来控制滚动重启的并发性,避免一次删除太多 Pod,导致应用不可用
kubectl rollout滚动更新
http://example.com/2024/09/25/kubectl-rollout滚动更新/