Deployment Rollback
回滚deployment到上一个版本,保存回滚后的镜像名称到指定文件夹中。

Deployment 回滚操作详解
回滚操作是 Deployment 的一个关键功能,它允许你将应用程序快速恢复到之前的稳定版本,以应对更新失败或引入问题的情况。 下面详细讲解 Deployment 回滚的各个方面。
1. 回滚的触发原因
- 更新失败: 新的 Deployment 更新(例如,更改镜像版本、配置更改)导致 Pod 无法正常启动或运行。
- 引入 Bug: 新的更新引入了应用程序的 Bug 或不兼容问题。
- 人为错误: 操作员在更新过程中犯错,导致了错误配置。
- 性能下降: 更新后,应用程序的性能显著下降。
2. 关键命令
-
kubectl rollout history deployment/<deployment_name>: 查看 Deployment 的历史记录。 这显示了 Deployment 的所有 Revision,包括版本号、镜像版本、时间戳以及其他配置信息。 这对于确定要回滚到的版本至关重要。 -
kubectl rollout undo deployment/<deployment_name>: 回滚到上一个版本 (即之前的 Revision)。 这是最直接的回滚方式。 -
kubectl rollout undo deployment/<deployment_name> --to-revision=<revision_number>: 回滚到指定的 Revision 版本。 这使你可以精确地选择要回滚到的版本。 需要通过kubectl rollout history找到正确的 Revision 编号。 -
kubectl set image deployment/<deployment_name> <container_name>=<image_name> --record: 更新 Deployment 的镜像并记录这次更新。--record标志会将这次更新记录到 Deployment 的历史记录中,方便追踪更改原因。
3. 示例场景和操作
假设你有一个名为 my-app-deployment 的 Deployment,并且你希望更新它的镜像。
场景 1: 简单回滚到上一个版本
-
查看 Deployment 的历史记录:
kubectl rollout history deployment/my-app-deployment示例输出:
deployment.apps/my-app-deployment with revision 1 deployment.apps/my-app-deployment with revision 2 deployment.apps/my-app-deployment with revision 3假设
revision 3是最新的,但导致了问题。 -
回滚到上一个版本 (revision 2):
kubectl rollout undo deployment/my-app-deployment(这会默认回滚到上一个版本)
-
验证回滚:
kubectl rollout status deployment/my-app-deployment kubectl get pods检查 Pod 是否已正确回滚,并且 Pod 状态是否正常。
场景 2: 回滚到特定版本
-
查看 Deployment 的历史记录 (与上面相同):
kubectl rollout history deployment/my-app-deployment(得到
revision 1, 2, 3这样的列表) -
回滚到 Revision 1:
kubectl rollout undo deployment/my-app-deployment --to-revision=1 -
验证回滚 (与上面相同):
kubectl rollout status deployment/my-app-deployment kubectl get pods
场景 3: 使用 --record 记录镜像更新
-
更新 Deployment 的镜像,并记录更新原因:
kubectl set image deployment/my-app-deployment my-app-container=nginx:1.23.4 --recordmy-app-container: 你的 Pod 容器的名称。nginx:1.23.4: 要更新的镜像版本。--record: 记录这次更新到历史记录中。
-
查看历史记录:
kubectl rollout history deployment/my-app-deployment你将看到更新的注释,显示了更新的原因,例如:
REVISION CHANGE-CAUSE 1 <none> 2 kubectl set image deployment/my-app-deployment my-app-container=nginx:1.23.4 3 <previous update cause>
4. 重要的注意事项
-
滚动更新: Deployment 使用滚动更新策略,这意味着在回滚过程中,旧的 Pod 会逐渐被新的 Pod 替换,保证应用程序的可用性。 这防止了服务中断。
-
Pod 的生命周期: 回滚过程中,旧 Pod 会被终止,新 Pod 会被创建。 Pod 状态会经历 Pending, Running, Terminating 等阶段。 你可以使用
kubectl get pods命令查看 Pod 的状态。 -
监控和日志: 在回滚之后,密切监控应用程序的日志和性能。 确保应用程序正常运行。
-
选择合适的版本: 在进行回滚操作之前,要仔细考虑要回滚到的版本。 查看历史记录并根据实际情况进行选择。
-
测试环境: 强烈建议在测试或预生产环境中测试回滚操作,以确保其正常工作并了解其影响。
-
回滚的限制: 回滚只能回滚 Deployment 的配置,而不能回滚任何数据。 如果更新涉及数据库 schema 或数据的更改,回滚可能不会解决所有问题。
-
了解 Change-Cause:
CHANGE-CAUSE在历史记录中的重要性,能够追溯变更。 尽量记录kubectl set image的时候使用--record参数。
5. 小结
Deployment 回滚是 Kubernetes 中非常重要的一个特性。 通过理解关键命令、掌握操作流程,并结合监控和日志,你可以安全有效地将应用程序恢复到之前的版本,确保应用程序的稳定性和可用性。

浙公网安备 33010602011771号