deployment控制pod進行滾動更新以及回滾


更新pod鏡像兩種方式:

方式一:kubectl set image deployment/${deployment name} ${container name}=${image}  例: kubectl set image deployment/nginx-deployment nginx=nginx:1.13 --record
方式二: kubectl edit 修改deployment配置, 將spec.template.spec,containers[0].image 從nginx:1.12 修改成nginx:1.13

查看deployment更新過程:

kubectl rollout status deployment/nginx-deployment   
可以通過deployment狀態來判斷pod更新是否完成, kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting1  如果更新成功, 返回值為0 

deployment更新策略: Recreate(重建)殺掉所有的pod, 然后創建新的pod 和 RollingUpdate(滾動更新) 通過參數maxUnavailable與maxSurge來控制滾動更新過程
滾動更新策略:

deployment.spec.strategy.rollingUpdate.maxUnavailable:不可用狀態的pod數量,該值可以是絕對值, 也可以是pod期望的副本數的百分比
deployment.spec.strategy.rollingUpdate.maxSurge: 超過pod期望副本數的最大值
當maxSurge設置為30% 和 maxUnavailable設置為30%  :  生成一個新的ReplicaSet立即進行副本數擴容, 擴容的數量為不超過期望副本數的130%即可, 舊的ReplicaSet立即縮容到所需副本數的70%

pod回滾: 建議deployment滾動更新的時候加上--record參數, 這樣在change-cause看個每個版本使用的命令

kubectl rollout history deployment/nginx-deployment 檢查deployment升級的歷史記錄
kubectl rollout history deployment/nginx-deployment --revision=2 查看單個revision 的詳細信息
kubectl rollout undo deployment/nginx-deployment 回退到上一個版本 
kubectl rollout undo deployment/nginx-deployment --to-revision=2 根據--revision參數指定某個歷史版本

spec.revisonHistoryLimit項來指定 deployment 最多保留多少 revision 歷史記錄

注意: deployment的pod模板被更改時才會創建新的修訂版本,例如更新模板標簽或者容器鏡像可以觸發滾動更新, 其它操作例如擴展副本數將不會觸發deployment的更新操作

暫停和恢復deployment: 對於一次復雜的deployment更新操作,為了避免頻繁觸發deployment的更新操作,可以先暫停deployment的更新操作, 然后進行配置修改,在恢復deployment,一次性觸發完整的更新操作

kubectl rollout pause deployment/nginx-deployment #暫停deployment , 不影響pod正常運行, 可以修改的deployment資源, 不會觸發滾動更新 
kubectl set image deploy/nginx nginx=nginx:1.9.1 
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi 
kubectl rollout resume deployment/nginx-deployment #恢復deployment, 如果有變動, 馬上進行滾動更新
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 10
  strategy:
    rollingUpdate:
      maxSurge: 30%
      maxUnavailable: 30%      
  template:
    metadata:
      labels:
        app: nginx

    spec:
      initContainers: 
      - name: install
        image: busybox
        imagePullPolicy: IfNotPresent
        command:
        - wget
        - "-O"
        - "/work-dir/index.html"
        - http://kubernetes.io
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
      containers:
      - name: nginx
        image: nginx:1.12
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: workdir
          mountPath: "/usr/share/nginx/html"
      volumes:
      - name: workdir
        emptyDir: {} 

---
apiVersion: v1 
kind: Service
metadata:
  name: nginx-service
  namespace: default 
  labels:
    app: nginx
spec:
  type: NodePort
  selector: 
    app: nginx
  ports:
  - name: http
    port: 80 
    protocol: TCP 
    targetPort: 80 


免責聲明!

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



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