Skip to main content
NetApp virtualization solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

将虚拟机从 VMware ESXi 迁移到 Red Hat OpenShift Virtualization

贡献者 kevin-hoke netapp-nimo

使用 Shift Toolkit 将虚拟机从 VMware ESXi 迁移到 Red Hat OpenShift Virtualization,方法是准备虚拟机、转换磁盘格式和配置目标环境。

Shift Toolkit 能够通过目标环境中的磁盘格式转换和网络重新配置,实现虚拟化平台之间的虚拟机迁移。

开始之前

开始迁移之前,请确认满足以下先决条件。

红帽 OpenShift 虚拟化要求
  • 安装了以下运算符的 OpenShift 集群端点:

    • OpenShift虚拟化操作员

    • NetApp Trident CSI 驱动程序

    • 新墨西哥州立大学

  • NetApp Trident CSI 配置了适当的后端和存储类

  • 已配置正确的 VLAN 的 NodeNetworkConfigurationPolicy 和 NetworkAttachmentDefinitions (NAD)

  • OpenShift 集群可通过当前主机文件条目进行网络访问

  • 集群管理员级别权限

  • 已下载 Kubeconfig 文件

VMware 要求
  • VMDK 可以通过多种方式进行配置:所有 VMDK 都可以驻留在单个 NFSv3 卷上(无需存储 vMotion),每个 VMDK 都可以放置在自己的单个卷上,或者可以在卷内的 qtree 中组织多个 VMDK。

    备注 Shift Toolkit 会自动检测布局并选择适当的克隆方法和 NAS 存储驱动程序。
    备注 当 VMDK 放置在 qtree 中时,Shift Toolkit 使用 ONTAP-NAS-economy 驱动程序。
  • VMware 工具正在客户虚拟机上运行。

  • 待迁移的虚拟机处于运行状态,以便进行准备。

  • 必须先关闭虚拟机电源才能触发迁移

  • VMware Tools 的移除将在虚拟机启动后在目标虚拟机管理程序上进行。

Trident 技术诀窍和映射
  • ONTAP-NAS:所有 VMDK 都可以驻留在单个卷上,或者每个 VMDK 都可以驻留在其自己的单个卷上。虚拟机选择可以在数据存储级别或虚拟机级别进行。

  • ONTAP-NAS-Economy:VMDK 必须驻留在单个卷上,卷名必须遵守以下命名约定: trident_qtree_pool_<storage-prefix>_<10 random characters>。资源组中的 VM 选择仅在数据存储区级别。

    备注 对于 ONTAP-NAS-Economy,具有上述命名约定的卷必须预先存在,并且必须用作 VMware vCenter 上的数据存储。这意味着虚拟机应通过 Storage vMotioned 迁移到此特定数据存储区,或者应重命名现有数据存储区以匹配命名约定: trident_qtree_pool_<storage-prefix>_<10 random characters>
    备注 对于 ONTAP-NAS-Economy,Trident 后端配置 (TBC) 应将参数 Deny New Volume Pools`设置为 `true。所使用的存储类还应将 storagePools 限制为 tbc name: <aggr name where the trident_qtree_pool_<storage-prefix>_<10 random characters> resides>
    ONTAP-NAS-Economy 驱动程序的 TBC 配置示例
    apiVersion: v1
    kind: Secret
    metadata:
    	name: nas-eco-data-1172-secret
    	namespace: trident
    type: Opaque
    stringData:
    	username: <svm-admin-username>
    	password: <svm-admin-password>
    ---
    apiVersion: trident.netapp.io/v1
    kind: TridentBackendConfig
    metadata:
    	name: nas-eco-data-1172
    	namespace: trident
    spec:
    	backendName: nas-eco-data-1172
    	credentials:
    		name: nas-eco-data-1172-secret
    	dataLIF: "192.168.1.100"
    	denyNewVolumePools: "False"
    	managementLIF: "192.168.1.50"
    	storageDriverName: ontap-nas-economy
    	svm: data_1172
    	version: 1
    备注 参数 denyNewVolumePools 应在作为初始 PVC 创建的一部分创建 trident_qtree_pool_<storage-prefix>_<10 random characters> 之后立即设置为 true。将此值设置为 true 可确保 Trident 使用现有的 qtree 池来放置基于 qtree 的 PVC。

    可以使用以下命令修补 TBC:

    oc patch tbc nas-eco-data-1172 -n trident --type=merge -p '{"spec":{"denyNewVolumePools":"true"}}'
    存储类的 YAML 示例
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    	name: nas-eco-data-1172
    	annotations:
    		storageclass.kubernetes.io/is-default-class: "true"
    provisioner: csi.trident.netapp.io
    parameters:
    	backendType: ontap-nas-economy
    	fsType: nfs
    	storagePools: "nas-eco-data-1172:NSOL_NetApp_C800_T18U13_02_SSD_CAP_1"
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
  • ONTAP-SAN:应使用 Storage vMotion 将 VMDK 放置在单个卷上(将 VMDK 模拟到 PVC/PV 构造)。虚拟机选择处于虚拟机级别。

  • ONTAP-SAN-Economy:VMDK 必须驻留在单个 NFSv3 卷上,卷名必须遵守以下命名约定: trident_lun_。资源组中的 VM 选择仅在数据存储区级别。

    备注 对于 ONTAP-SAN-Economy,具有命名约定 trident_lun_`的卷必须预先存在,并且必须用作 VMware vCenter 上的数据存储。这意味着虚拟机应通过 Storage vMotioned 迁移到此特定数据存储,或者应重命名现有数据存储以匹配命名约定 `trident_lun_
    ONTAP-SAN-Economy 的 TBC 配置示例
    apiVersion: v1
    kind: Secret
    metadata:
    	name: ontap-san800-eco-secret
    	namespace: trident
    type: Opaque
    stringData:
    	username: <svm-admin-username>
    	password: <svm-admin-password>
    ---
    apiVersion: trident.netapp.io/v1
    kind: TridentBackendConfig
    metadata:
    	name: ontap-san800-eco
    	namespace: trident
    spec:
    	backendName: ontap-san800-eco
    	aggregate: NSOL_NetApp_C800_T18U13_01_SSD_CAP_1
    	credentials:
    		name: ontap-san800-eco-secret
    	dataLIF: "192.168.1.110"
    	defaults:
    		protocol: iSCSI
    		snapshotPolicy: none
    		spaceAllocate: "true"
    		spaceReserve: none
    		tieringPolicy: none
    	managementLIF: "192.168.1.60"
    	storage:
    		- labels:
    			backend: san800-eco
    	storageDriverName: ontap-san-economy
    	svm: data_1172
    	version: 1
    ONTAP-SAN-Economy 的示例存储类配置
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    	name: sc-ontap-san-eco
    provisioner: csi.trident.netapp.io
    parameters:
    	backendType: ontap-san-economy
    	selector: "backend=san800-eco"
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    备注 对于 ONTAP-SAN 和 ONTAP-SAN-Economy,应先将虚拟机从任何基于块的数据存储通过存储 vMotioned 迁移到 ONTAP NFSv3 卷。然后,Shift Toolkit 会将 VMDK 转换为 LUN,并将其作为 PVC 导入到相应的命名空间。

资源组的虚拟机选择可以是虚拟机级别的,也可以是数据存储级别的。根据所选内容,工作流将选择适当的 ONTAP NAS 或 SAN 存储驱动程序。例如,如果选择了单个 VM,则使用 ONTAP-NAS 驱动程序。如果多个 VMDK 驻留在同一个卷上,则会根据源卷及其 SVM 以及在 OpenShift 端配置的 TBC 和存储类使用 ONTAP-NAS 或 ONTAP-NAS-Economy 驱动程序。

客户机虚拟机要求
  • 对于 Windows 虚拟机:使用本地管理员凭据

  • 对于 Linux 虚拟机:使用具有执行 sudo 命令而无需密码提示权限的用户

  • 对于 Windows 虚拟机:将 VirtIO ISO 挂载到虚拟机(从 [此处应填写下载链接] 下载)。"此处"

    备注 准备脚本使用 .msi 包来安装驱动程序和 qemu-guest-agents。

步骤 1:添加目标站点(OpenShift)

将目标 OpenShift 虚拟化环境添加到 Shift 工具包中。

步骤
  1. 点击“添加新站点”,然后选择“目标位置”。

    显示示例
    选择目的地
  2. 请输入目的地站点详细信息:

    • 网站名称:请为网站提供一个名称。

    • 虚拟机管理程序:选择 OpenShift

    • 站点位置:选择默认选项

    • 连接器:选择默认选项

  3. 单击“继续”。

    显示示例
    目的地详情
  4. 请输入 OpenShift 详细信息:

    • 端点:OpenShift 集群端点的完全限定域名(例如,api.demomigsno.demoval.com)

    • 上传 kubeconfig 文件:使用权限最小的 kubeconfig 文件。

      备注 文件扩展名必须为yaml。
    显示示例
    目标 OpenShift 详情
  5. 单击“创建站点”。

    显示示例
    创建目标 OpenShift
    备注 源卷和目标卷将相同,因为磁盘格式转换是在同一卷内的卷级别进行的。

步骤 2:创建资源组

将虚拟机组织成资源组,以保留启动顺序和启动延迟配置。

开始之前

确保将 VM VMDK 迁移到新创建的ONTAP SVM 上的各个数据存储卷。

步骤
  1. 导航至“资源组”,然后单击“创建新资源组”。

  2. 从下拉菜单中选择源站点,然后单击“创建”。

  3. 提供资源组详细信息并选择工作流程:

    • 基于克隆的迁移:执行从源虚拟机到目标虚拟机的端到端迁移

    • 基于克隆的转换:将磁盘格式转换为选定的虚拟机管理程序类型

  4. 单击“继续”。

  5. 使用搜索选项选择虚拟机。

    备注 资源组的虚拟机选择是基于虚拟机本身,而不是数据存储级别。
    显示示例
    与虚拟机关联的数据存储
    显示示例
    VM 数据存储详情
  6. 更新迁移详情:

    • 选择*目标站点*

    • 选择*目标 OpenShift 条目*

    • 选择存储等级

      显示示例
      迁移详情
      备注 如果只有一个 TBC, Trident后端将自动映射到源卷;但是,如果有多个 TBC,则可以选择后端。
  7. 配置所有选定虚拟机的启动顺序和启动延迟:

    • 1:第一个启动的虚拟机

    • 3:默认值

    • 5:最后一个启动的虚拟机

  8. 单击“创建资源组”。

    显示示例
    迁移详情配置
结果

资源组已创建,可以进行蓝图配置。

步骤 3:创建迁移蓝图

创建迁移计划蓝图,包括平台映射、网络配置和虚拟机设置。

步骤
  1. 导航至“蓝图”并单击“创建新蓝图”。

  2. 为蓝图命名并配置主机映射:

    • 选择“源站点”和关联的 vCenter

    • 选择*目标站点*和关联的 OpenShift 目标

    • 配置集群和主机映射

      显示示例
      蓝图详情
  3. 选择资源组详细信息,然后单击“继续”。

  4. 如果存在多个资源组,请设置资源组的执行顺序。

  5. 配置网络映射到相应的逻辑网络。

    备注 OpenShift 集群中应该已经配置了网络连接定义,并设置了相应的 VLAN 和 trunk 选项。对于测试迁移,请选择“不配置网络”以避免生产网络冲突;转换后手动分配网络设置。
    显示示例
    网络映射
  6. 查看存储类别和后端映射(根据虚拟机选择自动选择)。

    备注 确保事先将 VMDK 文件迁移到各个卷,以便可以从 PVC 创建虚拟机并启动虚拟机。
  7. 在虚拟机详细信息下,选择配置详细信息,并为每种操作系统类型提供服务帐户凭据:

    • Windows系统:使用具有本地管理员权限的用户(也可以使用域凭据)

    • Linux:使用可以无需密码提示即可执行 sudo 命令的用户

      显示示例
      配置选择
      备注 配置选择允许您选择磁盘映像格式、跳过覆盖 prepareVM,以及选择是否将卷从父卷拆分。默认情况下,分割克隆功能已禁用,工作流程默认使用 RAW 格式。
  8. 配置IP设置:

    • 无需配置:默认选项

    • 保留 IP 地址:保持与源系统相同的 IP 地址

    • DHCP:为目标虚拟机分配 DHCP 权限

      在 prepareVM 阶段,确保虚拟机已启动并安装了 VMware Tools。

  9. 配置虚拟机设置:

    • 调整 CPU/RAM 参数(可选)

    • 修改启动顺序和启动延迟

    • 开启电源:选择在迁移后开启虚拟机电源(默认:开启)

    • 移除 VMware Tools:转换后移除 VMware Tools(默认:已选中)

    • 虚拟机固件:BIOS > BIOS 和 EFI > EFI(自动)

    • 保留 MAC 地址:出于许可要求,请保留 MAC 地址。

      备注 如果需要在保留 MAC 地址的同时保留接口名称,请确保在源 VM 上创建适当的 udev 规则。
    • 服务帐户覆盖:如有需要,请指定单独的服务帐户

  10. 单击“继续”。

  11. (可选)选择日期和时间安排迁移。

    备注 至少提前 30 分钟安排迁移,以便留出时间准备虚拟机。
  12. 点击“创建蓝图”。

结果

Shift Toolkit 会启动 prepareVM 作业,该作业会在源虚拟机上运行脚本,为迁移做好准备。

显示示例
已准备好迁移的虚拟机

准备过程:

  • 注入脚本以更新 VirtIO 驱动程序、安装 qemu-agent、移除 VMware Tools、备份 IP 详细信息并更新 fstab 文件。

  • 使用 PowerCLI 连接到客户虚拟机(Linux 或 Windows)并更新 VirtIO 驱动程序

  • 对于 Windows 虚拟机:将脚本存储在 C:\NetApp

  • 对于 Linux 虚拟机:将脚本存储在 /NetApp`和 `/opt

备注 对于任何受支持的虚拟机操作系统,Shift Toolkit 会在磁盘转换之前自动安装必要的 VirtIO 驱动程序,以确保转换后成功启动。

当 prepareVM 成功完成时,蓝图状态将更新为“PrepareVM 完成”。迁移将按计划时间进行,或者也可以点击“迁移”选项手动启动。

显示示例
PrepareVM 完成状态
显示示例
迁移蓝图已准备就绪

步骤 4:执行迁移

触发迁移工作流,将虚拟机从 VMware ESXi 转换为 OpenShift Virtualization。

开始之前

所有虚拟机均按照计划的维护时间表正常关机。

步骤
  1. 在蓝图上,单击“迁移”。

    显示示例
    迁移步骤
  2. Shift Toolkit 执行以下步骤:

    • 删除蓝图中所有虚拟机的现有快照

    • 触发源虚拟机快照

    • 在磁盘转换之前触发卷快照

    • 克隆各个卷

    • 将每个 VMDK 的 VMDK 格式转换为 RAW 格式

      Shift Toolkit 会自动查找与每个虚拟机关联的所有 VMDK,包括主启动磁盘。

备注 如果存在多个 VMDK 文件,每个 VMDK 都将根据所使用的存储驱动程序进行转换并放入其自己的 PVC 中。
  • 清理卷,使其仅保留 disk.img 文件

    将虚拟机磁盘映像转换为 RAW 格式后,Shift Toolkit 会清理卷,将原始文件重命名为 disk.img,并分配必要的权限。

  • 使用Trident导入功能以 PVC 格式导入销量。

    然后使用NetApp Trident API 将卷作为 PVC 导入。

  • 使用虚拟机特定的 YAML 文件创建虚拟机

    PVC 导入完毕且 PV 就位后,Shift Toolkit 使用 OC CLI 根据操作系统使用 yaml 文件创建每个虚拟机。

备注 虚拟机在“默认”命名空间下创建。
  • 在目标位置启动虚拟机

    根据虚拟机操作系统,Shift Toolkit 会自动分配虚拟机启动选项以及存储控制器接口。对于 Linux 发行版,使用 VirtIO 或 VirtIO SCSI。对于 Windows 系统,虚拟机启动时使用 SATA 接口,然后计划脚本会自动安装 VirtIO 驱动程序并将接口更改为 VirtIO。

  • 在每个虚拟机上注册网络

    网络是根据蓝图选择进行分配的。

  • 使用 cron 作业移除 VMware Tools 并分配 IP 地址

显示示例
Red Hat OpenShift 虚拟机迁移
备注 作业完成后,可以对照蓝图执行验证选项。有关详细信息,请参阅 验证迁移

将 Migration Toolkit for Virtualization 与 Shift Toolkit 结合使用(脚本化方法)

本节介绍如何使用NetApp Shift Toolkit 和 Migration Toolkit for Virtualization (MTV) 实现向 Red Hat OpenShift Virtualization 的无缝迁移。

开始之前

确保满足以下先决条件:

  • 已安装 OpenShift Virtualization Operator 和NetApp Trident CSI 驱动程序的 OpenShift 集群

  • MTV 2.9.4(包含转换模式)

  • "Shift 工具包"已安装

    备注 由于仅使用 Shift Toolkit API,因此无需配置 Shift Toolkit 资源组或蓝图。
  • 在 OpenShift 集群上拥有管理员级别权限

  • 安装了 OC 命令行工具的 Linux 实例

    • 已导出 Kubeconfig 或执行 OC 登录以连接到集群

    • 从 Shift Toolkit UI 下载名为 "Shift-VM-to-OpenShift-MTV" 的脚本(Settings > Developer Access > Script Blocker

    • 解压缩文件: unzip Shift-VM-to-OpenShift-MTV.zip

    • 请确保已安装 Python3: dnf install python3

    • 安装 OpenJDK 8 或更高版本: yum install java-1.8.0-openjdk

    • 安装要求: pip install -r requirements.txt

  • MTV 的虚拟机要求:VMDK 可以以不同的方式组织:它们可以全部放置在单个卷中(无需存储 vMotion),单独分配给单独的卷,或者在 NFS 卷内的 qtree 中组合在一起。该脚本会自动检测布局,并根据 TBC UUID 选择适当的克隆方法和 NAS 存储驱动程序。

步骤
  1. 使用 MTV 创建迁移计划。

    为了利用快速 VMDK 转换,请为虚拟机创建迁移计划,并确保 YAML 文件中包含以下参数:

    • targetNamespace: default

    • type: conversion

    • storage: {}

      备注 应事先制定计划,以确保 MTV 配置的 IP 设置得到保留。
  2. 将 vCenter 中的虚拟机和ONTAP存储上的卷进行映射。

    使用脚本创建必要的 PVC 并将其导入到 OpenShift 集群。 PVC必须带有以下标签和注释:

    标签:

    • PVC 中的 vmID 和 vmUUID(叉车会查找这些值)

      注解:

    • vmdk 磁盘名称 forklift.konveyor.io/disk-source

      该脚本确保为每个PVC设置这些属性,并更新disk.img的权限:

    • "owner": { "id": 107 }

    • "group": { "id": 107 }

    • "mode": "0655"

  3. 请使用以下详细信息更新 JSON 文件:

    • * ONTAP集群*:可以是 SVM;可以使用 vsadmin。如果克隆卷不需要立即分离,请将 splitclone 设置为“False”。

    • vCenter:发现虚拟机及其关联 VMDK 文件的最低 RBAC 权限

    • * Trident存储类*:应为 NFS 后端,且 YAML 文件中版本信息正确。

    • OpenShift:指定项目名称(默认值仅用作示例)

      备注 其余值保持默认值。
  4. 满足先决条件后,执行 `python3 main.py`创建 PVC 并将其导入到 OpenShift 集群。

  5. PVC 导入后,使用 MTV 触发迁移,以创建具有相应规范的 VM。

    显示示例
    Python脚本执行
    显示示例
    Shift Toolkit 中的结果
  6. 使用 MTV 转换 VMDK。

    该脚本会自动查找与每个虚拟机关联的所有 VMDK,包括主启动磁盘。

    备注 如果存在多个 VMDK 文件,则每个 VMDK 文件都会被转换。
  7. 上传 RAW 镜像到 OpenShift 虚拟化平台。

    该脚本使用Trident CSI 将卷作为 PVC 导入到集群中。 PVC yaml 文件中填充了标签和注释。

  8. 创建带有 MTV 的虚拟机。

    导入完成后,调用 MTV 计划开始迁移。 UI 显示为“冷”,但根据转换的 yaml 规范,MTV 会检查每个 PVC 和 vmID/vmUUID,映射它们,并初始化迁移。

    显示示例
    迁移状态
    备注 虚拟机是在“默认”虚拟机项目下创建的,但可以在 MTV 迁移计划 YAML 中修改此设置。
  9. 首次使用 MTV 启动 VM。

    根据虚拟机操作系统,MTV 会自动分配虚拟机启动选项以及存储控制器接口。

    显示示例
    移民史

    迁移在 6 分钟内完成,虚拟机拥有 1.5TB 数据磁盘(分布在 3 个 PVC 上)。这展示了一种使用ONTAP存储重新安置虚拟机的精简、低影响方法。

    可以使用配置文件或通过指定参数来执行脚本。下面显示了使用参数执行脚本的示例:

    备注 该脚本还支持跨 SVM 克隆,使其能够根据提供的输入参数跨不同的 SVM 创建 PVC。
    python3 main.py --mode params --ontap-server 10.192.102.56 --ontap-username admin --ontap-password 'correct password' --ontap-source-vserver manila --ontap-target-vserver manila --ontap-data-lif 10.63.172.249 --ontap-skip-ssl --vcenter-server 10.63.172.125 --vcenter-username administrator@demoenv.com --vcenter-password 'correct password' --vcenter-skip-ssl --shift-server 10.61.187.117 --shift-username admin --shift-password 'correct password' --trident-backend-name tbc-ontap-manila-nimo --trident-backend-uuid 778245f4-1f50-453c-b81c-3dd82e166bbc --trident-storage-class nimmanila --mtv-project openshift-mtv --mtv-plan casetst --ocp-server https://api.demomigsno.demoval.com:6443 --ocp-token sha256~co89ATebn-ktVyrMbNJUGByVWph_kjLamYtIOPmqfQM --ocp-project default --import-volume --execution-mode clone_shrink --snapshot-prefix ""

    迁移完成后,需要分离克隆卷。使用的方法取决于 ONTAP 版本:ONTAP 9.17.1 及更高版本使用 clone split,早期版本使用 vol move。提供的 ZIP 包中的"Post migrate"文件夹内提供了用于启动分离过程的脚本。

视频演示

以下视频演示了本解决方案中概述的流程。

从 ESX 到 Red Hat OpenShift Virtualization (OSV) 的零接触迁移