在准备基础架构以扩展第 2 层网络后,您可以将 NSX-V 主机迁移到 NSX-T 主机传输节点。

前提条件

  • 配置一些与主机迁移相关的设置,包括迁移顺序和启用主机。确保您了解这些设置的影响。有关详细信息,请参见配置 NSX-V 主机迁移。在使用分布式防火墙或 vSphere Distributed Switch 7.0 时,了解主机迁移设置是尤其重要的。
  • vCenter Server UI 中,转到主机和集群页面,然后确认所有 ESXi 主机均处于正常运行状态。解决主机的任何问题,包括断开连接状态。不能有任何挂起的重新引导或挂起的任务才能进入和退出维护模式。

过程

  1. 迁移主机页面上,单击开始

    如果为所有主机组选择了就地自动维护迁移模式,将开始进行主机迁移。请注意,在自动维护模式下,迁移协调器不会重新配置已关闭电源的虚拟机。迁移后,您需要先手动配置这些虚拟机,然后再打开这些虚拟机的电源。

  2. 如果为任何主机组选择了手动维护迁移模式,则必须为每个虚拟机完成以下任务之一,以便主机能够进入维护模式。
    选项 操作
    关闭虚拟机电源或将虚拟机挂起。
    1. 右键单击虚拟机,并选择电源 > 关闭电源电源 > 关闭客户机操作系统电源 > 挂起
    2. 迁移主机后,将虚拟机接口连接到相应的 NSX-T 分段,然后打开虚拟机电源。
    使用 vMotion 移动虚拟机。 右键单击虚拟机,并选择“迁移”。按照提示将虚拟机移至其他主机。请注意,在迁移过程中,迁移协调器通过 vMotion 将虚拟机移动到受临时规则保护的特定端口以保持安全性。对于手动 vMotion,不会将虚拟机移动到这些端口,因此,可能存在安全漏洞。要手动通过 vMotion 进行移动,必须使用 vSphere API 迁移虚拟机,其中,网络支持必须指向与 NSX 分段对应的 OpaqueNetwork ID(使用 NVDS 时),或者指向 VDS 端口组 ID(使用 VDS 7 时)。在这两种情况下,网络设备的 externalId 必须设置为字符串“VM_UUID:vNIC_ID”,其中 VM_UUID 是虚拟机的实例 UUID,vNIC_ID 是虚拟机的 vNIC 索引,其中第一个 vNIC 为 4000。
    使用冷迁移移动虚拟机。
    1. 右键单击虚拟机,并选择电源 > 关闭电源电源 > 关闭客户机操作系统电源 > 挂起
    2. 右键单击虚拟机,并选择“迁移”。按照提示将虚拟机移至其他主机,并将其接口连接到相应的 NSX-T 分段。
    以下 Python 代码用于为虚拟机中的每个 vNIC 指定外部 ID,然后通过 vMotion 移动虚拟机,以便这些 vNIC 使用正确的端口连接到 ID 为“ls_id”的 NSX-T 分段:
    devices = vmObject.config.hardware.device
    nic_devices = [device for device in devices if isinstance(device, vim.Vm.device.VirtualEthernetCard)]
    vnic_changes = []
    for device in nic_devices:
        vif_id = vmObject.config.instanceUuid + ":" + str(device.key)
        vnic_spec = self._get_nsxt_vnic_spec(device, ls_id, vif_id)
        vnic_changes.append(vnic_spec)
    relocate_spec = vim.Vm.RelocateSpec()
    relocate_spec.SetDeviceChange(vnic_changes)
    # set other fields in the relocate_spec
    vmotion_task = vmObject.Relocate(relocate_spec)
    WaitForTask(vmotion_task)
    
    def _get_nsxt_vnic_spec(self, device, ls_id, vif_id):
        nsxt_backing = vim.Vm.Device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
        nsxt_backing.SetOpaqueNetworkId(ls_id)
        nsxt_backing.SetOpaqueNetworkType('nsx.LogicalSwitch')
        device.SetBacking(nsxt_backing)
        device.SetExternalId(vif_id)
        dev_spec = vim.Vm.Device.VirtualDeviceSpec()
        dev_spec.SetOperation(vim.Vm.Device.VirtualDeviceSpec.Operation.edit)
        dev_spec.SetDevice(device)
        return dev_spec

    有关完整脚本的示例,请参见 https://github.com/dixonly/samples/blob/main/vmotion.py

    在移动或挂起所有虚拟机或将其关闭电源后,主机将进入维护模式。如果希望在要迁移的主机进入维护模式之前使用冷迁移将虚拟机移动到其他主机,必须在移动虚拟机时,至少让一个虚拟机保持运行状态。最后一个虚拟机断开电源或挂起后,主机会进入维护模式,并开始将主机迁移到 NSX-T 的过程。

结果

在主机使用就地迁移模式迁移到 NSX-T 后,您可能会看到严重警报,并显示网络连接中断 (Network connectivity lost) 消息。在 vSphere Distributed Switch (VDS) 6.5 或 6.7 迁移到 N-VDS 时,将会发出该警报,因为主机不再将物理网卡连接到它以前连接到的 VDS。要将迁移的主机恢复为“已连接”状态,请在每个主机上单击重置为绿色并禁止警告(如果有)。

如果某主机迁移失败,可以将它所在的主机组移动到组列表底部。这样在解决失败主机存在的问题时,可以继续迁移其他主机组。

如果某主机迁移失败,则迁移将在所有正在进行的主机迁移完成后暂停。解决了主机存在的问题后,请单击重试以重试迁移失败的主机。如果该主机仍无法迁移,则可以在该主机上手动配置 NSX-T 或从系统中移除该主机。在这种情况下,在主机迁移步骤结束时,由于主机迁移失败,将不会启用完成按钮。您需要使用 REST API 客户端(例如 postman 或 curl)调用 REST API POST https://<nsx-mgr-IP>/api/v1/migration?action=finalize_infra(<nsx-mgr-IP> 是运行迁移服务的 NSX Manager 的 IP 地址)来完成迁移,然后执行迁移后任务。

下一步做什么

  1. 验证是否已将预期的配置项目迁移到 NSX-T 环境。例如,检查是否成功迁移以下配置:
    • 用户定义的分布式防火墙规则。
    • 所有分组对象,例如 IP 集、组、标记等。
    • 在动态组中显示有效的成员。
    • 将标记应用于迁移的工作负载虚拟机。
    验证 NSX-T 主机上运行的虚拟机是否连接到正确的 NSX-T 覆盖网络分段,并验证以下连接:
    • 虚拟机到 NSX-T 网络中的虚拟机的连接。
    • 虚拟机到 NSX-T 网络外部的外部虚拟机的连接(只要 DFW 规则允许)。
  2. 迁移主机页面上,单击完成

    将显示一个对话框,用于确认完成迁移。如果完成迁移,则清除所有迁移详细信息。无法再查看此迁移的设置。例如,在解决配置页面上输入哪些内容,或者从迁移中排除了哪些主机。