12.2. 从 VMware vSphere 源供应商迁移
您可以使用命令行界面(CLI)从 VMware vSphere 源供应商迁移。
防病毒软件可能会导致迁移失败。在开始迁移前,强烈建议从源虚拟机中删除这些软件。
MTV 不支持迁移 VMware Non-Volatile Memory Express (NVMe)磁盘。
要迁移具有共享磁盘的虚拟机(VM),请参阅使用 共享磁盘迁移虚拟机。
流程
- 为源供应商凭证创建 - Secret清单:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- ownerReferences部分是可选的。
- 2
- 指定 vCenter 用户或 ESX/ESXi 用户。
- 3
- 指定 vCenter 用户或 ESX/ESXi 用户的密码。
- 4
- 指定"true"以跳过证书验证,并指定"false"来验证证书。如果没有指定,则默认为 "false"。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
- 5
- 如果没有设置此字段并禁用 跳过证书验证 时,MTV 会尝试使用系统 CA。
- 6
- 指定 vCenter 的 API 端点 URL 或 ESX/ESXi,例如https://<vCenter_host>/sdk。
 
- 为源供应商创建 - Provider清单:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 - 主机清单:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 指定 VMware vSphereProviderCR 的名称。
- 2
- 指定 VMware vSphere 主机的 Managed Object Reference (moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef。
- 3
- 指定 VMware vSphere 迁移网络的 IP 地址。
 
- 创建 - NetworkMap清单来映射源和目标网络:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 允许的值有pod、multus,并忽略。使用忽略以避免在此迁移中将虚拟机附加到这个网络。
- 2
- 您可以使用id或name参数来指定源网络。对于id,指定 VMware vSphere 网络受管对象参考(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef。
- 3
- 为每个额外 OpenShift Virtualization 网络指定网络附加定义。
- 4
- 仅在类型multus时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
 
- 创建 - StorageMap清单来映射源和目标存储:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 允许的值有ReadWriteOnce和ReadWriteMany。
- 2
- 指定 VMware vSphere 数据存储 moRef。例如,f2737930-b567-451a-9ceb-2887f6207009。要检索 moRef,请参阅 检索 VMware vSphere moRef。
 
- 可选:在 - PlanCR 中指定的阶段创建一个- Hook清单以在虚拟机中运行自定义代码:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 您可以使用默认 - hook-runner镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
- 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。 - 您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。 - 配置 IP 地址可让接口访问配置的网关。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为迁移创建 - Plan清单:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 指定PlanCR 的名称。
- 2
- 指定迁移是 warm -true- 或 cold -false。如果您指定了 warm 迁移,且没有为Migration清单中的cutover参数指定一个值,则只有 precopy 阶段将运行。
- 3
- 每个计划仅指定一个网络映射和一个存储映射。
- 4
- 指定一个网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
- 5
- 指定NetworkMapCR 的名称。
- 6
- 指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
- 7
- 指定StorageMapCR 的名称。
- 8
- 默认情况下,虚拟网络接口控制器(vNIC)在迁移过程中会改变。因此,使用链接到客户端虚拟机中接口名称的静态 IP 地址的 vNIC 会丢失其 IP 地址。要避免这种情况,请将preserveStaticIPs设置为true。MTV 对缺少 vNIC 属性的任何虚拟机发出警告消息。要检索任何缺少的 vNIC 属性,请在 vSphere 中运行这些虚拟机,以便向 MTV 报告 vNIC 属性。
- 9
- 可选。在计划中为虚拟机指定网络接口模板。模板遵循 Go 模板语法,并可访问以下变量:- 
										.networkName:如果目标网络是multus,请添加 Multus 网络附加定义的名称。否则,将此变量留空。
- 
										.networkNamespace:如果目标网络是multus,请添加 Multus 网络附加定义所在的命名空间。
- 
										.networkType:指定网络类型。选项:multus或pod。
- .NetworkIndex:网络接口的序列索引(0-based)。- 例子 
- 
										"net-{{.NetworkIndex}}"
- {{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"- 变量名称不能超过 63 个字符。此规则适用于网络名称网络模板、PVC 名称模板、虚拟机名称模板和卷名称模板。 
 
- 
										
- 10
- 可选。为计划指定持久性卷声明(PVC)名称模板。模板遵循 Go 模板语法,并可访问以下变量:- 
										.vmname: 虚拟机的名称。
- 
										.PlanName: 迁移计划的名称。
- 
										.DiskIndex:磁盘的初始卷索引。
- 
										.RootDiskIndex:根磁盘索引。
- .shared : Options:- true,用于非共享卷的共享卷为- false。- 例子 
- 
										"{{.vmname}}-disk-{{.DiskIndex}}"
- 
										"{{if eq .DiskIndex .RootDiskIndex}}root{{else}}data{{end}}-{{.DiskIndex}}"
- 
										"{{if .Shared}}shared-{{end}}{{.VmName}}-{{.DiskIndex}}"
 
- 
										
- 11
- 可选:- 
										当设置为 true时,MTV 会将一个或多个随机生成的字母数字字符添加到 PVC 名称中,以确保所有 PVC 都有唯一的名称。
- 当设置为 - false时,如果您指定了- pvcNameTemplate,则 MTV 不会将此类字符添加到 PVC 的名称中。警告- 如果将 - pvcNameTemplateUseGenerateName设置为- false,则生成的 PVC 名称可能不是唯一的,并可能导致冲突。
 
- 
										当设置为 
- 12
- 确定在使用virt-v2v工具迁移前是否转换虚拟机,从而使虚拟机与 OpenShift Virtualization 兼容。- 
										当设置为 false时,默认值 MTV 使用virt-v2v迁移虚拟机。
- 当设置为 - true时,MTV 使用原始复制模式迁移虚拟机,该模式可在不首先转换虚拟机的情况下复制它们。- 原始复制模式可在不使用 - virt-v2v转换虚拟机的情况下复制虚拟机。这可以加快转换速度,迁移运行更广泛的操作系统的虚拟机,并支持使用 Linux Unified Key Setup (LUKS)加密的磁盘,而无需密钥。但是,使用原始复制模式迁移的虚拟机在 OpenShift Virtualization 中可能无法正常工作。有关- virt-v2v的更多信息,请参阅 MTV 如何使用 virt-v2v 工具。
 
- 
										当设置为 
- 13
- 确定当skipGuestConversion为true时,迁移是否使用 VirtIO 设备或兼容性设备(SATA 总线、E1000E NIC),即原始副本模式用于迁移时。当skipGuestConversion为false时,useCompatibilityMode的设置无效,因为virt-v2v转换始终使用 VirtIO 设备。- 
										当设置为 true时,SPM 使用迁移过程中的兼容性设备(SATA 总线、E1000E NIC),以确保虚拟机在迁移后可以引导。
- 
										当设置为 false时,MTV 在迁移过程中使用高性能 VirtIO 设备,virt-v2v则确保虚拟机可在迁移后引导。在使用这个选项前,请验证源虚拟机中已安装了 VirtIO 驱动程序。
 
- 
										当设置为 
- 14
- 可选:在计划中为虚拟机指定卷接口名称模板。模板遵循 Go 模板语法,并可访问以下变量:- 
										.PVCName: 使用这个卷挂载到虚拟机的 PVC 名称。
- .VolumeIndex:卷接口(0)的 Sequential 索引。- 例子 
- 
										"disk-{{.VolumeIndex}}"
- 
										"pvc-{{.PVCName}}"
 
- 
										
- 15
- 您可以使用id或name参数指定源虚拟机。
- 16
- 指定 VMware vSphere VM moRef。要检索 moRef,请参阅 检索 VMware vSphere moRef。
- 17
- 可选:指定特定虚拟机的网络接口名称。覆盖spec:networkNameTemplate中设置的值。变量和示例,如调用 9 所示。
- 18
- 可选:指定特定虚拟机的 PVC 名称。覆盖spec:pvcNameTemplate中设置的值。变量和示例如调用 10 所示。
- 19
- 可选:指定特定虚拟机的卷名称。覆盖spec:volumeNameTemplate中设置的值。变量和示例,如调用 14 所示。
- 20
- 可选: MTV 会自动为目标虚拟机的名称。您可以使用此参数并输入新名称来覆盖此名称。您输入的名称必须是唯一的,且它必须是有效的 Kubernetes 子域。否则,迁移会自动失败。
- 21
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 22
- 指定HookCR 的名称。
- 23
- 在迁移完成后,允许的值是PreHook,然后迁移计划启动或PostHook。重要当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。 
 
- 创建运行 - PlanCR 的- Migration清单:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 - 2024-04-04T01:23:45.678+09:00。
					forklift-controller 存在一个无法协调迁移计划的问题,然后返回一个 HTTP 500 错误。当您只在虚拟机上指定用户权限时,会导致此问题。
				
在 MTV 中,您需要在数据中心级别添加权限,其中包括虚拟机使用的存储、网络、交换机等。然后您必须将权限传播到子元素。
如果您不想添加这个级别的权限,您必须手动将权限添加到虚拟机主机上的每个对象。
12.2.1. 检索 VMware vSphere moRef
当您使用命令行使用 Migration Toolkit for Virtualization (MTV)迁移带有 VMware vSphere 源供应商的虚拟机时,您需要了解 vSphere 中特定实体的受管对象引用(moRef),如数据存储、网络和虚拟机。
您可以从 Inventory 服务检索一个或多个 vSphere 实体的 moRef。然后,您可以使用每个 moRef 作为检索另一个实体的 moRef 的参考。
流程
- 为项目检索路由: - oc get route -n openshift-mtv - oc get route -n openshift-mtv- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检索 - Inventory服务路由:- oc get route <inventory_service> -n openshift-mtv - $ oc get route <inventory_service> -n openshift-mtv- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检索访问令牌: - TOKEN=$(oc whoami -t) - $ TOKEN=$(oc whoami -t)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检索 VMware vSphere 供应商的 moRef : - curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k - $ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检索 VMware vSphere 源供应商的数据存储: - curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k - $ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
					在本例中,数据存储 v2v_general_porpuse_ISCSI_DC 的 moRef 是 datastore-11,而数据存储 f01-h27-640-SSD_2 的 moRef 是 datastore-730。
				
12.2.3. 使用命令行界面取消迁移
您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。
12.2.3.1. 使用命令行界面取消整个迁移
您可以使用命令行界面(CLI)在迁移过程中取消整个迁移。
流程
- 删除 - MigrationCR:- oc delete migration <migration> -n <namespace> - $ oc delete migration <migration> -n <namespace>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 指定MigrationCR 的名称。
 
12.2.3.2. 使用命令行界面取消特定虚拟机的迁移
您可以使用命令行界面(CLI)在迁移过程中取消特定虚拟机(VM)的迁移。
流程
- 将特定的虚拟机添加到 - Migration清单的- spec.cancel块中,如下例所示:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 您可以使用id键或name键指定虚拟机。
 - id键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。
- 检索 - Migration自定义资源(CR)以监控剩余的虚拟机的进度,如下例所示:- oc get migration/<migration> -n <namespace> -o yaml - $ oc get migration/<migration> -n <namespace> -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
     
     
     
    