1、概述
使用者希望應用程式始終可用,而開發人員則需要每天多次部署它們的新版本。在 Kubernetes 中,這些是通過滾動更新(Rolling Updates)完成的。 滾動更新 允許通過使用新的執行個體逐漸更新 Pod 執行個體,零停機進行 Deployment 更新。新的 Pod 将在具有可用資源的節點上進行排程。
2、前提
在上一篇文章中我們,執行個體操作了在kubernetes1.25中部署nginx1.14并釋出
本篇文章,我們接上篇,部署nginx1.14并且兩個副本,效果:
3、應用更新
我們的生産項目,每次發版都希望不停機切不影響正常使用,咱們看看kubernetes怎麼實作的。
本次執行個體為nginx1.14 更新為nginx1.23.0
指令:
# 執行更新
kubectl set image deploy mynginx nginx=nginx:1.23.0
# 檢視更新狀态
kubectl rollout status deploy mynginx
注意: 咱們看上面實際操作過程更新前是2個pod,這個是正常的因為兩個副本嘛,更新中變成3個pod了,這是為啥呢?kubernetes更新應用為了不影響目前正常使用,會在更新中建立一個pod,等到更新的pod完全運作起來後,才會删除舊pod,這樣做的好處就是一旦更新失敗,也不影響正常使用,更新中,使用者無感覺。
4、應用復原
我們在實際生産項目更新後,發現有bug,想復原到上一個版本 這個是比較常見的場景,我們看看kubernetes怎麼操作。
涉及指令:
# 檢視 更新曆史記錄
kubectl rollout history deploy mynginx
# 撤銷上一次更新
kubectl rollout undo deploy mynginx
# 按照版本復原到某一個版本 版本号可以通過 kubectl rollout history deploy mynginx檢視
kubectl rollout undo deploy mynginx --to-revision=版本号
# 檢視復原狀态
kubectl rollout undo status deploy mynginx
執行復原上一個版本執行個體:
執行復原某一個版本執行個體: