將資料儲存庫遷移至 SPBM

本文說明如何將 vSphere 資料存放區遷移至以儲存空間政策為基礎的管理 (SPBM)。

本頁面適用於儲存空間專家,他們負責設定及管理儲存空間效能、用量和費用。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud

1.30:正式發布
1.29:預先發布
1.16 和更早版本:不適用

背景資訊

您可以在叢集設定檔中的四個位置指定資料儲存區:

這些欄位的繼承方式如下:

adminCluster.vCenter.datastore ->
  userCluster.vCenter.datastore ->
    (userCluster.masterNode.vsphere.datastore and userCluster.nodePools[i].vsphere.datastore)

範例:

  • 如果 userCluster.vCenter.datastore 為空,則會沿用 adminCluster.vCenter.datastore 的值。

  • 如果 userCluster.nodePools[i].vsphere.datastore 為空,則會沿用 userCluster.vCenter.datastore 的值。

同樣地,您可以在四個位置指定儲存空間政策:

storagePolicyName 欄位的繼承方式與 datastore 欄位相同。

事前準備

  • 這項程序是單向遷移,我們不支援還原為先前的狀態。
  • 資料存放區必須與您即將設定的新儲存空間政策相容。
  • 系統僅支援高可用性 (HA) 管理員叢集。如果您的管理員叢集不是 HA 管理員,請先將管理員叢集遷移至 HA

遷移使用者叢集

遷移步驟取決於您要遷移整個使用者叢集,還是分別遷移控制層節點和工作站節點集區。這個選項可讓您為控制層節點和工作站節點集區選取不同的儲存空間政策。

為協助規劃維護期間,請注意下列事項:

  • 遷移整個叢集只需要更新一次叢集。

  • 如要分別遷移控制層節點和工作站節點集區,需要進行兩次叢集更新。

整個叢集

如要遷移整個叢集,包括所有控制層節點和工作站節點集區,請按照下列步驟操作。使用者叢集版本必須為 1.30 以上。

  1. 按照下列方式修改使用者叢集設定檔:

    1. vCenter.storagePolicyName 欄位設為儲存空間政策的名稱。

    2. 如果指定了下列項目,請移除或加註:

      • vCenter.datastore 欄位
      • masterNode.vsphere」專區
      • nodepools[i].vsphere.datastore
      • nodepools[i].vsphere.storagePolicyName

    下列設定範例顯示這些變更。

    變更前:

    vCenter:
      datastore: ds-1
    

    變更後:

    vCenter:
      storagePolicyName: sp-1
      # datastore: ds-1
    
  2. 更新使用者叢集:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

    • USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑。

更新隨附的 StorageClass

更新叢集中的設定後,您必須更新隨附的 StorageClass

  1. 取得已組合 vsphere-csi-driver 的目前預設 StorageClass (名為 standard-rwo),並儲存至名為 storage-class.yaml 的本機檔案。

    kubectl get storageclass standard-rwo -oyaml \
        --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yaml
    

    USER_CLUSTER_KUBECONFIG 替換為使用者叢集 kubeconfig 的路徑。

  2. 請先複製 storage-class.yaml,以防萬一,因為您需要變更這個檔案:

    cp storage-class.yaml storage-class.yaml-backup.yaml
    
  3. 從叢集刪除預設 StorageClass

    kubectl delete storageclass standard-rwo \
        --kubeconfig USER_CLUSTER_KUBECONFIG
    
  4. 更新 storage-class.yaml 中的設定,如下所示:

    1. 刪除或註解下列欄位:

      • parameters.datastoreURL
      • resourceVersion
    2. 新增 parameters.storagePolicyName 欄位,並設為儲存空間政策的名稱。

    下列設定範例顯示這些變更。

    變更前:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      datastoreURL: ds//ds-1
    

    變更後:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      storagePolicyName: sp-1
    
  5. 將修改後的 StorageClass 套用至使用者叢集:

    kubectl apply -f storage-class.yaml \
        --kubeconfig USER_CLUSTER_KUBECONFIG
    

僅限 Kubeception 使用者叢集

如果是 Kubeception 使用者叢集,您需要在管理員叢集中更新使用者叢集控制層節點的 StorageClass。Kubeception 叢集的設定欄位 enableControlplaneV2 會設為 false。啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集本身執行。如果未啟用 Controlplane V2,使用者叢集的控制層會在管理員叢集中執行,這稱為 kubeception。

執行下列指令,判斷叢集是否已啟用 Controlplane V2:

kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo

如果輸出內容為 false,請完成下列步驟,更新管理員叢集中使用者叢集控制層節點的預設 StorageClass

  1. 取得已組合 vsphere-csi-driver 的目前預設 StorageClass (名為 USER_CLUSTER_NAME-csi),並儲存至名為 storage-class-kubeception.yaml 的本機檔案。

    kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yaml
    

    ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 的路徑。

  2. 複製 storage-class-kubeception.yaml 檔案,以防萬一 (您需要變更該檔案):

    cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
    
  3. 從叢集刪除預設 StorageClass

    kubectl delete storageclass USER_CLUSTER_NAME-csi \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  4. 更新 storage-class-kubeception.yaml 中的設定,如下所示:

    1. 刪除或註解下列欄位:

      • parameters.datastoreURL
      • resourceVersion
    2. 新增 parameters.storagePolicyName 欄位,並設為儲存空間政策的名稱。

    下列設定範例顯示這些變更。

    變更前:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      datastoreURL: ds//ds-1
    

    變更後:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      storagePolicyName: sp-1
    
  5. 將修改後的 StorageClass 套用至管理叢集:

    kubectl apply -f storage-class-kubeception.yaml \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

遷移後

如果您在遷移後建立新的節點集區,新集區會根據更新後的叢集,遵循繼承規則。

舉例來說,假設您將 vCenter.datastore 遷移至儲存空間政策。

現在,如果您建立新的節點集區,並將 nodePools[i].vsphere.datastorenodePools[i].vsphere.storagePolicyName 留空,新的節點集區就會沿用 vCenter.storagePolicyName 中指定的儲存空間政策。

節點

如要分別遷移控制層節點和工作站節點集區,請按照下列步驟操作。

  1. 僅限 1.29 版:取得目前的叢集設定。如果使用者叢集為 1.30 以上版本,則不需要執行這個步驟。

    gkectl get-config cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --output-dir ./gen-files
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG:管理員叢集的 kubeconfig 檔案路徑。

    • USER_CLUSTER_NAME:使用者叢集的名稱。

    ./gen-files 中找出 user-cluster.yaml

    如要進一步瞭解如何取得設定檔,請參閱「從叢集產生設定檔」。

    產生的設定檔會在每個層級 (叢集、masterNode (適用於控制層節點) 和 nodepools (適用於工作站節點)) 設定 datastore 名稱,如下列範例所示:

    apiVersion: v1
    kind: UserCluster
    ...
    # VCenter config in cluster level:
    vCenter:
      datastore: ds-1
    ...
    # VCenter config in master node level:
    masterNode:
      vsphere:
        datastore: ds-1
    ...
    # VCenter config in nodepool level:
    nodepools:
    - name: pool-1
      vsphere:
        datastore: ds-1
    - name: pool-2
      vsphere:
        datastore: ds-1
    

遷移控制層節點

請按照下列步驟遷移控制平面節點:

  1. 在使用者叢集設定檔中進行下列變更:

    • masterNode.vsphere.storagePolicyName 欄位設為儲存空間政策名稱。
    • 刪除或排除 masterNode.vsphere.datastore 欄位的註解。

    下列設定範例顯示這些變更。

    變更前:

    masterNode:
      vsphere:
        datastore: ds-1
    

    變更後:

    masterNode:
      vsphere:
        # datastore: ds-1
        storagePolicyName: sp-1
    
  2. 更新使用者叢集:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

    • USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑。

    請等待更新指令完成,再更新節點集區。

遷移節點集區

請按照下列步驟遷移所有節點集區:

  1. 在使用者叢集設定檔中進行下列變更:

    • 將每個 nodePools[i].vsphere.storagePolicyName 欄位設為儲存空間政策名稱。
    • 刪除或註解排除各個 nodePools[i].vsphere.datastore 欄位。

    下列設定範例顯示這些變更。

    變更前:

    nodepools:
    - name: pool-1
      vsphere:
        datastore: ds-1
    - name: pool-2
      vsphere:
        datastore: ds-1
    

    變更後:

    nodepools:
    - name: pool-1
      vsphere:
        # datastore: ds-1
        storagePolicyName: sp-1
    - name: pool-2
      vsphere:
        # datastore: ds-1
        storagePolicyName: sp-1
    
  2. 更新使用者叢集:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

(選用) 在叢集層級更新儲存空間政策

如果是使用者叢集,叢集層級 vCenter 區段中的 datastorestoragePolicyName 欄位是 masterNodenodepools 區段使用的預設值。完成上述步驟後,任何叢集元件都不會使用叢集層級的 vCenter datastorestoragePolicyName 設定。您可以保留叢集層級的 vCenter 區段,或更新該區段,使其與 masterNodenodepools 一致。

如果保留現有設定,建議您在叢集層級 vCenter 區段上方新增註解,說明該設定會遭到忽略,因為 masterNodenodepools 區段中的設定會覆寫該設定。

如要變更叢集層級的 vCenter 區段,使其與 masterNodenodepools 區段相符,請按照下列步驟更新叢集:

  1. 按照下列方式修改使用者叢集設定檔:

    • vCenter.storagePolicyName 欄位設為儲存空間政策的名稱。
    • 移除或註解排除 vCenter.datastore 欄位。
  2. 更新使用者叢集:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

    這項更新指令不會對叢集進行任何變更,但會更新伺服器端 (OnPremUserCluster) 的 vCenter.datastorevCenter.storagePolicyName 欄位。

更新隨附的 StorageClass

更新設定後,您需要更新隨附的 StorageClass

  1. 取得已組合 vsphere-csi-driver 的目前預設 StorageClass (名為 standard-rwo),並儲存至名為 storage-class.yaml 的本機檔案。

    kubectl get storageclass standard-rwo -oyaml \
        --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yaml
    

    USER_CLUSTER_KUBECONFIG 替換為使用者叢集 kubeconfig 的路徑。

  2. 請先複製 storage-class.yaml,以防萬一,因為您需要變更這個檔案:

    cp storage-class.yaml storage-class.yaml-backup.yaml
    
  3. 從叢集刪除預設 StorageClass

    kubectl delete storageclass standard-rwo \
        --kubeconfig USER_CLUSTER_KUBECONFIG
    
  4. 更新 storage-class.yaml 中的設定,如下所示:

    1. 刪除或註解下列欄位:

      • parameters.datastoreURL
      • resourceVersion
    2. 新增 parameters.storagePolicyName 欄位,並設為儲存空間政策的名稱。

    下列設定範例顯示這些變更。

    變更前:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      datastoreURL: ds//ds-1
    

    變更後:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      storagePolicyName: sp-1
    
  5. 將修改後的 StorageClass 套用至使用者叢集:

    kubectl apply -f storage-class.yaml \
        --kubeconfig USER_CLUSTER_KUBECONFIG
    

僅限 Kubeception 使用者叢集

如果是 Kubeception 使用者叢集,您需要在管理員叢集中更新使用者叢集控制層節點的 StorageClass。Kubeception 叢集的設定欄位 enableControlplaneV2 會設為 false。啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集本身執行。如果未啟用 Controlplane V2,使用者叢集的控制層會在管理員叢集中執行,這稱為 kubeception。

執行下列指令,判斷叢集是否已啟用 Controlplane V2:

kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo

如果輸出內容為 false,請完成下列步驟,更新管理員叢集中使用者叢集控制層節點的預設 StorageClass

  1. 取得已組合 vsphere-csi-driver 的目前預設 StorageClass (名為 USER_CLUSTER_NAME-csi),並儲存至名為 storage-class-kubeception.yaml 的本機檔案。

    kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yaml
    

    ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 的路徑。

  2. 複製 storage-class-kubeception.yaml 檔案,以防萬一 (您需要變更該檔案):

    cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
    
  3. 從叢集刪除預設 StorageClass

    kubectl delete storageclass USER_CLUSTER_NAME-csi \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  4. 更新 storage-class-kubeception.yaml 中的設定,如下所示:

    1. 刪除或註解下列欄位:

      • parameters.datastoreURL
      • resourceVersion
    2. 新增 parameters.storagePolicyName 欄位,並設為儲存空間政策的名稱。

    下列設定範例顯示這些變更。

    變更前:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      datastoreURL: ds//ds-1
    

    變更後:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
      name: standard-rwo
    Parameters:
      ...
      storagePolicyName: sp-1
    
  5. 將修改後的 StorageClass 套用至管理叢集:

    kubectl apply -f storage-class-kubeception.yaml \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

遷移管理員叢集

請務必一併更新管理員叢集的儲存空間政策名稱。

  1. 在管理員叢集設定檔中進行下列變更:

    • 移除或註解排除 vCenter.datastore 欄位。
    • vCenter.storagePolicyName 欄位設為儲存空間政策的名稱。
  2. 更新管理員叢集:

    gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config ADMIN_CLUSTER_CONFIG
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。
    • ADMIN_CLUSTER_CONFIG:管理員叢集設定檔的路徑。

使用 SPBM 遷移儲存空間

資料儲存庫遷移至 SPBM 後,叢集現在會使用 SPBM。但遷移作業不會將任何儲存空間工作負載 (例如機器資料磁碟或容器磁碟區) 從舊資料存放區移轉。

如要遷移儲存空間工作負載,請參閱「Storage migration with Storage Policy Based Management」(透過儲存空間政策管理進行儲存空間遷移)。