使用基于存储空间政策的管理进行存储空间迁移

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

1.29:正式版
1.28:预览版
1.16:不可用

您可以迁移以下类型的存储空间:

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

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

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

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

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

管理员集群的前提条件

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

  2. 验证管理员集群是否具有 HA 控制平面:

    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 卷重定位,用于在不为虚拟机执行 Storage vMotion 的情况下将指定的 vSphere CNS 卷迁移到兼容的数据存储区

为虚拟机执行 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 重定位 API 以迁移 CNS 卷

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

如有必要更新存储政策

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