Wenden Sie dieses Verfahren an, wenn "Angewendet auf" in einer der DFW-Regeln konfiguriert ist (dies bedeutet, dass "Angewendet auf" nicht auf "DFW" festgelegt ist).

Hinweis: Weitere Informationen NSX-V zur NSX-T-Migration finden Sie im KB-Artikel https://kb.vmware.com/s/article/56991.

Für NSX-T zur NSX-V-Migration funktioniert die Migration einer Arbeitslast-VM zurück zu NSX-V möglicherweise nicht, da der Filter für die verteilte Firewall in NSX-T immer höher ist als in NSX-V. Die Problemumgehung besteht darin, die Arbeitslast-VM vor vMotion in der NSX-T-Ausschlussliste zu platzieren.

Voraussetzungen

  • Stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:
    • vSphere vMotion ist auf dem VMkernel-Adapter jedes Hosts in dem Cluster aktiviert, der an dieser Migration beteiligt ist. Ausführliche Schritte zum Aktivieren von vMotion auf dem VMkernel-Adapter finden Sie in der Produktdokumentation zu vSphere.
    • Der Zielhost in NSX-T verfügt über ausreichende Ressourcen, um die migrierten VMs aufzunehmen.
    • Die Quell- und Zielhosts befinden sich im betriebsbereiten Zustand. Beheben Sie alle Probleme mit Hosts, einschließlich getrennter Zustände.

Weitere Informationen zu vMotion finden Sie unter Migration mit vMotion in der vSphere-Produktdokumentation.

Prozedur

  1. Rufen Sie die Instanz-UUID aller zu migrierenden VMs ab.
    Die Instanz-UUIDs werden benötigt, wenn Sie den API-Aufruf im nächsten Schritt durchführen. Im Beispiel unten in diesem Abschnitt finden Sie Informationen zum Abrufen der Instanz-UUID einer VM.
  2. Führen Sie die folgende POST-API-Anforderung aus:
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=pre_migrate

    Diese API erstellt einen logischen Segment-Port (VIF), der der VM-Instanz-UUID jeder NSX-V-Arbeitslast-VM in der VM-Gruppe entspricht, die Sie über die Layer-2-Bridge in das NSX-T-Overlay-Segment migrieren werden. Ein Beispiel für einen Anforderungstext dieser API finden Sie im Abschnitt Lift and Shift-Migrationsvorgang des NSX Tech Zone-Artikels.

  3. Rufen Sie die API GetVmGroupExecutionDetails auf. Diese Funktion ist ab NSX-T 3.2.2 verfügbar
    Rufen Sie die API GetVmGroupExecutionDetails auf, um das Ergebnis des API-Aufrufs vor der Migration mit derselben group_id (und federation_site_id für die VC-übergreifende Migration) abzurufen. Sie erhalten eine Liste (logical_switch_id_to_vm_instance_id_and_vnics_map) und eine optionale Liste (failedVmInstanceIds), die die UUIDs von VMs enthält, die im Quell-VC nicht gefunden wurden. Beispiel:
    GET /api/v1/migration/vmgroup/actions/get_vm_group_execution_details?group_id=<group-id>&federation_site_id=<site_id>
    Response:
    {
      "logical_switch_id_to_vm_instance_id_and_vnics_map":[
        {
          "ls_id":"36885723-7581-4696-a195-ef83851dc35f",
          "vm_and_vnics_mapping":[
            {
              "vm_instance_id":"52199e21-6aab-26e4-8c82-069a17d67667",
              "vnics":[
                "4001"
              ]
            },
            {
              "vm_instance_id":"52630e5d-ce6f-fac0-424c-4aa4bdf6bd56",
              "vnics":[
                "4001"
              ]
            }
          ]
        }
      ],
      "failedVmInstanceIds":[
        "501557f6-2197-1fe8-14e5-89898cee5fec"
      ]
    }
  4. Halten Sie sich an den nachfolgenden Pseudo-Python-Code, um ein Skript für die vMotion-Übertragung der VMs zu schreiben.

    Im Abschnitt Python-Beispielskripts des NSX Tech Zone-Artikels finden Sie ein Beispiel.

        define _get_nsx_networks_in_host(self, host):
            ls_id_to_nsx_pgs_map = {}
            for net in host.network:
                if isinstance(net, vim.dvs.DistributedVirtualPortgroup):
                    if hasattr(net.config, 'backingType'):
                        if net.config.backingType == 'nsx' and net.config.logicalSwitchUuid:
                            ls_id_to_nsx_pgs_map[net.config.logicalSwitchUuid] =\
                               [net.key, net.config.distributedVirtualSwitch.uuid]
                elif isinstance(net, vim.OpaqueNetwork):
                    if net.summary.opaqueNetworkType == 'nsx.LogicalSwitch':
                        ls_id_to_nsx_pgs_map[net.summary.opaqueNetworkId] = [None, net.summary.opaqueNetworkId]
            return ls_id_to_nsx_pgs_map
     
         define _get_vms_vnic_to_ls_id_map(self, logical_switch_id_to_vm_instance_id_and_vnics_map):
            vm_uuid_2_vnics_map = {}
            for ls_id_2_vm_vnics in logical_switch_id_to_vm_instance_id_and_vnics_map:
                ls_id = ls_id_2_vm_vnics['ls_id']
                for vm_vnics in ls_id_2_vm_vnics['vm_and_vnics_mapping']:
                    vnic_2_ls_id = vm_uuid_2_vnics_map.get(vm_vnics['vm_instance_id'], {})
                    for vnic in vm_vnics['vnics']:
                        vnic_2_ls_id[vnic] = ls_id
                    vm_uuid_2_vnics_map[vm_vnics['vm_instance_id']] = vnic_2_ls_id
            return vm_uuid_2_vnics_map
        
        def _get_nsxt_vnic_spec(self, device, dvpg_key, switch_id, vif_id):
            If dvpg_key:
                vdsPgConn = vim.dvs.PortConnection()
                vdsPgConn.portgroupKey = dvpg_key
                vdsPgConn.switchUuid = switch_id
                device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
                device.backing.port = vdsPgConn
            else:
                device.backing = vim.vm.device.VirtualEthernetCard.OpaqueNetworkBackingInfo()
                device.backing.opaqueNetworkId = switch_id
                device.backing.opaqueNetworkType = 'nsx.LogicalSwitch'
            device.externalId = vif_id
            dev_spec = vim.Vm.Device.VirtualDeviceSpec()
            dev_spec.SetOperation(vim.Vm.Device.VirtualDeviceSpec.Operation.edit)
            dev_spec.SetDevice(device)
            return dev_spec
        
        def _migrate_vm(self, vmObject, vnic_2_ls_id_map, ls_id_to_nsx_pgs_map):
            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:
                ls_id = vnic_2_ls_id_map.get(str(device.key))
                if ls_id:
                    vif_id = vmObject.config.instanceUuid + ":" + str(device.key)
                    nsx_pg = ls_id_to_nsx_pgs_map.get(ls_id)
                    vnic_spec = self._get_nsxt_vnic_spec(device, nsx_pg[0], nsx_pg[1], 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)
        
        
        vm_uuid_2_vnics_map = self._get_vms_vnic_to_ls_id_map(logical_switch_id_to_vm_instance_id_and_vnics_map)
        for vm_uuid, vnic_2_ls_id_map in vm_uuid_2_vnics_map.items():
            # get the vmObject by the vm_uuid
            # find a target host that has all the networks needed by this VM
            ls_id_to_nsx_pgs_map = self._get_nsx_networks_in_host(host)
            self._migrate_vm(vmObject, vnic_2_ls_id_map, ls_id_to_nsx_pgs_map)
  5. Wenden Sie die Sicherheits-Tags und die statische VM-Mitgliedschaft auf die migrierten VMs an.
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=post_migrate
    Der vmgroup-API-Endpoint mit der post_migrate-Aktion wendet die NSX-V-Sicherheits-Tags auf die migrierten Arbeitslast-VMs im NSX-T-Overlay-Segment an.

    Ein Beispiel für einen Anforderungstext dieser API finden Sie im Abschnitt Lift and Shift-Migrationsvorgang des NSX Tech Zone-Artikels.

  6. Stellen Sie die Infrastruktur fertig, um die Migration abzuschließen.
    POST https://{nsxt-mgr-ip}/api/v1/migration?action=finalize_infra
    Diese Migrations-API löscht alle temporären Objektkonfigurationen, die während der Migration erstellt wurden, und stellt sicher, dass sich die NSX-T-Infrastruktur in einem bereinigten Zustand befindet. Beispielsweise werden temporäre IP Sets aus den Gruppen entfernt.

    Diese POST-API hat keinen Anforderungstext.

  7. Stellen Sie sicher, dass alle erwarteten Konfigurationselemente auf die NSX-T-Umgebung migriert wurden.
    Prüfen Sie beispielsweise, ob die folgenden Konfigurationen erfolgreich migriert wurden:
    • Benutzerdefinierte Regeln für verteilte Firewall.
    • Alle Gruppierungsobjekte, wie z. B. IP Sets, Gruppen, Tags usw.
    • Effektive Mitglieder werden in den dynamischen Gruppen angezeigt.
    • Tags werden auf migrierte Arbeitslast-VMs angewendet.
  8. Klicken Sie auf der Seite Arbeitslasten migrieren auf Fertigstellen.
    Ein Dialogfeld wird angezeigt, um die Beendigung der Migration zu bestätigen. Wenn Sie die Migration abgeschlossen haben, werden alle Migrationsdetails gelöscht. Sie können die Einstellungen dieser Migration nicht mehr überprüfen. So können Sie beispielsweise nicht mehr nachvollziehen, welche Eingaben auf der Seite Konfiguration auflösen vorgenommen wurden.

Beispiel: Abrufen der VM-Instanz-UUID aus vCenter MOB

In diesem Beispiel ist dargestellt, wie Sie die Instanz-UUID einer VM aus dem vCenter Server Managed Object Browser (MOB) unter http://{vCenter-IP-Address}/mob abrufen oder bestätigen. Sie können auch die Instanz-UUID einer VM abrufen oder bestätigen, indem Sie einen API-Aufruf für vSphere durchführen.

  1. Geben Sie in einem Webbrowser den vCenter Managed Object Browser unter http//{vCenter-IP-Adresse}/mob ein.
  2. Klicken Sie auf Inhalt.
  3. Suchen Sie rootFolder in der Spalte „Name“ und klicken Sie auf den entsprechenden Link in der Spalte „Wert“. Beispiel: group-d1.
  4. Suchen Sie childEntity in der Spalte „Name“ und klicken Sie auf den entsprechenden Link in der Spalte „Wert“. Beispiel: datacenter-21.
  5. Suchen Sie hostFolder in der Spalte „Name“ und klicken Sie auf den entsprechenden Link in der Spalte „Wert“. Beispiel: group-h23.
  6. Suchen Sie childEntity in der Spalte „Name“. Die entsprechende Spalte „Wert“ enthält Links zu Hostclustern. Klicken Sie auf den entsprechenden Hostcluster-Link. Beispiel: domain-c33.
  7. Suchen Sie host in der Spalte „Name“. In der entsprechenden Spalte „Wert“ werden die Hosts in diesem Cluster nach vCenter-MOID und Hostname aufgelistet. Klicken Sie auf den entsprechenden Host-Link, z. B. host-32.
  8. Suchen Sie vm in der Spalte „Name“. In der entsprechenden Spalte „Wert“ werden die virtuellen Maschinen nach vCenter-MOID und Hostnamen aufgelistet. Beispiel: vm-216 (web-01a). Klicken Sie auf die VM, die Sie interessiert.
  9. Suchen Sie config in der Spalte „Name“. Suchen Sie config in der Spalte „Wert“.
  10. Suchen Sie instanceUuid in der Spalte „Name“. In der entsprechenden Spalte „Wert“ wird die Instanz-UUID der VM aufgelistet. Beispiel: 502e71fa-1a00-759b-e40f-ce778e915f16.

Nächste Maßnahme

Nach der Migration von Arbeitslast-VMs können Sie die Layer-2-Bridge entfernen.