使用 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 vCP 预配工具 (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 控制器应再次映射到孤立的副本。