K8S-实战案例之基于set image及rollout实现镜像版本升级与回滚
在指定的deployment中通过kubectl set image指定新版本的 镜像:tag 来实现更新代码的目的。
构建四个不同版本的nginx镜像,第一次使用v1版本,后组逐渐升级到v2—v4,测试镜像版本升级与回滚操作
镜像制作
]# echo nginx-v4 > index.html ]# tar -zcvf app1.tar.gz index.html ]# tar -tf app1.tar.gz //查看tar包内容 ]# cp app1.tar.gz ../nginx/app1.tar.gz ]# docker build -t nginx-web1:v4 .
...
修改yaml文件中镜像版本升级
spec: containers: - name: magedu-nginx-container image: nginx-web1:v6 imagePullPolicy: IfNotPresent
部署业务
]# kubectl apply -f nginx.yaml --record=true //记录执行的kubectl
查看deploy历史版本信息
]# kubectl rollout history deployment -n linux40 magedu-nginx-deployment deployment.apps/magedu-nginx-deployment REVISION CHANGE-CAUSE 1 <none> 2 kubectl apply --filename=nginx.yaml --record=true 3 kubectl apply --filename=nginx.yaml --record=true 4 kubectl apply --filename=nginx.yaml --record=true
回滚到上一个版本:
]# kubectl rollout undo deployment/magedu-nginx-deployment -n linux40
再次查看deploy历史版本信息,可以看到上一个版本4已经被回滚到了版本3,3被5替代
]# kubectl rollout history deployment -n linux40 magedu-nginx-deployment deployment.apps/magedu-nginx-deployment REVISION CHANGE-CAUSE 1 <none> 2 kubectl apply --filename=nginx.yaml --record=true 4 kubectl apply --filename=nginx.yaml --record=true 5 kubectl apply --filename=nginx.yaml --record=true
测试访问
]# curl http://192.168.64.110:30800/webapp/ nginx-v5
再次回滚到上个版本
]# kubectl rollout undo deployment/magedu-nginx-deployment -n linux40
再次查看deploy历史版本信息,可以看到上一个版本5已经被回滚到了版本4,4被6替代
]# kubectl rollout history deployment -n linux40 magedu-nginx-deployment deployment.apps/magedu-nginx-deployment REVISION CHANGE-CAUSE 1 <none> 2 kubectl apply --filename=nginx.yaml --record=true 5 kubectl apply --filename=nginx.yaml --record=true 6 kubectl apply --filename=nginx.yaml --record=true
测试访问
]# curl http://192.168.64.110:30800/webapp/ nginx-v6
测试结论:不指定版本回滚,只会在两个版本之间回滚。
回滚到指定版本
]# kubectl rollout undo deployment/magedu-nginx-deployment --to-revision=1 -n linux40
测试访问,可以看到已经回滚到了最初版本
]# curl http://192.168.64.110:30800/webapp/ nginx-v1
再次查看deploy历史版本信息,可以看到上一个版本6已经被回滚到了版本1,1被7替代
]# kubectl rollout history deployment -n linux40 magedu-nginx-deployment deployment.apps/magedu-nginx-deployment REVISION CHANGE-CAUSE 2 kubectl apply --filename=nginx.yaml --record=true 5 kubectl apply --filename=nginx.yaml --record=true 6 kubectl apply --filename=nginx.yaml --record=true 7 <none>
生产环境中pod比较多,而且通过修改yaml任务比较繁重且为交互式,一般我们采用set image指定镜像版本进行升级
]# kubectl set image deploy magedu-nginx-deployment -n linux40 magedu-nginx-container=nginx-web1:v6
deployment.apps/magedu-nginx-deployment image updated
测试访问
]# curl http://192.168.64.110:30800/webapp/ nginx-v6
再次查看deploy历史版本信息
]# kubectl rollout history deployment -n linux40 magedu-nginx-deployment deployment.apps/magedu-nginx-deployment REVISION CHANGE-CAUSE 5 kubectl apply --filename=nginx.yaml --record=true 7 <none> 8 kubectl apply --filename=nginx.yaml --record=true 9 kubectl apply --filename=nginx.yaml --record=true
越学越感到自己的无知
分类:
K8S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现