(K8s學習筆記七)Pod的升級和回滾


1.Deployment的升級

示例:滾動升級busybox-deployment容器

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox: 1.7

# 查看busybox容器副本數量
kubectl get pods 

# 使用以下命令更新busybox到1.9版
kubectl set image deployment/busybox-deployment busybox=busybox:1.9
或者kubectl edit編輯bosybox的deployment文件將image 1.7改為1.9,修改后會自
動出發Pod滾動升級

# 查看更新過程
kubectl rollout status deployment/busybox-deployment

Deployment的更新策略包括:

1)Recreate:設置spec.strategy.type=Recreate,表示在更新Pod時會先殺掉所有正好運行的Pod,然后創建新的Pod

2)RollingUpdate:設置spec.strategy.type=RollingUpdate,表示Pod會以滾動升級的方式逐個更新,此為默認值,其中

spec.strategy.rollingUpdate.maxUnavilable指定更新過程中不可用狀態的Pod的數量上限,如設置為30%,則更新過程中確保運行的Pod總數至少占Pod期望副本總數的70%。

spec.strategy.rollingUpdate.maxSurge:用於指定更新過程中Pod總數超過Pod期望副本數部分的最大值,如設為30%,則新的ReplicaSet可以在滾動更新開始時立即進行副本擴容,只需保證新舊ReplicaSet的Pod副本數之和不超過期望副本數的130%即可,一旦舊的Pod被殺掉,新的ReplicaSet就會進一步擴容。

 2.Deployment的回滾

 

# 使用kubectl rollout history命令查看deployment部署記錄
kubectl rollout history deployment/nginx-deployment

# 查看特定版本的詳細信息,加上revision=<N>參數
kubectl rollout history deployment/nginx-deployment --revision=3

# 回滾到ngin-deploymment上一個部署版本
kubectl rollout undo deployment/nginx-deployment

# 使用--to-revision回滾到指定部署版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

 

 

 

 

 3.暫停和恢復Deployment的部署操作

對於一次復雜的Deployment配置修改,為了避免頻繁觸發Deployment的更新操作,可先暫停Deployment的更新操作,待修改完成后再恢復

# 通過kubectl rollout pause命令暫定deployment更新操作
kubectl rollout pause deployment/nginx-deployment

# 做更新image版本和容器資源操作
kubectl set image deployment/nginx-deployment nginx=nginx:1.10.1
kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=768Mi

# 恢復Deployment的部署操作
kubectl rollout resume deployment/nginx-deployment

 

 4.RC的滾動升級

使用kubectl rolling-update命令進行RC的滾動升級,升級時系統要求新的RC與舊的RC必須在相同的namespace里

# 使用nginx-rc-rollout-v1.17.yaml升級到1.17版,舊版本時1.15版
apiVersion: v1 
kind: ReplicatonController
metadata:
  name: nginx-rc-v1.17   # RC的name不能與舊版本相同
  labels:
    name: nginx-rc
    version: v1.17
spec:
  replicas: 1
  selector:                # selector中至少有一個version與舊版中的不同
    name: nginx-rc
    version: v1.17         
  template:
    metadata:
      labels:
        name: nginx-rc
        version: v1.17
    spec:
      containers:
      - name: nginx
        image: nginx:1.17
        ports:
        - containerPort: 80

# 執行命令滾動升級nginx-rc
kubectl rolling-update nginx-rc -f nginx-rc-rollout-v1.17.yaml
或者
# 直接使用命令更新
kubectl rolling-update nginx-rc --image=nginx:1.17
注:使用命令升級后新RC仍使用舊RC的name

# 如果在更新過程中發現配置有誤,則可中斷更新,執行以下命令回滾
kubectl rolling-update nginx-rc --image=nginx:1.17 --rollback 

 

RC的滾動升級不具有Deployment在應用版本升級過程中的歷史記錄、新舊版本數量的精細控制等功能。

5.DaemonSet的更新策略

DaemonSet包含兩種升級策略:

1)OnDelete:默認的升級策略,使用此策略,在創建好新的DaemonSet配置之后,新的Pod並不會被自動創建,直到用戶手動刪除舊Pod才會出發新建操作

2)RollingUpdate:使用此策略更新時,舊版的Pod將被自動殺掉,然后自動創建新版的Pod,整改過程與普通Deployment的滾動升級一樣可控,但回滾時不能通過kubectl rollback命令完成,必須通過再次提交舊版本配置的方式實現

 

要啟用DaemonSet的滾動更新特性,必須將其spec.updateStrategy.type設置為RollingUpdate。
還可以設置spec.updateStrategy.rollingUpdate.maxUnavailable(默認值為1)和spec.minReadySeconds(默認值為0)

 

 

 

6.StatefulSet的更新策略

更新策略向Deployment和DaemonSet的策略看齊,也可使用RollingUpdate、Paritioned和OnDelete策略。

 


免責聲明!

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



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