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
越学越感到自己的无知