本文档介绍如何使用 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 的目录名称必须是唯一的。此目录应为空或不存在。 最好不要创建此目录,以便工具为您创建目录。
此命令会执行以下任务:
备份本地工作目录中的 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 控制器应再次映射到孤立副本。