使用 StatefulSet CSI 迁移工具

本文档介绍了如何使用 StatefulSet CSI 迁移工具将有状态工作负载从树内 vSphere 卷插件迁移到 GKE on VMware 中的 vSphere CSI 驱动程序。

概览

GKE on VMware 通过 VMware vSphere 存储、Kubernetes 树内卷插件(或“驱动程序”)和容器存储接口 (CSI) 驱动程序与外部块或文件存储系统集成。

在 1.15 中默认启用 Kubernetes CSI 迁移功能后,由树内 vSphere 卷插件支持的 PersistentVolume 将继续在仅限 CSI 的环境中运行。CSI 迁移功能会将树内插件操作调用重定向到 CSI 驱动程序。由于 PersistentVolume 规范不可变,因此它仍由树内插件提供支持。可用的功能集与树内卷插件相同。

卷扩展和卷快照等整套 CSI 功能不适用于此类卷。如需利用这些功能,必须通过重新创建由 vSphere CSI 驱动程序支持的 PersistentVolume 将有状态工作负载完全迁移到 CSI。您可以使用 CSI 迁移工具将有状态工作负载迁移到 CSI,并使用全套 CSI 功能。

该工具提供了一种将 StatefulSet 的 PersistentVolume 和 PersistentVolumeClaim 滚动迁移到 CSI 的方法,并且不涉及应用停机。此工具会在迁移前获取本地目录中的 Kubernetes 资源的备份,并将 ReclaimPolicy 设置为 Retain。因此不会丢失数据。

限制

  • 只有完全受支持的 GKE on VMware 版本才支持自动化工具。

  • 它仅适用于 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/v0.1/statefulset-csi-migration-tool 下载该工具。请注意,此工具目前为预览版。

过程

本部分介绍了将 StatefulSet 从树内 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 控制器应再次映射到孤立副本。