本文說明如何使用 StatefulSet CSI 遷移工具,將有狀態工作負載從樹內 vSphere 磁碟區外掛程式遷移至 Google Distributed Cloud 中的 vSphere CSI 驅動程式。
下表列出各版本工具的推出階段:
- v1.0:正式版
- v0.1:預覽
支援的 Google Distributed Cloud 版本:1.30 - 1.28。
總覽
Google Distributed Cloud 會透過 VMware vSphere 儲存空間、Kubernetes 樹狀結構內磁碟區外掛程式 (或「驅動程式」) 和 Container Storage Interface (CSI) 驅動程式,與外部區塊或檔案儲存系統整合。
在 1.15 版中,Kubernetes CSI 遷移功能預設為啟用,因此由隨附的 vSphere 磁碟區外掛程式支援的 PersistentVolume,在僅限 CSI 的環境中仍可正常運作。CSI 遷移功能會將隨附外掛程式作業呼叫重新導向至 CSI 驅動程式。由於 PersistentVolume spec 不可變更,因此仍由樹內外掛程式提供支援。可用的功能與隨附磁碟區外掛程式相同。
這類磁碟區無法使用全套 CSI 功能,例如磁碟區擴充和磁碟區快照。如要使用這些功能,必須將有狀態工作負載完全遷移至 CSI,方法是重新建立由 vSphere CSI 驅動程式支援的 PersistentVolume。您可以使用 CSI 遷移工具,將有狀態工作負載遷移至 CSI,並使用全套 CSI 功能。
這項工具可協助您將 StatefulSet 的 PersistentVolume 和 PersistentVolumeClaim 逐步遷移至 CSI,且不會造成應用程式停機。這項工具會在本地目錄中備份 Kubernetes 資源,並在遷移前將 ReclaimPolicy
設為 Retain
。因此不會遺失任何資料。
限制
自動化工具僅支援完全支援的 Google Distributed Cloud 版本。
這項功能僅適用於 StatefulSet。您可以使用這項工具執行預檢,在開始使用工具前先進行幾項安全檢查。
./statefulset-csi-migration-tool preflight \ --kubeconfig ADMIN_KUBECONFIG \ --cluster-name USER_CLUSTER_NAME \ --sts-name STS_NAME \ --sts-namespace STS_NAMESPACE \ --intree-storageclass INTREE_STORAGECLASS \ --csi-storageclass CSI_STORAGECLASS
更改下列內容:
ADMIN_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。USER_CLUSTER_NAME
:如果 StatefulSet 在使用者叢集上執行,請提供使用者叢集名稱。如果工作負載是在管理員叢集上執行,請略過這個標記。STS_NAME
:StatefulSet 的名稱。STS_NAMESPACE
:StatefulSet 的命名空間。INTREE_STORAGECLASS
:支援 StatefulSet PersistentVolume 的樹內 StorageClass 名稱。CSI_STORAGECLASS
:遷移後支援 StatefulSet PersistentVolume 的 CSI StorageClass 名稱。
下載
請前往 gs://gke-on-prem-release/statefulset-csi-migration-tool/v1.0/statefulset-csi-migration-tool
下載工具。
請注意,這項工具目前為預先發布版。
程序
本節說明如何將 StatefulSet 從 vSphere 樹狀結構內 vCP 內部佈建器 (kubernetes.io/vsphere-volume
) 遷移至 vSphere CSI 佈建器 (csi.vsphere.vmware.com
)。
./statefulset-csi-migration-tool rolling-migration all \ --kubeconfig ADMIN_KUBECONFIG \ --cluster-name USER_CLUSTER_NAME \ --sts-name STS_NAME \ --sts-namespace STS_NAMESPACE \ --intree-storageclass INTREE_STORAGECLASS \ --csi-storageclass CSI_STORAGECLASS \ --working-directory WORKING_DIRECTORY
更改下列內容:
ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。
USER_CLUSTER_NAME:如果 StatefulSet 在使用者叢集上執行,請提供使用者叢集名稱。如果工作負載是在管理員叢集上執行,請略過這個標記。
STS_NAME:StatefulSet 的名稱。
STS_NAMESPACE:StatefulSet 的命名空間。
INTREE_STORAGECLASS:支援 StatefulSet PersistentVolume 的樹內 StorageClass 名稱。
CSI_STORAGECLASS:遷移後支援 StatefulSet PersistentVolume 的 CSI StorageClass 名稱。
WORKING_DIRECTORY:儲存 StatefulSet 及其 Pod、PersistentVolumeClaim 和 PersistentVolume 的 Kubernetes 資源規格的本機目錄。每個 StatefulSet 的目錄名稱不得重複。這個目錄應為空白或不存在。 最好不要建立這個目錄,讓工具為您建立。
這項指令會執行下列工作:
在本地工作目錄中備份 StatefulSet 及其依附元件,例如 PersistentVolume、PersistentVolumeClaim 和 Pod 副本規格。
使用孤立刪除政策刪除 StatefulSet。這個步驟只會刪除 StatefulSet,但不會刪除 Pod 副本、PersistentVolume 和 PersistentVolumeClaim 等依附元件。
將每個 Pod 遷移至 CSI 驅動程式 (與選項 1 類似),並執行下列操作:
a. 將 PersistentVolume 的 ReclaimPolicy 欄位設為 Retain。
b. 刪除 Pod、PersistentVolume 和 PersistentVolumeClaim。
c. 將現有 VMDK 轉換為 FCD。
d. 再次建立 PersistentVolume、PersistentVolumeClaim 和 Pod。
重新建立 StatefulSet,但規格中的 PVCTemplate 欄位會指向 CSI StorageClass。StatefulSet 控制器應會再次對應至孤立的副本。