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

 

posted @   不会跳舞的胖子  阅读(1452)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示