k8s deployment 金絲雀發布 更新的 暫停 恢復 回滾


假設現在有業務需求,計划將所有的nginx 從鏡像版本1.14更新到1.15,這一次發布不緊需要平滑發布,還需要
金絲雀發布,及確認其中一個Pod沒有問題后在進行剩余的更新。

暫停與恢復也可以使用yml文件來實現,但是相對比較復雜,這里用比較簡單的命令進行說明

暫停與恢復的命令如下所示:

kubectl rollout pause deploy {Deployment 名稱}
kubectl rollout resume deploy {Deployment 名稱}

第一步, 新建一個deployment實例

[root@master01]# kubectl apply -f deployment-nginx.yaml --record
deployment.apps/mynginxdeployment created
[root@master01]# cat deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginxdeployment
spec:
  selector:
    matchLabels:
      apps: nginx
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
  template:
    metadata:
     labels:
       apps: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14
        imagePullPolicy: Always
        ports:
        - name: mynginxports
          containerPort: 80
[root@master01]#

第二步, 把新建的deployment 鏡像設置為 nginx:1.16

連續執行以下命令

kubectl set image deployment mynginxdeployment nginx=nginx:1.16 --record
kubectl rollout pause deployment mynginxdeployment

第三部,驗證更新后的pod是否正常

如果正常,那么就繼續更新剩余的pod

kubectl rollout resume deployment mynginxdeployment

Deployment控制器的回滾

例如,發現新版本的Pod有嚴重的問題,需要回滾到之前的版本

1) 使用以下命令查看歷史變更記錄
kubectl rollout history deployment mynginxdeployment

提示 發布deployment的時候一定要加上--record
保留歷史記錄的本質是保留每次修改所創建的ReplicaSet 控制器,而回滾的本質其實是
切換到對應版本的ReplicaSet控制器
Deployment控制器是通過ReplicaSet控制器來管理Pod的

  1. 架設我們根據deployment的歷史記錄,回滾到某個版本號
    例如退回到版本8:
kubectl rollout undo deployment mynginxdeployment --to-verision=8


免責聲明!

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



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