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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM