使用基于存储政策的管理功能进行存储迁移

本文档介绍如何使用基于存储政策的管理 (SPBM) 将磁盘从一个 vSphere 数据存储区迁移到另一个 vSphere 数据存储区。

1.29:已全面推出
1.28:预览版
1.16:未提供

您可以迁移以下类型的存储服务:

  • 用于存储由 Google Distributed Cloud 管理的系统组件,包括:

    • 管理员集群和控制平面 V2 用户集群的控制平面节点使用的数据磁盘(VMDK 文件)

    • 所有管理员集群和用户集群节点使用的启动磁盘(VMDK 文件)

    • 由管理员集群中的 PV/PVC 表示的 vSphere 卷,供 kubeception 用户集群的控制平面组件使用

  • 用于在用户集群工作器节点上部署工作负载的存储空间,这些工作负载具有由树内 vSphere 卷插件或 vSphere CSI 驱动程序预配的 PV/PVC

管理员集群的前提条件

  1. 管理员集群必须具有高可用性控制平面。如果管理员集群具有非高可用性控制平面,请迁移到高可用性,然后再继续操作。

  2. 验证管理员集群是否具有高可用性控制平面:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes
    

    ADMIN_CLUSTER_KUBECONFIG 替换为管理员集群 kubeconfig 文件的路径。

    在输出中,确保您看到三个控制平面节点。例如:

    admin-cp-1   Ready    control-plane,master ...
    admin-cp-2   Ready    control-plane,master ...
    admin-cp-3   Ready    control-plane,master ...
    

所有集群(管理员和用户)的前提条件

  1. 集群必须停用节点自动修复功能。如果启用了节点自动修复功能,请停用节点自动修复功能

  2. 集群必须使用基于存储政策的管理 (SPBM)。如果您的集群未使用 SPBM,请先创建存储政策,然后再继续。

  3. 验证集群是否使用 SPBM:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get onpremadmincluster --namespace kube-system \
      -ojson | jq '{datastore: .items[0].spec.vCenter.datastore, storagePolicyName: .items[0].spec.vCenter.storagePolicyName}'
    

    (仅限用户集群)验证节点池是否使用 SPBM:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get onpremnodepools --namespace USER_CLUSTER_NAME-gke-onprem-mgmt \
      -ojson | jq '.items[] | {name: .metadata.name, datastore: .spec.vsphere.datastore, storagePolicyName: .spec.vsphere.storagePolicyName}'
    

    请替换以下内容:

    • CLUSTER_KUBECONFIG:集群 kubeconfig 文件的路径(管理员或用户)。

    • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

    • USER_CLUSTER_NAME:用户集群的名称

    在输出中,如果 datastore 字段为空且 storagePolicyName 字段不为空,则表示集群正在使用 SPBM。

  4. 集群不得使用 vSphere 树内卷插件。

    如果您的集群是从旧版 Google Distributed Cloud 升级的,则它可能具有由 vSphere 树内卷插件预配的 PV/PVC。这种卷可能正由 kubeception 用户集群的控制平面节点使用,也可能由您在工作器节点上创建的工作负载使用。

    列出所有 PVC 及其 StorageClass:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc --all-namespaces  \
       -ojson | jq '.items[] | {namespace: .metadata.namespace, name: .metadata.name, storageClassName: .spec.storageClassName}'
    

    列出所有 StorageClass 并查看它们正在使用的预配工具:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get storageclass
    

    在输出中,如果 PROVISIONER 列为 kubernetes.io/vsphere-volume,则表示使用此 StorageClass 创建的 PVC 使用的是 vSphere 树内卷插件。对于使用这些 PV/PVC 的 StatefulSet,请将其迁移到 vSphere CSI 驱动程序

执行存储迁移

Google Distributed Cloud 支持两类存储迁移:

  • 虚拟机的 Storage vMotion,用于移动虚拟机存储空间,包括在节点上运行的 Pod 使用的挂接 vSphere CNS 卷,以及挂接到节点的这些虚拟机 CNS 卷使用的 VMDK

  • CNS 卷重定位,这会将指定的 vSphere CNS 卷移动到兼容的数据存储区,而无需对虚拟机执行存储 vMotion

为虚拟机执行 Storage vMotion

迁移涉及您在 vSphere 环境中执行的步骤以及在管理员工作站上运行的命令:

  1. 在 vSphere 环境中,将目标数据存储区添加到存储政策中。

  2. 在您的 vSphere 环境中,将使用旧数据存储区的集群虚拟机迁移到新数据存储区。有关说明,请参阅将虚拟机迁移到新的计算资源和存储

  3. 在管理员工作站上,验证虚拟机是否已成功迁移到新的数据存储区。

    获取集群中的 Machine 对象:

    kubectl --kubeconfig CLUSTER_KUBECONFIG get machines --output yaml

    在输出的 status.disks 下,您可以看到挂接到虚拟机的磁盘。例如:

    status:
    addresses:
    – address: 172.16.20.2
      type: ExternalIP
    disks:
    – bootdisk: true
      datastore: pf-ds06
      filepath: me-xvz2ccv28bf9wdbx-2/me-xvz2ccv28bf9wdbx-2.vmdk
      uuid: 6000C29d-8edb-e742-babc-9c124013ba54
    – datastore: pf-ds06
      filepath: anthos/gke-admin-nc4rk/me/ci-bluecwang-head-2-data.vmdk
      uuid: 6000C29e-cb12-8ffd-1aed-27f0438bb9d9
    

    验证集群中所有机器的所有磁盘是否均已迁移到目标数据存储区。

  4. 在管理员工作站上,运行 gkectl diagnose 以验证集群是否正常运行。

调用 CNS Relocation API 以移动 CNS 卷

如果您只想移动由 vSphere CSI 驱动程序预配的 CNS 卷,可以按照在 vSphere 中迁移容器卷中的说明操作。如果旧数据存储区中只有 CNS 卷,可能会更简单。

根据需要更新存储空间政策

在您的 vSphere 环境中,更新存储政策以排除旧数据存储区。否则,新卷和重新创建的虚拟机可能会被分配给旧数据存储区。