kubernetes實踐之四十:Pod的升級與回滾

百聯達發表於2018-05-14
一:Deployment的升級
舉例:

點選(此處)摺疊或開啟

  1. apiVersion: apps/v1beta1
  2. kind: Deployment
  3. metadata:
  4.   name: nginx-deployment
  5. spec:
  6.   replicas: 3
  7.   template:
  8.     metadata:
  9.       labels:
  10.         app: nginx
  11.     spec:
  12.       containers:
  13.       - name: nginx
  14.         images: nginx:1.7.9
  15.         ports:
  16.         - containerPort: 80
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的更新策略看齊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154452/,如需轉載,請註明出處,否則將追究法律責任。

相關文章