全部產品
Search
文件中心

Container Service for Kubernetes:通過備份中心實現低版本Kubernetes叢集應用遷移

更新時間:Jul 06, 2024

通過備份中心,您可以將Flexvolume叢集中的應用遷移至CSI叢集中,也可以將低版本的Kubernetes叢集應用遷移至新版本叢集中。備份中心解決了跨儲存外掛程式、跨版本叢集間應用遷移的一些問題,例如,需要備份未被應用使用到的Cluster層級資源、API Version自動切換至恢複叢集支援的版本等。本文以1.16版本Flexvolume叢集的應用遷移至1.28版本的CSI叢集為例,介紹如何使用備份中心進行叢集應用遷移。

注意事項

  • 備份組群與恢複叢集需處於同一地區,且備份組群為1.16或以上版本。考慮到apiVersion相容問題,不建議您通過備份中心將高版本叢集中的應用遷移至低版本的叢集中。

  • 備份應用時,正在刪除的資源不會被備份。

  • 如需恢複為容器網路檔案系統管理的NAS類型(即恢複時轉換為儲存類列選擇為alibabacloud-cnfs-nas),您需要先建立StorageClass。具體操作,請參見通過CNFS管理NAS檔案系統(推薦)

  • 恢複應用時,資源將優先按照恢複叢集版本推薦的apiVersion進行恢複。若某資源在兩個版本中無同時支援的apiVersion版本,恢複時您需要手動部署。例如:

    • 1.16版本叢集Deployment支援extensions/v1beta1apps/v1beta1apps/v1beta2以及apps/v1,恢複至1.28叢集時將全部恢複至apps/v1

    • 1.16版本叢集Ingress支援extensions/v1beta1networking.k8s.io/v1beta1,無法將其直接恢複至1.22及以上版本叢集。

    更多叢集版本API變更資訊,請參見ACK版本發布說明Deprecated API Migration Guide

    重要

    在1.16版本叢集中,appsrbac.authorization.k8s.io等groups已支援v1,升級至1.28版本叢集時,您需要手動恢複Ingress、CronJob等資源。

適用情境

  • 跨儲存外掛程式應用部署

    建立1.20及以後版本的ACK叢集已不再支援Flexvolume儲存外掛程式,您可以通過備份中心將Flexvolume叢集中啟動並執行有狀態應用遷移到CSI叢集中。

    說明

    使用Flexvolume和CSI儲存外掛程式的叢集均支援遷移,新的恢複叢集僅支援使用CSI儲存外掛程式。

  • Kubernetes版本跨度較大的叢集切換

    某些情境下,您可能需要將低版本(不低於1.16版本)叢集中的業務遷移至新叢集。例如,網路外掛程式從Flannel切換至Terway等。備份中心可實現版本跨度較大的叢集應用遷移,同時自適應修正Kubernetes版本升級後的應用模板API Version等基本配置。

前提條件

  • 已開通雲備份(Cloud Backup)服務。對NAS、OSS、本地碟類型儲存卷進行備份時,以及在混合雲情境中,備份中心需要使用雲備份進行檔案備份。具體操作,請參見雲備份

  • 已建立恢複叢集,為確保能正常使用ECS快照恢複雲端硬碟資料,建議恢複叢集為v1.18及以上版本。具體操作,請參見建立ACK託管叢集建立ACK專有叢集建立註冊叢集並接入本機資料中心叢集

    重要
    • 恢複叢集必須使用CSI儲存外掛程式,使用Flexvolume儲存外掛程式或通過csi-compatible-controller組件同時使用CSI Flexvolume儲存外掛程式的叢集不支援恢複。

    • 備份中心關注業務應用的備份和恢複。在恢複任務之前,您需要在恢複叢集中預先安裝並配置好所需的系統組件。例如:

      • ACR免密組件:您需要為恢複叢集重新授權並配置acr-configuration。

      • ALB Ingress組件:您需要預先配置ALBConfig等。

  • 已安裝備份服務元件並完成對應許可權的配置。具體操作,請參見安裝migrate-controller備份服務元件並配置許可權

  • 如需使用雲端硬碟快照備份資料卷,需要安裝v1.1.0或以上版本的CSI外掛程式。關於如何安裝CSI外掛程式,請參見安裝與升級CSI組件

  • 已通過kubectl工具串連叢集

遷移流程

備份組群使用的儲存外掛程式類型不同,遷移流程略有不同,具體流程如下所示。

  • 備份組群無儲存應用

  • 備份組群使用Flexvolume儲存外掛程式

  • 備份組群使用CSI儲存外掛程式

遷移步驟

本文以1.16版本的ACK Flexvolume叢集為例,分別以資料換源以及資料不換源方式展示如何將叢集中的應用及配置項等資源,以及將儲存卷資料移轉至1.28版本的ACK CSI叢集。對於無儲存的應用遷移,或者備份組群使用CSI儲存外掛程式的情境,可以簡化其中可選部分的步驟。

重要

使用資料不換源方式時,需要將備份組群的PV的回收策略改為Retain,避免刪除儲存卷時觸發資料清理。

kubectl patch pv/<pv-name> --type='json' -p '[{"op":"replace","path":"/spec/persistentVolumeReclaimPolicy","value":"Retain"}]'

類別

概念

適用情境

資料換源

在備份組群中備份儲存卷中的資料,同步一份新資料給恢複叢集的應用使用,即最終有兩套完全獨立的儲存。資料恢複流程使用動態掛載,可以通過轉換儲存類實現儲存類型的變更,例如,將NAS儲存轉變為雲端硬碟儲存。

  • 備份組群與恢複叢集的應用需要使用獨立的兩套資料。

  • 恢複時需要轉換儲存類。

資料不換源

不換源方式將根據備份的儲存聲明、儲存卷在恢複流程中使用靜態掛載,因此使用的是原資料來源,例如雲端硬碟ID、OSS Bucket等。如果您進行中Flexvolume叢集到CSI叢集的應用遷移,由於YAML不通用,您需要手動建立靜態儲存聲明、儲存卷。

業務在備份恢複期間無法暫停寫入,並且業務有強資料一致性的需求。

環境準備

類別

備份組群

恢複叢集

叢集版本

1.16.9-aliyun.1

1.28.3-aliyun.1

運行時版本

Docker 19.03.5

containerd 1.6.20

儲存群組件版本

Flexvolume:v1.14.8.109-649dc5a-aliyun

CSI:v1.26.5-56d1e30-aliyun

其他

  • 部署測試應用,該應用的apiVersion為extensions/v1beta1。

  • 應用掛載雲端硬碟和NAS。

已安裝csi-plugin和csi-provisioner儲存群組件。更多資訊,請參見管理組件

步驟一:部署測試應用

  1. 執行以下命令,部署雲端硬碟動態儲存裝置卷。

    其中alicloud-disk-topology請替換為您叢集中Flexvolume儲存外掛程式預設安裝的雲端硬碟儲存類名稱。

    cat << EOF | kubectl apply -f -
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: disk-essd
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: alicloud-disk-topology
      resources:
        requests:
          storage: 20Gi
    EOF
  2. 執行以下命令,部署NAS靜態儲存卷。

    其中server需要替換為帳號下NAS檔案系統的掛載點。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
    spec:
      capacity:
        storage: 5Gi
      storageClassName: nas
      accessModes:
        - ReadWriteMany
      flexVolume:
        driver: "alicloud/nas"
        options:
          server: "1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com"
          vers: "3"
          options: "nolock,tcp,noresvport"
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
    EOF
  3. 執行以下命令,部署應用,該應用同時掛載上述雲端硬碟和NAS儲存卷。

    以下代碼中的apiVersion使用了extensions/v1beta1,該apiVersion在1.28叢集已被廢棄。

    cat << EOF | kubectl apply -f -
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
              - name: nas
                mountPath: /cold
              - name: disk
                mountPath: /hot
          volumes:
            - name: nas
              persistentVolumeClaim:
                claimName: pvc-nas
            - name: disk
              persistentVolumeClaim:
                claimName: disk-essd   
    EOF
  4. 執行以下命令,確認部署的應用已正常啟動。

    kubectl get pod -l app=nginx

    預期輸出:

    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-5ffbc895b-xxxxx   1/1     Running   0          2m28s

步驟二:在備份組群中安裝備份中心

  1. 在備份組群安裝備份服務元件。具體操作,請參見安裝migrate-controller備份服務元件

    說明
    • 1.16版本以上的叢集,可以直接在組件中心安裝備份服務元件,且組件為v1.7.6及以上版本。

    • 若您的備份組群為ACK專有版叢集或註冊叢集,或使用的儲存外掛程式非CSI(例如Flexvolume),則需要額外的許可權配置。具體操作,請參見註冊叢集

  2. (可選)若您的叢集為Flexvolume叢集,則執行以下命令,確認已經配置好相關許可權。

    kubectl -n csdr get secret alibaba-addon-secret
  3. (可選)若您的叢集為Flexvolume叢集,則執行以下命令,增加kube-system命名空間下部署migrate-controller的USE_FLEXVOLUME環境變數。

    重要

    在Flexvolume叢集中,migrate-controller備份服務元件安裝完成後,migrate-controller的Pod將異常退出,開啟叢集應用備份頁面將出現404報錯。此時,您需要編輯組件的YAML,增加USE_FLEXVOLUME環境變數。

    kubectl -n kube-system patch deployment migrate-controller --type json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"USE_FLEXVOLUME","value":"true"}}]'
  4. 執行以下命令,確認備份服務元件已經正常運行。

    kubectl -n kube-system get pod -l app=migrate-controller
    kubectl -n csdr get pod 

    預期輸出:

    NAME                                  READY   STATUS    RESTARTS   AGE
    migrate-controller-6c8b9c6cbf-967x7   1/1     Running   0          3m55s
    NAME                               READY   STATUS    RESTARTS   AGE
    csdr-controller-69787f6dc8-f886h   1/1     Running   0          3m39s
    csdr-velero-58494f6bf4-52mv6       1/1     Running   0          3m37s

步驟三:在備份組群中建立備份

  1. 在與備份組群相同的地區建立以cnfs-oss-*格式命名的OSS Bucket,用於存放備份。具體操作,請參見建立儲存空間

    說明

    ACK託管叢集預設擁有cnfs-oss-*開頭的OSS Bucket許可權,若您的Bucket命名格式不符合要求,同樣需要額外的許可權配置。具體操作,請參見通過控制台安裝組件並配置許可權

  2. 建立備份倉庫。具體操作,請參見建立備份倉庫

  3. 執行以下命令,建立立即備份任務。

    關於通過控制台設定備份相關配置項,請參見叢集內備份和恢複應用。本步驟根據樣本情境,提供建議的配置資訊,您可以根據實際情境進行相應調整。

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: '{"name":"<備份倉庫名稱>","region":"<regionID如cn-beijing>","bucket":"<備份倉庫關聯的OSSBucket名稱>","provider":"alibabacloud"}'
      labels:
        csdr/schedule-name: fake-name
      name: <備份名稱>
      namespace: csdr
    spec:
      excludedNamespaces:
      - csdr
      - kube-system
      - kube-public
      - kube-node-lease
      excludedResources:
      - storageclasses
      - clusterroles
      - clusterrolebindings
      - events
      - persistentvolumeclaims
      - persistentvolumes
      includeClusterResources: true
      pvBackup:
        defaultPvBackup: true
      storageLocation: <備份倉庫名稱>
      ttl: 720h0m0s
    EOF

    參數

    說明

    excludedNamespaces

    備份過程中排除的命名空間。建議排除以下命名空間:

    • csdr:備份中心的工作命名空間。備份中心有叢集間的同步邏輯,無需手動備份csdr命名空間下的備份、恢複等任務。否則可能導致非預期行為。

    • kube-systemkube-publickube-node-lease:ACK叢集預設存在的命名空間,因叢集參數、配置等不同,無法在叢集之間簡單恢複。

    excludedResources

    排除資源。可根據業務需求設定。

    includeClusterResources

    是否備份Cluster層級的資源,例如StorageClass、CRD、Webhook等。

    • true:備份所有Cluster層級資源。

    • false:僅備份被選擇的命名空間中的Namespace層級資源引用的Cluster層級資源。例如,備份Pod時,引用的ServiceAccount授權了某ClusterRole,該ClusterRole將被自動備份;備份CR時,CRD將被自動備份。

    說明

    通過Container Service管理主控台建立的備份任務,預設IncludeClusterResources欄位為false

    defaultPvBackup

    是否備份儲存卷資料。

    • true:備份應用以及Running Pod使用的儲存卷資料。

    • false:僅備份應用。

    重要
    • 對於Kubernetes版本及CSI版本均為1.18及以上版本的叢集,預設使用ECS快照備份雲端硬碟資料;對於其他儲存類型的資料,或大於等於1.16且小於1.18版本叢集的雲端硬碟資料,均使用雲備份備份。

    • 對於未被Running Pod使用的儲存卷,僅支援通過資料不換源的方式在新的叢集中手動建立靜態儲存卷、儲存聲明,並指定原儲存源,如雲端硬碟ID、OSS Bucket等。

    • 若業務有資料強一致性需求,請您在備份期間暫停業務的資料寫入。或者您可以選擇資料不換源方式,在備份時僅備份應用。

  4. 執行以下命令,查詢備份任務狀態。

    kubectl -ncsdr describe applicationbackup <備份名稱>

    預期輸出中StatusPhase變為Completed,表明備份任務建立成功。

  5. 執行以下命令,確認此次備份的資源清單Resource List。

    kubectl -ncsdr get pod | grep csdr-velero
    kubectl -ncsdr exec -it <csdr-velero的pod名稱> -- /velero describe backup <備份名稱> --details

    您可以查看列表中未被備份的資源,通過調整備份配置項及時重新備份。

    Resource List:
      apiextensions.k8s.io/v1/CustomResourceDefinition:
        - volumesnapshots.snapshot.storage.k8s.io
      v1/Endpoints:
        - default/kubernetes
      v1/Namespace:
        - default
      v1/PersistentVolume:
        - d-2ze88915lz1il01v1yeq
        - pv-nas
      v1/PersistentVolumeClaim:
        - default/disk-essd
        - default/pvc-nas
      v1/Secret:
        - default/default-token-n7jss
        - default/oss-secret
        - default/osssecret
      v1/Service:
        - default/kubernetes
      v1/ServiceAccount:
        - default/default
      ...

步驟四:在恢複叢集中安裝備份中心

  1. 在恢複叢集中安裝備份中心。具體操作,請參見步驟二:在備份組群中安裝備份中心

  2. 將上述備份倉庫關聯到恢複叢集。

    1. 登入Container Service管理主控台

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 應用備份

    3. 應用備份頁面,單擊立即恢複

    4. 選擇備份使用的備份倉庫,單擊初始化倉庫,並等待備份同步至本叢集。

(可選)步驟五:手動在恢複叢集中建立儲存聲明及儲存卷

多數情境中,您只需要根據以下步驟六直接在恢複叢集中建立恢複任務,由備份中心組件根據備份自動產生儲存聲明及儲存卷。

備份中心執行恢複任務時,為保護已有資料,遇到同名的儲存聲明及儲存卷將跳過恢複,即不重建也不覆蓋儲存卷內的資料。因此,遇到以下情境,您可以在恢複任務之前預先建立儲存聲明及儲存卷,以實現更靈活的恢複。

  • 備份時備份了儲存卷,但部分儲存卷中儲存了日誌等無需遷移的資料,可以預先建立空的儲存卷。

  • 備份時備份了儲存卷,但備份組群中未被Running Pod使用的儲存卷同樣需要遷移至恢複叢集。

  • 備份時未備份儲存卷,且excludedResources裡包含persistentvolumeclaims與persistentvolumes,或涉及Flexvolume叢集至CSI叢集的應用遷移。

具體操作步驟如下:

重要

雲端硬碟不支援跨可用性區域掛載,若您在恢複叢集中切換了可用性區域,可選擇以下任一方式處理。

  1. (可選)若您的備份組群為Flexvolume叢集,由於Flexvolume與CSI的儲存卷、儲存聲明的YAML不同,您可以使用命令列工具批量切換YAML。具體操作,請參見使用Flexvolume2CSI命令列工具批量轉換YAML

  2. 執行以下命令,部署通過Flexvolume2CSI擷取的CSI YAML檔案。

    其中outputfile.txt為使用命令列工具切換YAML的輸出。

    展開查看輸出outputfile.txt檔案

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: d-2ze88915lz1il0**** # 部署時動態建立的雲端硬碟。
      name: d-2ze88915lz1il0****
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 20Gi
      csi:
        driver: diskplugin.csi.alibabacloud.com
        fsType: ext4
        volumeHandle: d-2ze88915lz1il0****
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              - cn-beijing-i
      persistentVolumeReclaimPolicy: Delete
      storageClassName: alicloud-disk-essd
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-essd
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: d-2ze88915lz1il0****
      storageClassName: alicloud-disk-essd
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: pv-nas
      name: pv-nas
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          server: 1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com
        volumeHandle: pv-nas
      mountOptions:
      - vers=3
      - nolock,tcp,noresvport
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nas
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas
      storageClassName: nas
      volumeMode: Filesystem
    
    kubectl apply -f outputfile.txt
  3. 執行以下命令,確認儲存聲明在恢複叢集中已處於Bound狀態。

    kubectl get pvc 

    預期輸出:

    NAME        STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    disk-essd   Bound    d-2ze88915lz1il0xxxxxx   20Gi       RWO            alicloud-disk-essd   29m
    pvc-nas     Bound    pv-nas                   5Gi        RWX            nas                  29m

步驟六:在恢複叢集中建立恢複任務

重要
  • 若恢複叢集中已存在同名的資源,則恢複任務將跳過該資源。

  • 備份中心關注業務應用的備份和恢複。在恢複任務之前,您需要在恢複叢集中預先安裝並配置好所需的系統組件。例如:

    • ACR免密組件:您需要為恢複叢集重新授權並配置acr-configuration。

    • ALB Ingress組件:您需要預先配置ALBConfig等。

說明

Service資源恢複時,根據Service類型的不同將進行如下適配:

  • NodePort類型的Service:跨叢集恢複時,預設保留連接埠號碼。

  • LoadBalancer類型的Service:ExternalTrafficPolicy為Local時,HealthCheckNodePort預設使用隨機連接埠號碼。若您需要保留連接埠號碼,請在建立恢複任務時,設定spec.preserveNodePorts: true

    • 在備份組群中由指定已有SLB的Service,恢複時將使用原有的SLB並預設關閉強制監聽,您需要前往SLB控制台配置監聽。

    • 在備份組群中由CCM管理SLB的Service,恢複時將由CCM建立新的SLB執行個體,更多資訊,請參見Service的負載平衡配置注意事項

若您建立備份時備份了儲存卷,即使用資料換源的方式備份恢複。您可以通過儲存類轉換(convertedarg)實現儲存類型的變更。例如,將NAS儲存變為雲端硬碟儲存。您可以根據業務需求,選擇轉換的目標儲存類。

  • 本樣本中,由於備份組群是1.16的Flexvolume叢集,雲端硬碟儲存卷備份使用了Cloud Backup,因此可以為儲存聲明disk-essd選擇目標儲存類alicloud-disk(即轉換為CSI雲端硬碟類,預設為alicloud-disk-topology-alltype)。若您的備份組群為v1.18及以上的CSI叢集,則無需對雲端硬碟儲存卷做相關配置。

  • 本樣本中,還將Flexvolume NAS儲存卷轉換為CNFS管理的NAS隔離儲存卷,即為儲存聲明pvc-nas選擇目標儲存類alibabacloud-cnfs-nas。若您的叢集不存在alibabacloud-cnfs-nas儲存類,請參見通過CNFS管理NAS檔案系統(推薦)

具體操作步驟如下:

  1. 執行以下命令,建立恢複任務。

    關於通過控制台設定恢複任務的相關配置項,請參見恢複應用和資料卷。本步驟根據樣本情境提供了建議的配置資訊,您可以根據實際情境進行相應調整。

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
        csdr.alibabacloud.com/backuplocations: >-
           '{"name":"<備份倉庫名稱>","region":"<regionID如cn-beijing>","bucket":"<備份倉庫關聯的OSSbucket名稱>","provider":"alibabacloud"}'
      name: <恢複名稱>
      namespace: csdr
    spec:
      backupName: <備份名稱>
      excludedNamespaces:
      - arms-prom
      excludedResources:
      - secrets
      appRestoreOnly: false
      convertedarg:
      - convertToStorageClassType: alicloud-disk-topology-alltype
        namespace: default
        persistentVolumeClaim: alicloud-disk
      - convertToStorageClassType: alibabacloud-cnfs-nas
        namespace: default
        persistentVolumeClaim: pvc-nas
      namespaceMapping:
        <backupNamespace>: <restoreNamespace>
    EOF

    參數

    說明

    excludedNamespaces

    排除命名空間。對備份資源清單中不需要的命名空間進行排除。

    excludedResources

    排除資源。對備份資源清單中不需要的資源類型進行排除。

    appRestoreOnly

    對於已備份儲存卷的備份,是否恢複儲存卷。

    • true:恢複時建立動態儲存裝置卷、儲存聲明,指向新的資料來源。控制台建立的備份任務預設為true。

    • false:不建立,需要預先手動部署靜態卷。

    說明

    一般情況下,資料換源方式此處需設定為true,資料不換源方式此處需設定為false

    convertedarg

    轉換儲存類列表。備份中的FileSystem資料類型的儲存卷(OSS、NAS、CPFS、本機存放區等)的儲存聲明,在當前叢集中恢複為目標儲存類,實現例如NAS儲存至雲端硬碟儲存的轉換。

    • convertToStorageClassType:目標儲存類,需要在當前叢集已存在。目前的版本僅支援選擇雲端硬碟或NAS類型的儲存類。

    • namespace:儲存聲明所在的命名空間。

    • persistentVolumeClaim:儲存聲明名稱。

    您可以通過kubectl -ncsdr describe <backup-name>查詢備份的儲存聲明資訊,在輸出的status.resourceList.dataResource.pvcBackupInfo列表中dataType欄位為資料類型,分為FileSystem與Snapshot,nameSpace與pvcName分別為儲存聲明所在的命名空間與儲存聲明名稱。

  2. 執行以下命令,查詢恢複任務的狀態。

    kubectl -ncsdr describe applicationrestore <備份名稱>

    預期輸出中StatusPhase變為Completed,表明任務恢複成功。

  3. 執行以下命令,確認是否有恢複失敗的資源及失敗的原因。

    kubectl -ncsdr get pod | grep csdr-velero
    kubectl -ncsdr exec -it <csdr-velero的pod名稱> -- /velero describe restore <恢複名稱> --details

    預期輸出:

    Warnings:
      Velero:     <none>
      Cluster:  could not restore, ClusterRoleBinding "kubernetes-proxy" already exists. Warning: the in-cluster version is different than the backed-up version.
      Namespaces:
        demo-ns:  could not restore, ConfigMap "kube-root-ca.crt" already exists. Warning: the in-cluster version is different than the backed-up version.
                   could not restore, Endpoints "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version.
                   could not restore, Service "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version.
    
    Errors:
      Velero:     <none>
      Cluster:    <none>
      Namespaces:
        demo-ns:  error restoring endpoints/xxxxxx/kubernetes: Endpoints "kubernetes" is invalid: subsets[0].addresses[0].ip: Invalid value: "169.254.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10)
                   error restoring endpointslices.discovery.k8s.io/demo-ns/kubernetes: EndpointSlice.discovery.k8s.io "kubernetes" is invalid: endpoints[0].addresses[0]: Invalid value: "169.xxx.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10)
                   error restoring services/xxxxxx/kubernetes-extranet: Service "kubernetes-extranet" is invalid: spec.ports[0].nodePort: Invalid value: 31882: provided port is already allocated

    通過以上預期輸出,您可以查看恢複叢集中是否有未被恢複的資源,例如,Warnings中有資源已存在的問題,且資源已被跳過。Errors中有NodePort複用的問題,跨叢集恢複時會保留原有連接埠。

  4. 確認恢複的應用是否正常運行。

    1. 確認應用恢複後,是否存在由於業務限制、容器運行異常或其他原因導致資源處於異常狀態,如有,請進行手動修複。

    2. 驗證恢複後,Nginx應用的apiVersion已預設調整至1.28版本的叢集推薦使用的apps/v1。