使用 StatefulSet CSI 迁移工具

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

概览

Google Distributed Cloud 通过 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。因此,数据不会丢失

限制

  • 自动化工具仅受完全支持的 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/v0.1/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 控制器应再次映射到孤立副本。