在指定的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