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