使用 StatefulSet CSI 遷移工具

本文說明如何使用 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 的目錄名稱不得重複。這個目錄應為空白或不存在。 最好不要建立這個目錄,讓工具為您建立。

這項指令會執行下列工作:

  1. 在本地工作目錄中備份 StatefulSet 及其依附元件,例如 PersistentVolume、PersistentVolumeClaim 和 Pod 副本規格。

  2. 使用孤立刪除政策刪除 StatefulSet。這個步驟只會刪除 StatefulSet,但不會刪除 Pod 副本、PersistentVolume 和 PersistentVolumeClaim 等依附元件。

  3. 將每個 Pod 遷移至 CSI 驅動程式 (與選項 1 類似),並執行下列操作:

    a. 將 PersistentVolume 的 ReclaimPolicy 欄位設為 Retain。

    b. 刪除 Pod、PersistentVolume 和 PersistentVolumeClaim。

    c. 將現有 VMDK 轉換為 FCD。

    d. 再次建立 PersistentVolume、PersistentVolumeClaim 和 Pod。

  4. 重新建立 StatefulSet,但規格中的 PVCTemplate 欄位會指向 CSI StorageClass。StatefulSet 控制器應會再次對應至孤立的副本。