本文說明如何將 vSphere 資料存放區遷移至以儲存空間政策為基礎的管理 (SPBM)。
本頁面適用於儲存空間專家,他們負責設定及管理儲存空間效能、用量和費用。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
1.30:正式發布
1.29:預先發布
1.16 和更早版本:不適用
背景資訊
您可以在叢集設定檔中的四個位置指定資料儲存區:
管理員叢集: vCenter.datastore
叢集層級的使用者叢集,包括控制層節點和所有工作站節點集區: vCenter.datastore
使用者叢集控制層節點: masterNode.vsphere.datastore
使用者叢集工作站節點集區: nodePools[i].vsphere.datastore
這些欄位的繼承方式如下:
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
的值。
同樣地,您可以在四個位置指定儲存空間政策:
叢集層級的使用者叢集,包括控制層節點和所有工作站節點集區: vCenter.storagePolicyName
使用者叢集控制層節點: masterNode.vsphere.storagePolicyName
使用者叢集工作站節點集區: nodePools[i].vsphere.storagePolicyName
storagePolicyName
欄位的繼承方式與 datastore
欄位相同。
事前準備
- 這項程序是單向遷移,我們不支援還原為先前的狀態。
- 資料存放區必須與您即將設定的新儲存空間政策相容。
- 系統僅支援高可用性 (HA) 管理員叢集。如果您的管理員叢集不是 HA 管理員,請先將管理員叢集遷移至 HA。
遷移使用者叢集
遷移步驟取決於您要遷移整個使用者叢集,還是分別遷移控制層節點和工作站節點集區。這個選項可讓您為控制層節點和工作站節點集區選取不同的儲存空間政策。
為協助規劃維護期間,請注意下列事項:
遷移整個叢集只需要更新一次叢集。
如要分別遷移控制層節點和工作站節點集區,需要進行兩次叢集更新。
整個叢集
如要遷移整個叢集,包括所有控制層節點和工作站節點集區,請按照下列步驟操作。使用者叢集版本必須為 1.30 以上。
按照下列方式修改使用者叢集設定檔:
將
vCenter.storagePolicyName
欄位設為儲存空間政策的名稱。如果指定了下列項目,請移除或加註:
vCenter.datastore
欄位- 「
masterNode.vsphere
」專區 nodepools[i].vsphere.datastore
nodepools[i].vsphere.storagePolicyName
下列設定範例顯示這些變更。
變更前:
vCenter: datastore: ds-1
變更後:
vCenter: storagePolicyName: sp-1 # datastore: ds-1
更新使用者叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。USER_CLUSTER_CONFIG
:使用者叢集設定檔的路徑。
更新隨附的 StorageClass
更新叢集中的設定後,您必須更新隨附的 StorageClass
。
取得已組合
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 的路徑。請先複製
storage-class.yaml
,以防萬一,因為您需要變更這個檔案:cp storage-class.yaml storage-class.yaml-backup.yaml
從叢集刪除預設
StorageClass
:kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIG
更新
storage-class.yaml
中的設定,如下所示:刪除或註解下列欄位:
parameters.datastoreURL
resourceVersion
新增
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
將修改後的
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
:
取得已組合
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 的路徑。複製
storage-class-kubeception.yaml
檔案,以防萬一 (您需要變更該檔案):cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
從叢集刪除預設
StorageClass
:kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
更新
storage-class-kubeception.yaml
中的設定,如下所示:刪除或註解下列欄位:
parameters.datastoreURL
resourceVersion
新增
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
將修改後的
StorageClass
套用至管理叢集:kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
遷移後
如果您在遷移後建立新的節點集區,新集區會根據更新後的叢集,遵循繼承規則。
舉例來說,假設您將 vCenter.datastore
遷移至儲存空間政策。
現在,如果您建立新的節點集區,並將 nodePools[i].vsphere.datastore
和 nodePools[i].vsphere.storagePolicyName
留空,新的節點集區就會沿用 vCenter.storagePolicyName
中指定的儲存空間政策。
節點
如要分別遷移控制層節點和工作站節點集區,請按照下列步驟操作。
僅限 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
遷移控制層節點
請按照下列步驟遷移控制平面節點:
在使用者叢集設定檔中進行下列變更:
- 將
masterNode.vsphere.storagePolicyName
欄位設為儲存空間政策名稱。 - 刪除或排除
masterNode.vsphere.datastore
欄位的註解。
下列設定範例顯示這些變更。
變更前:
masterNode: vsphere: datastore: ds-1
變更後:
masterNode: vsphere: # datastore: ds-1 storagePolicyName: sp-1
- 將
更新使用者叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。USER_CLUSTER_CONFIG
:使用者叢集設定檔的路徑。
請等待更新指令完成,再更新節點集區。
遷移節點集區
請按照下列步驟遷移所有節點集區:
在使用者叢集設定檔中進行下列變更:
- 將每個
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
- 將每個
更新使用者叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
(選用) 在叢集層級更新儲存空間政策
如果是使用者叢集,叢集層級 vCenter
區段中的 datastore
和 storagePolicyName
欄位是 masterNode
和 nodepools
區段使用的預設值。完成上述步驟後,任何叢集元件都不會使用叢集層級的 vCenter
datastore
和 storagePolicyName
設定。您可以保留叢集層級的 vCenter
區段,或更新該區段,使其與 masterNode
和 nodepools
一致。
如果保留現有設定,建議您在叢集層級 vCenter
區段上方新增註解,說明該設定會遭到忽略,因為 masterNode
和 nodepools
區段中的設定會覆寫該設定。
如要變更叢集層級的 vCenter
區段,使其與 masterNode
和 nodepools
區段相符,請按照下列步驟更新叢集:
按照下列方式修改使用者叢集設定檔:
- 將
vCenter.storagePolicyName
欄位設為儲存空間政策的名稱。 - 移除或註解排除
vCenter.datastore
欄位。
- 將
更新使用者叢集:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
這項更新指令不會對叢集進行任何變更,但會更新伺服器端 (
OnPremUserCluster
) 的vCenter.datastore
和vCenter.storagePolicyName
欄位。
更新隨附的 StorageClass
更新設定後,您需要更新隨附的 StorageClass
。
取得已組合
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 的路徑。請先複製
storage-class.yaml
,以防萬一,因為您需要變更這個檔案:cp storage-class.yaml storage-class.yaml-backup.yaml
從叢集刪除預設
StorageClass
:kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIG
更新
storage-class.yaml
中的設定,如下所示:刪除或註解下列欄位:
parameters.datastoreURL
resourceVersion
新增
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
將修改後的
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
:
取得已組合
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 的路徑。複製
storage-class-kubeception.yaml
檔案,以防萬一 (您需要變更該檔案):cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
從叢集刪除預設
StorageClass
:kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
更新
storage-class-kubeception.yaml
中的設定,如下所示:刪除或註解下列欄位:
parameters.datastoreURL
resourceVersion
新增
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
將修改後的
StorageClass
套用至管理叢集:kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
遷移管理員叢集
請務必一併更新管理員叢集的儲存空間政策名稱。
在管理員叢集設定檔中進行下列變更:
- 移除或註解排除
vCenter.datastore
欄位。 - 將
vCenter.storagePolicyName
欄位設為儲存空間政策的名稱。
- 移除或註解排除
更新管理員叢集:
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」(透過儲存空間政策管理進行儲存空間遷移)。