Flexvolume插件分批升級方案

Flexvolume支持在線自動升級,您可以登陸控制檯實現一鍵升級,參考:https://help.aliyun.com/document_detail/100605.html

Flexvolume升級不會影響您的應用,但是建議您可以選擇在業務低峯的時候進行升級。您也可以參考本文給出的給flexvolume執行分配升級方案:

Flexvolume分批升級原理:

Daemonset更新策略支持:OnDelete、RollingUpdate兩中模式,其中:

OnDelete:表示對DaemonSet更新模板後,pod不會馬上升級,而是等待Pod刪除重建的時候升級;

RollingUpdate:表示更新了模板Pod就會馬上執行升級操作;

默認情況下升級策略是RollingUpdate,爲了實現分批升級功能,我們修改升級策略爲OnDelete,然後手動升級一批節點,查看數據卷掛載狀態,然後再一批一批的升級;

Flexvolume分批升級步驟:

記錄升級前的Flexvolume版本:
# kubectl describe ds flexvolume -nkube-system | grep Image

給Flexvolume配置升級策略爲OnDelete;
# kubectl patch ds flexvolume -p '{"spec":{"updateStrategy":{"type":"OnDelete"}}}' -nkube-system

檢查Flexvolume升級策略更新是否成功;下面命令有輸出即認爲成功;
# kubectl get ds flexvolume -nkube-system -oyaml | grep "type: OnDelete"

部署新版本Flexvolume
# kubectl apply -f flexvolume.yaml

檢查Flexvolume DaemonSet鏡像已經更新,到這一步pod還沒有更新;
# kubectl describe ds flexvolume -nkube-system | grep Image
Image:      registry.cn-beijing.aliyuncs.com/acs/flexvolume:v1.14.6.15-8d3b7e7-aliyun

列出所有Flexvolume Pod;
# kubectl get pod -nkube-system -nkube-system -owide | grep flexvolume

分批升級:刪除那個pod,pod重啓後就會使用新鏡像和配置;
# kubectl delete pod ** -nkube-system

檢查所有pod是否已經是最新版本;
# for podname in `kubectl get pod -nkube-system | grep flexvolume | awk '{print $1}'`; do kubectl describe pod $podname -nkube-system | grep Image: ;done

將Flexvolume的更新策略修改爲RollingUpdate;完成升級;
# kubectl patch ds flexvolume -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}' -nkube-system

Flexvolume部署模板:

把下面模板的{{.Region}}字段換成您的集羣region名。

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: flexvolume
  namespace: kube-system
  labels:
    k8s-volume: flexvolume
spec:
  selector:
    matchLabels:
      name: acs-flexvolume
  template:
    metadata:
      labels:
        name: acs-flexvolume
    spec:
      hostPID: true
      hostNetwork: true
      tolerations:
      - operator: "Exists"
      priorityClassName: system-node-critical
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      nodeSelector:
        beta.kubernetes.io/os: linux
      containers:
      - name: acs-flexvolume
        image: registry-vpc.{{.Region}}.aliyuncs.com/acs/flexvolume:v1.14.6.15-8d3b7e7-aliyun
        imagePullPolicy: Always
        securityContext:
          privileged: true
        env:
        - name: ACS_DISK
          value: "true"
        - name: ACS_NAS
          value: "true"
        - name: ACS_OSS
          value: "true"
        - name: ACS_CPFS
          value: "false"
        resources:
          limits:
            cpu: 1000m
            memory: 1000Mi
          requests:
            cpu: 100m
            memory: 100Mi
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - ps -ef |grep /acs/flexvolume | grep monitoring | grep -v grep
          failureThreshold: 8
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        volumeMounts:
        - name: usrdir
          mountPath: /host/usr/
        - name: etcdir
          mountPath: /host/etc/
        - name: logdir
          mountPath: /var/log/alicloud/
      volumes:
      - name: usrdir
        hostPath:
          path: /usr/
      - name: etcdir
        hostPath:
          path: /etc/
      - name: logdir
        hostPath:
          path: /var/log/alicloud/
  updateStrategy:
    type: RollingUpdate
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章