5.4 执行回滚操作
回滚命令
kubectl rollout
查看历史记录
kubectl rollout history deployment hello-deploy
[root@master k8s]# kubectl rollout history deployment hello-deploy deployment.apps/hello-deploy REVISION CHANGE-CAUSE 1 <none> 2 kubectl apply --filename=deploy.yml --record=true
1 为tag为latest的镜像的deployment。版本2为刚刚滚动升级之后的版本。kubectl apply -f deploy.yml --record由于刚刚升级时使用了--record参数的缘故,执行更新操作的命令会被记录下来。
查看ReplicaSet
kubectl get rs
可以查看到已经创建了新的ReplicaSet,并且之前的不会被删除。
[root@master k8s]# kubectl get rs NAME DESIRED CURRENT READY AGE hello-deploy-69c89b6f98 10 10 10 28m hello-deploy-8d494c7f6 0 0 0 3h26m
回滚之前历史版本
示例:
kubectl rollout undo deployment hello-deploy --to-revision=1
[root@master k8s]# kubectl rollout undo deployment hello-deploy --to-revision=1 deployment.apps/hello-deploy rolled back [root@master k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE hello-deploy-69c89b6f98-2rgx2 1/1 Running 0 31m hello-deploy-69c89b6f98-7rwxp 1/1 Running 0 38m hello-deploy-69c89b6f98-8mp6l 1/1 Running 0 30m hello-deploy-69c89b6f98-9qs4z 1/1 Running 0 34m hello-deploy-69c89b6f98-dxzvx 1/1 Running 0 32m hello-deploy-69c89b6f98-f2sxw 1/1 Running 0 29m hello-deploy-69c89b6f98-mr7cs 1/1 Running 0 28m hello-deploy-69c89b6f98-n9sht 1/1 Running 0 33m hello-deploy-69c89b6f98-swptb 1/1 Terminating 0 29m hello-deploy-69c89b6f98-thzw5 1/1 Running 0 38m hello-deploy-8d494c7f6-mpj82 0/1 ContainerCreating 0 7s hello-deploy-8d494c7f6-tdq4w 0/1 ContainerCreating 0 8s [root@master k8s]# kubectl get deploy hello-deploy NAME READY UP-TO-DATE AVAILABLE AGE hello-deploy 11/10 2 9 3h37m [root@master k8s]# kubectl get deploy hello-deploy NAME READY UP-TO-DATE AVAILABLE AGE hello-deploy 9/10 6 9 3h39m [root@master k8s]# kubectl get deploy hello-deploy NAME READY UP-TO-DATE AVAILABLE AGE hello-deploy 9/10 6 9 3h39m
通过上面操作可以看到正在回滚更新
访问浏览器可以看到已经发生变化
※ 最后要注意,刚刚执行的回滚操作时一个命令式的指令。也就是说集群的当前状态和YAML文件是不符的。在实际操作中,执行这样的回滚操作之后,应当手动更新YAML文件,以便正确反映回滚操作带来的变化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端