kubernetes實踐之四十:Pod的升級與回滾
一:Deployment的升級
舉例:
1.透過kubectl set image命令為Deployment設定新的映象名稱
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
2.使用kubectl edit命令修改Deployment的配置 將spec.template.spec.containers[0].images 從nginx:1.7.9 更改為1.9.1; 儲存退出後,kubernetes會自動升級映象。
3.透過kubectl rollout status 可以檢視deployment的更新過程
在Deployment的定義中,可以透過spec.strategy指定Pod更新的策略:
1.Recreate(重建): 設定spec.strategy.type=Recreate,表示Deployment在更新Pod時,會先殺掉所有正在執行的Pod,然後建立新的Pod.
2.RollingUpdate(滾動更新):以滾動更新的方式來逐個更新Pod,可以透過設定spec.strategy.rollingUpdate下的兩個引數(maxUnavailable和maxSurge)來控制滾動更新的過程。
通常來說,不鼓勵更新Deployment的標籤選擇器,因為這樣會導致Deployment選擇的Pod列表發生變化,也可能與其它控制器產生衝突。
二:Deployment的回滾
所有Deployment的釋出歷史記錄都保留在系統中,如果要進行回滾:
1. 用kubectl rollout history命令檢查這個Deployment部署的歷史記錄
2.用kubectl rollout undo deployment/nginx-deployment 撤銷本次釋出回滾到上一個部署版本
3.用kubectl rollout undo deployment/nginx-deployment --to-revision=2 回滾到指定版本
三:暫停和恢復Deployment的部署操作,以完成複雜的修改
對應一次複雜的Deployment配置修改,為了避免頻繁觸發Deployment的更新操作,可以暫停Deployment的更新操作,然後進行配置修改,再回復Deployment.一次性觸發完整的更新操作。
使用命令:kubectl rollout pause deployment/nginx-deployment
四:使用kubectl rolling-update命令完成RC的滾動升級
對應RC的滾動升級,Kubernetes還提供了一個kubectl rolling-update 命令進行實現。該命令建立一個新的RC,然後自動控制舊的RC中的副本數量逐漸減少到0,同時新的RC中的Pod副本的數量從0逐步增加到目標值,來完成Pod的升級。 需要注意的是新舊RC要再同一個名稱空間內。
五:其它管理物件的更新策略
1.DaemonSet的更新策略
a.OnDelete: 預設配置。只有舊的Pod被使用者手動刪除後,才觸發新建操作。
b.RollingUpdate: 就版本的Pod將被自動殺掉,然後自動建立新版本的DaemonSet Pod.
2.StatefulSet的更新策略
StatefulSet的更新策略正逐漸向Deployment和DaemonSet的更新策略看齊。
舉例:
點選(此處)摺疊或開啟
-
apiVersion: apps/v1beta1
-
kind: Deployment
-
metadata:
-
name: nginx-deployment
-
spec:
-
replicas: 3
-
template:
-
metadata:
-
labels:
-
app: nginx
-
spec:
-
containers:
-
- name: nginx
-
images: nginx:1.7.9
-
ports:
- - containerPort: 80
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
2.使用kubectl edit命令修改Deployment的配置 將spec.template.spec.containers[0].images 從nginx:1.7.9 更改為1.9.1; 儲存退出後,kubernetes會自動升級映象。
3.透過kubectl rollout status 可以檢視deployment的更新過程
在Deployment的定義中,可以透過spec.strategy指定Pod更新的策略:
1.Recreate(重建): 設定spec.strategy.type=Recreate,表示Deployment在更新Pod時,會先殺掉所有正在執行的Pod,然後建立新的Pod.
2.RollingUpdate(滾動更新):以滾動更新的方式來逐個更新Pod,可以透過設定spec.strategy.rollingUpdate下的兩個引數(maxUnavailable和maxSurge)來控制滾動更新的過程。
通常來說,不鼓勵更新Deployment的標籤選擇器,因為這樣會導致Deployment選擇的Pod列表發生變化,也可能與其它控制器產生衝突。
二:Deployment的回滾
所有Deployment的釋出歷史記錄都保留在系統中,如果要進行回滾:
1. 用kubectl rollout history命令檢查這個Deployment部署的歷史記錄
2.用kubectl rollout undo deployment/nginx-deployment 撤銷本次釋出回滾到上一個部署版本
3.用kubectl rollout undo deployment/nginx-deployment --to-revision=2 回滾到指定版本
三:暫停和恢復Deployment的部署操作,以完成複雜的修改
對應一次複雜的Deployment配置修改,為了避免頻繁觸發Deployment的更新操作,可以暫停Deployment的更新操作,然後進行配置修改,再回復Deployment.一次性觸發完整的更新操作。
使用命令:kubectl rollout pause deployment/nginx-deployment
四:使用kubectl rolling-update命令完成RC的滾動升級
對應RC的滾動升級,Kubernetes還提供了一個kubectl rolling-update 命令進行實現。該命令建立一個新的RC,然後自動控制舊的RC中的副本數量逐漸減少到0,同時新的RC中的Pod副本的數量從0逐步增加到目標值,來完成Pod的升級。 需要注意的是新舊RC要再同一個名稱空間內。
五:其它管理物件的更新策略
1.DaemonSet的更新策略
a.OnDelete: 預設配置。只有舊的Pod被使用者手動刪除後,才觸發新建操作。
b.RollingUpdate: 就版本的Pod將被自動殺掉,然後自動建立新版本的DaemonSet Pod.
2.StatefulSet的更新策略
StatefulSet的更新策略正逐漸向Deployment和DaemonSet的更新策略看齊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154452/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes:Pod 升級、回滾
- 入門Kubernetes - 滾動升級/回滾
- kubernetes實踐之四十一:Pod自動擴容與縮容
- 淺入Kubernetes(12):Deployment 的升級、回滾
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之四十八:Service Controller與Endpoint ControllerController
- Kubernetes:更新與回滾
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之四十四:Ingress詳解
- kubernetes實踐之四十三: Service詳解
- kubernetes實踐之四十五:API Server原理分析APIServer
- 1分鐘搞定 Nginx 版本的平滑升級與回滾Nginx
- Kubernetes 叢集無損升級實踐
- kubernetes實踐之二十二:Pod
- SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上釋出(可回滾)SpringGCCloud
- 資料庫升級之-Dataguard滾動升級資料庫
- kubernetes實踐之四十六:分散式負載測試Locust分散式負載
- kubernetes實踐之三十八:Pod排程
- kubernetes實踐之三十九:Pod初始化容器之Init ContainerAI
- Kubernetes 叢集升級指南:從理論到實踐
- kubernetes實踐之三十七:Pod健康檢查
- 愉快地pod repo update之cocoapod升級遇到的坑
- Kubernetes之Pod排程
- kubernetes之pod中斷
- kubernetes實踐之十四:Service Account與Secret
- 實踐資料回滾解決方案
- kubernetes實踐之三十五:Pod配置管理ConfigMap
- JuiceFS CSI:Mount Pod 的平滑升級及其實現原理UI
- Kubernetes之Pod工作負載負載
- kubernetes實踐之七十二:Istio之策略與遙測
- Kubernetes 實戰——升級應用(Deployment)
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- 三級 NestedScroll 巢狀滾動實踐巢狀
- Kubernetes原始碼分析之Pod的刪除原始碼
- [譯] Elasticsearch 滾動升級Elasticsearch
- 揭秘:如何為 Kubernetes 實現原地升級