備份和還原 vSphere 上的管理叢集和工作負載叢集基礎結構 (技術預覽)

本主題說明如何在 vSphere 上透過以下方法,備份和還原具有獨立管理叢集的 Tanzu Kubernetes Grid (TKG) 的叢集基礎結構:

  • 使用 Velero 來備份和還原獨立管理叢集上的工作負載叢集物件,以及
  • 從其組態檔重建獨立管理叢集
附註

  • VMware 不支援使用 Velero 來備份 TKG 獨立管理叢集。
  • 如果在部署獨立管理叢集後重新設定該叢集,如同此處所述,重建該叢集不見得能全數復原其所有資源。

對於具有獨立管理叢集的 Tanzu Kubernetes Grid (TKG) 工作負載叢集,若要備份及還原其中所託管的工作負載和動態儲存磁碟區,請參閱備份和還原叢集工作負載

若要備份和還原 vSphere with Tanzu 叢集 (包括主管叢集及其建立的工作負載叢集),請參閱 VMware vSphere 8.0 說明文件中的備份和還原 vSphere with Tanzu

注意

  • 此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態

  • 重建工作負載叢集的管理叢集後,對工作負載叢集執行 Pinniped 驗證無法運作。

設定 Velero

您可以使用 Velero (一種開放原始碼社群標準工具),來備份和還原 TKG 獨立管理叢集基礎結構和工作負載。

Velero 支援各種儲存區提供者以儲存其備份。Velero 還支援:

  • 備份還原設定預掛接和後掛接,以在備份和還原事件之前或之後執行自訂程序。
  • 排除不適合備份/還原的各種工作負載或叢集狀態層面。

Tanzu Kubernetes Grid 訂閱包括對 VMware 測試的、相容的 Velero 發行版的支援,可從 Tanzu Kubernetes Grid 下載頁面取得。

若要備份和還原 TKG 叢集,您需要:

完成上述必備條件後,還可以使用 Velero 在叢集之間遷移工作負載。有關說明,請參見 Velero 文件中的叢集遷移資源篩選

安裝 Velero CLI

注意

如果已安裝 Velero CLI v1.8.1 或更早版本 (隨早期版本的 TKG 一起發行),則需要升級到 v1.9.7。較舊的 Velero 版本不能與 v1.9 及更新版本中使用的 CRD 一起使用。

若要安裝 Velero CLI v1.9.7,請執行以下動作:

  1. 移至 Tanzu Kubernetes Grid 下載頁面,然後使用您的 VMware Customer Connect 認證登入。
  2. 產品下載 (Product Downloads) 下,按一下移至下載 (Go to Downloads)
  3. 捲動到 Velero 項目,然後下載適用於您的工作站作業系統的 Velero CLI .gz 檔案。其檔案名稱以 velero-linux-velero-mac-velero-windows64- 開頭。
  4. 使用 gunzip 命令或您選擇的解壓縮工具解壓縮二進位檔:

    gzip -d <RELEASE-TARBALL-NAME>.gz
    
  5. 將適用於您的平台的 CLI 二進位檔重新命名為 velero,確保它是可執行的,然後將其新增至 PATH

    • macOS 和 Linux 平台:

      1. 將二進位檔移入 /usr/local/bin 資料夾並將其重新命名為 velero
      2. 將檔案指定為可執行檔:
      chmod +x /usr/local/bin/velero
      
    • Windows 平台:

      1. 建立新的 Program Files\velero 資料夾並將二進位檔案複製到其中。
      2. 將二進位檔案重新命名為 velero.exe
      3. velero 資料夾上按一下滑鼠右鍵,選取內容 (Properties) > 安全性 (Security),並確定您的使用者帳戶具有完全控制 (Full Control) 權限。
      4. 使用 Windows Search 搜尋 env
      5. 選取編輯系統環境變數 (Edit the system environment variables),然後按一下環境變數 (Environment Variables) 按鈕。
      6. 系統變數 (System variables) 下選取 Path 資料列,然後按一下編輯 (Edit)
      7. 按一下新增 (New) 以新增資料列,然後輸入 velero 二進位檔的路徑。

設定儲存區提供者

若要備份 Tanzu Kubernetes Grid 工作負載叢集內容,您需要以下儲存區位置:

  • 叢集中 Kubernetes 中繼資料的叢集物件儲存區備份
  • 叢集使用的資料的磁碟區快照

請參閱 Velero 說明文件中的備份儲存區位置和磁碟區快照位置。Velero 支援各種儲存區提供者,這些提供者可以是:

  • 線上雲端儲存區提供者。
  • 用於 Proxy 或氣隙環境的內部部署物件儲存區服務,例如 MinIO。

VMware 建議將唯一的儲存區值區專用於每個叢集。

若要設定 MinIO,請執行以下動作:

  1. 執行設有 MinIO 認證和儲存位置的 minio 容器映像,例如:

    $ docker run -d --name minio --rm -p 9000:9000 -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -e "MINIO_DEFAULT_BUCKETS=mgmt" gcr.io/velero-gcp/bitnami/minio:2021.6.17-debian-10-r7
    
  2. 將認證儲存到本機檔案,以傳遞給 velero install--secret-file 選項,例如:

    [default]
    aws_access_key_id=minio
    aws_secret_access_key=minio123
    

vSphere 的儲存區

在 vSphere 上,叢集物件儲存區備份和磁碟區快照將儲存到同一儲存區位置。此位置必須是 Amazon Web Services (AWS) 或 S3 提供者 (如 MinIO) 上與 S3 相容的外部儲存區。

若要為 vSphere 上的 Velero 設定儲存區,請參閱適用於 v1.4.3 外掛程式的 Vanilla Kubernetes 叢集中的 Velero Plugin for vSphere

用於 AWS 的儲存區和 AWS 上的儲存區

若要為 AWS 上的 Velero 設定儲存區,請依照適用於 AWS 存放庫的 Velero 外掛程式中的程序操作:

  1. 建立 S3 值區

  2. 設定 Velero 的權限

視需要為每個外掛程式設定 S3 儲存區。物件儲存外掛程式會儲存和擷取叢集物件備份,而磁碟區快照程式則會儲存和擷取資料磁碟區。

用於 Azure 的儲存區和 Azure 上的儲存區

若要為 Azure 上的 Velero 設定儲存區,請依照適用於 Azure 存放庫的 Velero 外掛程式中的程序操作:

  1. 建立 Azure 儲存區帳戶和 Blob 容器

  2. 取得包含虛擬機器和磁碟的資源群組

  3. 設定 Velero 的權限

視需要為每個外掛程式設定 S3 儲存區。物件儲存外掛程式會儲存和擷取叢集物件備份,而磁碟區快照程式則會儲存和擷取資料磁碟區。

將 Velero 伺服器部署到管理叢集

若要備份工作負載叢集物件,請將 Velero v1.9.7 伺服器安裝到獨立管理叢集並驗證安裝。

Velero 安裝選項

若要安裝 Velero,請執行具有下列選項的 velero install

  • --provider $PROVIDER:例如,aws
  • --plugins projects.registry.vmware.com/tkg/velero/velero-plugin-for-aws:v1.5.5_vmware.1
  • --bucket $BUCKET:S3 值區的名稱
  • --backup-location-config region=$REGION:值區所在的 AWS 區域
  • --snapshot-location-config region=$REGION:值區所在的 AWS 區域
  • (選用) --kubeconfig 將 Velero 伺服器安裝到目前預設叢集以外的叢集。
  • (選用) --secret-file ./VELERO-CREDS 授與 Velero 存取 S3 值區的一種方法是,將類似如下的本機 VELERO-CREDS 檔案傳遞給這個選項:

    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    
  • 如需其他選項,請參閱安裝並啟動 Velero

執行 velero install 命令時,會在叢集上建立一個稱為 velero 的命名空間,並在其中放置一個名為 velero 的部署。

需要下列設定:

  • 管理叢集外掛程式:需要下列外掛程式。此選項會暫停叢集並收集與正在備份的叢集相關的資源。
    --plugins projects.registry.vmware.com/tkg/velero/velero-mgmt-cluster-plugin:v0.1.0_vmware.1
    
    附註

    您可以新增以逗號分隔的多個選項。例如:

    --plugins projects.registry.vmware.com/tkg/velero/velero-plugin-for-aws:v1.5.5_vmware.1,projects.registry.vmware.com/tkg/velero/velero-mgmt-cluster-plugin:v0.1.0_vmware.1
    
  • 無快照位置:若要備份叢集基礎結構,請勿設定 --snapshot-location-config

驗證 Velero 安裝

velero install 命令完成後,請確認 Velero 已安裝成功:

  1. 確認 Velero 網繭的狀態為 Running

    kubectl -n velero get pod
    NAME                      READY   STATUS    RESTARTS   AGE
    velero-78fdbcd446-v5cqr   1/1     Running   0          3h41m
    
  2. 確認備份位置處於 Available 階段:

    velero backup-location get
    NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
    default   aws        mgmt            Available   2022-11-11 05:55:55 +0000 UTC   ReadWrite     true
    

備份工作負載叢集物件

若要備份由獨立管理叢集所管理的所有工作負載叢集物件,請執行:

velero backup create my-backup --exclude-namespaces tkg-system --include-resources cluster.cluster.x-k8s.io --wait
附註

  • --exclude-namespaces tkg-system 會排除管理叢集本身。
  • --include-resources cluster.cluster.x-k8s.io 會包含工作負載叢集物件

  • VMware 建議您在進行任何結構變更 (例如垂直擴充或縮減) 後,就立即備份工作負載叢集。這可避免備份物件和實體基礎結構之間出現不相符情況,從而避免還原程序失敗。

排程備份

如果在最近一次備份後變更了叢集物件,則還原後的系統狀態會與其想要的最新狀態不相符。此問題稱為「偏差」。如需如何從某些常見類型的偏差復原的相關資訊,請參閱以下的處理偏差小節。

為了緩解偏差,VMware 建議使用 Velero 來排程定期備份。例如,若要每天備份所有的工作負載叢集,且每個備份保留 14 天,請執行:

velero create schedule daily-bak --schedule="@every 24h"  --exclude-namespaces tkg-system --include-resources cluster.cluster.x-k8s.io --ttl 336h0m0s

如需更多 Velero 排程選項,請參閱 Velero 說明文件中的排程備份

完成還原

若要還原獨立管理叢集及其管理的工作負載叢集物件,請執行以下動作:

  1. 從組態檔 mgmt-cluster-config.yaml 重建管理叢集,如從組態檔來部署管理叢集中所述。

    附註

    在部署管理叢集後,套用至管理叢集的任何組態變更都必須反映在組態檔或環境變數中,否則將不會還原它們。

  2. 一建立管理叢集後,就只應有一個 TKR:

    tanzu kubernetes-release get
    NAME                       VERSION                  COMPATIBLE  ACTIVE  UPDATES AVAILABLE
    v1.25.7---vmware.1-tkg.1  v1.25.7+vmware.1-tkg.1  True        True
    
  3. 請等待幾分鐘,直到所備份的工作負載叢集使用的所有 TKR 都變成可用:

    tanzu kubernetes-release get
    NAME                       VERSION                  COMPATIBLE  ACTIVE  UPDATES AVAILABLE
    v1.23.17---vmware.2-tkg.2  v1.23.17+vmware.2-tkg.2  True        True
    v1.24.11---vmware.1-tkg.1  v1.24.11+vmware.1-tkg.1  True        True
    v1.25.7---vmware.1-tkg.1   v1.25.7+vmware.1-tkg.1 True        True
    
  4. 遵循上述將 Velero 伺服器部署到叢集指示,在管理叢集上安裝 Velero。請確定認證和備份位置組態設定的值與執行備份時的值相同。

  5. Velero 安裝後,請執行 velero backup get,直到備份同步,且命令列出了您想使用的備份:

    velero backup get
    NAME                 STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
    my-backup            Completed   0        0          2022-12-07 17:10:42 +0000 UTC   24d       default            <none>
    
  6. 執行 velero restore create,還原工作負載叢集資源。VMware 建議使用最新的備份:

    velero restore create my-restore --from-backup my-backup --wait
    

    還原完成後,叢集將處於 createdStalled 狀態:

    tanzu cluster list
    NAME                NAMESPACE  STATUS          CONTROLPLANE  WORKERS  KUBERNETES         ROLES   PLAN  TKR
    tkg-vc-antrea       default    createdStalled  0/3           0/3      v1.25.7+vmware.1   <none>  prod  v1.25.7---vmware.1-tkg.1
    
  7. 修補叢集物件,以將其 paused 內容設定為 false。這是必要的,因為會以 paused 狀態將叢集物件重建在新的管理叢集上,以防止其控制器嘗試協調:

    • 若要在還原叢集後取消暫停它,請執行:

      kubectl -n my-namespace patch cluster CLUSTER-NAME --type merge -p '{"spec":{"paused":false}}'
      
    • 若要取消暫停多個命名空間中的所有叢集,請執行以下指令碼:

      #!/bin/bash
      
      for ns in $(kubectl get ns -o custom-columns=":metadata.name" | grep -v "tkg-system");
      do
            clusters=$(kubectl -n $ns get cluster -o name)
            if [[ -n $clusters ]];then
                    kubectl -n $ns patch $clusters --type merge -p '{"spec":{"paused":false}}'
            fi
      done
      
  8. 確認所有工作負載叢集都處於 running 狀態,例如:

    tanzu cluster list
    NAME                NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES         ROLES   PLAN  TKR
    tkg-vc-antrea       default    running  3/3           3/3      v1.25.7+vmware.1  <none>  prod  v1.25.7---vmware.1-tkg.1
    
  9. 針對每個工作負載叢集,執行 tanzu cluster get CLUSTER-NAME,以檢查所有元件是否都處於 running 狀態,例如:

    tanzu cluster get tkg-vc-antrea
      NAME           NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   TKR
      tkg-vc-antrea  default    running  3/3           3/3      v1.25.7+vmware.1 <none>  v1.25.7---vmware.1-tkg.1
    
    Details:
    
    NAME                                                          READY  SEVERITY  REASON  SINCE  MESSAGE
    /tkg-vc-antrea                                                True                     4h14m
    ├─ClusterInfrastructure - VSphereCluster/tkg-vc-antrea-s6kl5  True                     4h36m
    ├─ControlPlane - KubeadmControlPlane/tkg-vc-antrea-ch5hn      True                     4h14m
    │ ├─Machine/tkg-vc-antrea-ch5hn-8gfvt                         True                     4h14m
    │ ├─Machine/tkg-vc-antrea-ch5hn-vdcrp                         True                     4h23m
    │ └─Machine/tkg-vc-antrea-ch5hn-x7nmm                         True                     4h32m
    └─Workers
      ├─MachineDeployment/tkg-vc-antrea-md-0-8b8zn                True                     4h23m
      │ └─Machine/tkg-vc-antrea-md-0-8b8zn-798d5b8897-bnxn9       True                     4h24m
      ├─MachineDeployment/tkg-vc-antrea-md-1-m6dvh                True                     4h24m
      │ └─Machine/tkg-vc-antrea-md-1-m6dvh-79fb858b96-p9667       True                     4h28m
      └─MachineDeployment/tkg-vc-antrea-md-2-brm2m                True                     4h21m
        └─Machine/tkg-vc-antrea-md-2-brm2m-6478cffc5f-tq5cn       True                     4h23m
    

    當所有工作負載叢集都正在執行後,就可以使用 Tanzu CLI 來管理工作負載叢集。

處理偏差

偏差情況可能很複雜,但一些常見的模式和緩解措施包括:

  • 失效的工作節點:

    • 有額外未用的節點
    • 在備份後,如果工作節點計數有所縮減,就可能發生此情況
    • 通常不需要緩解措施。還原之後,「機器健全狀況檢查」會刪除失效的機器物件,並建立一個新節點,以符合想要的機器計數。
  • Ghost 工作節點基礎結構:

    • 有多餘且未受管理的節點基礎結構
    • 在備份後,如果工作節點計數有所垂直擴充,就可能發生此情況
    • 緩解措施:

      1. 取得工作負載叢集 kubeconfig,並將其設定為 kubectl 內容。
      2. 比較下列 kubectltanzu 命令的輸出:

        # Get the actual worker nodes of the workload cluster
        $ kubectl --context tkg-vc-antrea-admin@tkg-vc-antrea get node
        NAME                                        STATUS   ROLES           AGE    VERSION
        tkg-vc-antrea-md-0-p9vn5-645498f59f-42qh9   Ready    <none>          44m    v1.25.7+vmware.1
        tkg-vc-antrea-md-0-p9vn5-645498f59f-shrpt   Ready    <none>          114m   v1.25.7+vmware.1
        tkg-vc-antrea-wdsfx-2hkxp                   Ready    control-plane   116m   v1.25.7+vmware.1
        
        # Get the worker nodes managed by the TKG
        $ tanzu cluster get tkg-vc-antrea
          NAME           NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   TKR
          tkg-vc-antrea  default    running  1/1           1/1      v1.25.7+vmware.1  <none>  v1.25.7---vmware.1-tkg.1-zshippable
        
          Details:
        
          NAME                                                          READY  SEVERITY  REASON  SINCE  MESSAGE
          /tkg-vc-antrea                                                True                     13m
          ├─ClusterInfrastructure - VSphereCluster/tkg-vc-antrea-b7fr9  True                     13m
          ├─ControlPlane - KubeadmControlPlane/tkg-vc-antrea-wdsfx      True                     13m
          │ └─Machine/tkg-vc-antrea-wdsfx-2hkxp                         True                     13m
          └─Workers
            └─MachineDeployment/tkg-vc-antrea-md-0-p9vn5                True                     13m
              └─Machine/tkg-vc-antrea-md-0-p9vn5-645498f59f-shrpt       True                     13m
        
      3. 對於 kubectl 所列出的工作節點,只要該工作節點並無 tanzu cluster get 中的 Workers > Machine 清單,請執行下列動作:

        1. 將工作節點數量垂直擴充為預期值,例如:

          tanzu cluster scale ${cluster_name} --worker-machine-count 2
          
        2. 使用叢集 kubeconfig 來清空 Ghost 節點,這會將其工作負載移至 TKG 所管理的節點:
          kubectl drain ${node_name} --delete-emptydir-data --ignore-daemonsets
          
        3. 從叢集中移除 Ghost 節點:

          kubectl delete node ${node_name}
          
        4. 登入 vSphere 或其他基礎結構,然後手動移除虛擬機器。

  • 控制平面上的失效節點和 Ghost 基礎結構

    • 控制平面的未用節點和多餘的節點基礎結構
    • 在備份後,如果替換了控制平面節點,就可能發生此情況
    • 緩解措施:

      1. 取得工作負載叢集 kubeconfig,並將其設定為 kubectl 內容。
      2. 比較下列 kubectltanzu 命令的輸出:

        # Get the actual control plane nodes of the workload cluster
        $ kubectl --context wc-admin@wc get node
        NAME                             STATUS   ROLES           AGE    VERSION
        wc-2cjn4-4xbf8                   Ready    control-plane   107s   v1.25.7+vmware.1
        wc-2cjn4-4zljs                   Ready    control-plane   26h    v1.25.7+vmware.1
        wc-2cjn4-59v95                   Ready    control-plane   26h    v1.25.7+vmware.1
        wc-2cjn4-ncgxb                   Ready    control-plane   25h    v1.25.7+vmware.1
        wc-md-0-nl928-5df8b9bfbd-nww2w   Ready    <none>          26h    v1.25.7+vmware.1
        wc-md-1-j4m55-589cfcd9d6-jxmvc   Ready    <none>          26h    v1.25.7+vmware.1
        wc-md-2-sd4ww-7b7db5dcbb-crwdv   Ready    <none>          26h    v1.25.7+vmware.1
        
        # Get the control plane nodes managed by the TKG
        $ tanzu cluster get wc
        NAME  NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   TKR
        wc    default    updating 4/3           3/3      v1.25.7+vmware.1 <none>  v1.25.7---vmware.1-tkg.1-zshippable
        
        Details:
        
        NAME                                               READY  SEVERITY  REASON  SINCE  MESSAGE
        /wc                                                True                     24m
        ├─ClusterInfrastructure - VSphereCluster/wc-9nq7v  True                     26m
        ├─ControlPlane - KubeadmControlPlane/wc-2cjn4      True                     24m
        │ ├─Machine/wc-2cjn4-4xbf8                         True                     24m
        │ ├─Machine/wc-2cjn4-4zljs                         True                     26m
        │ └─Machine/wc-2cjn4-59v95                         True                     26m
        └─Workers
        ├─MachineDeployment/wc-md-0-nl928                True                     26m
        │ └─Machine/wc-md-0-nl928-5df8b9bfbd-nww2w       True                     26m
        ├─MachineDeployment/wc-md-1-j4m55                True                     26m
        │ └─Machine/wc-md-1-j4m55-589cfcd9d6-jxmvc       True                     26m
        └─MachineDeployment/wc-md-2-sd4ww                True                     26m
          └─Machine/wc-md-2-sd4ww-7b7db5dcbb-crwdv       True                     26m
        
      3. 對於 kubectl 所列出的 control-plane 節點,只要該控制平面並無 tanzu cluster get 中的 ControlPlane > Machine 清單,請執行下列動作:

        1. 刪除節點:

          kubectl delete node ${node_name}
          
        2. 登入 vSphere 或其他基礎結構,然後手動移除虛擬機器。
check-circle-line exclamation-circle-line close-line
Scroll to top icon