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 @ 2021-12-05 21:43  不会跳舞的胖子  阅读(1399)  评论(0编辑  收藏  举报