Utilizzare questa procedura se "Si applica a" è configurato in una delle regole DFW (ciò significa che "Si applica a" non è impostato su "DFW").

Nota: Per ulteriori informazioni sulla migrazione da NSX-V a NSX-T, leggere l'articolo della KB https://kb.vmware.com/s/article/56991.

Per la migrazione da NSX-T a NSX-V, potrebbe non essere possibile migrare nuovamente una macchina virtuale del carico di lavoro in NSX-V perché il filtro del firewall distribuito in NSX-T è sempre superiore a quello in NSX-V. La soluzione consiste nel posizionare la macchina virtuale del carico di lavoro nell'elenco di esclusione NSX-T prima di vMotion.

Prerequisiti

  • Assicurarsi che:
    • vSphere vMotion sia abilitato sull'adattatore VMkernel di ciascun host nel cluster coinvolto in questa migrazione. Per istruzioni dettagliate sull'abilitazione di vMotion sull'adattatore VMkernel, consultare la documentazione del prodotto vSphere .
    • L'host di destinazione in NSX-T disponga di risorse sufficienti per ricevere le macchine virtuali migrate.
    • Gli host di origine e di destinazione si trovino in uno stato operativo. Risolvere eventuali problemi con gli host, inclusi gli stati disconnessi.

Per ulteriori informazioni su vMotion, consultare la Migrazione tramite vMotion nella documentazione del prodotto vSphere.

Procedura

  1. Ottenere l'UUID dell'istanza di tutte le macchine virtuali di cui si intende eseguire la migrazione.
    Gli UUID dell'istanza sono necessari quando si effettua la chiamata API nel passaggio successivo. Per informazioni su come ottenere l'UUID dell'istanza di una macchina virtuale, vedere l'esempio in calce a questa sezione.
  2. Eseguire la seguente richiesta dell'API POST:
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=pre_migrate

    Questa API crea una porta di segmento logico (VIF) corrispondente all'UUID dell'istanza di macchina virtuale per ciascuna macchina virtuale del carico di lavoro di NSX-V nel gruppo di macchine virtuali che verrà migrato tramite il bridge di livello 2 al segmento di overlay di NSX-T. Per un corpo di richiesta di esempio di questa API, vedere la sezione Processo di migrazione lift-and-shift dell'articolo di NSX Tech Zone.

  3. Chiamare l'API GetVmGroupExecutionDetails. Questa API è disponibile a partire da NSX-T 3.2.2.
    Chiamare l'API GetVmGroupExecutionDetails per ottenere il risultato della chiamata API pre-migrazione con lo stesso group_id (e federation_site_id per la migrazione tra VC). Il risultato include un elenco "logical_switch_id_to_vm_instance_id_and_vnics_map" e un elenco "failedVmInstanceIds" facoltativo, che include gli UUID delle macchine virtuali non trovate nel VC di origine. Ad esempio:
    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. Utilizzare il codice Python seguente per scrivere uno script che consenta di eseguire vMotion per le macchine virtuali.

    Per un esempio, vedere la sezione Script di esempio di Python dell'articolo di NSX Tech Zone.

        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. Applicare i tag di sicurezza e l'appartenenza statica delle macchine virtuali alle macchine virtuali migrate.
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=post_migrate
    L'endpoint dell'API vmgroup con l'azione post_migrate applica i tag di sicurezza NSX-V alle macchine virtuali del carico di lavoro migrate nel segmento di overlay NSX-T.

    Per un corpo di richiesta di esempio di questa API, vedere la sezione Processo di migrazione lift-and-shift dell'articolo di NSX Tech Zone.

  6. Finalizzare l'infrastruttura per completare la migrazione.
    POST https://{nsxt-mgr-ip}/api/v1/migration?action=finalize_infra
    Questa API di migrazione elimina tutte le configurazioni di oggetti temporanei create durante la migrazione e garantisce che l'infrastruttura di NSX-T si trova in uno stato pulito. Ad esempio, i set di IP temporanei vengono rimossi dai gruppi.

    Questo corpo della richiesta API POST non è presente.

  7. Verificare che gli elementi di configurazione previsti siano stati migrati nell'ambiente NSX-T.
    Ad esempio, verificare se la migrazione delle seguenti configurazioni sia stata eseguita correttamente:
    • Regole del firewall distribuito definite dall'utente.
    • Tutti gli oggetti di raggruppamento, ad esempio Set di IP, Gruppi, Tag e così via.
    • I membri effettivi vengono visualizzati nei gruppi dinamici.
    • I tag vengono applicati alle macchine virtuali dei carichi di lavoro migrate.
  8. Nella pagina Migra carichi di lavoro fare clic su Fine.
    Viene visualizzata una finestra di dialogo per confermare il completamento della migrazione. Se si completa la migrazione, tutti i dettagli della migrazione vengono cancellati. Non è più possibile rivedere le impostazioni di questa migrazione. Ad esempio, quali input sono stati apportati nella pagina Risolvi configurazione.

Esempio: Ottenere l'UUID dell'istanza di una macchina virtuale dal MOB di vCenter

In questo esempio viene illustrato come ottenere o confermare l'UUID dell'istanza di una macchina virtuale dal Managed Object Browser (MOB) di vCenter Server all'indirizzo http://{vCenter-IP-Address}/mob. È inoltre possibile ottenere o confermare l'UUID dell'istanza di una macchina virtuale effettuando una chiamata API a vSphere.

  1. In un browser Web, immettere il Managed Object Browser di vCenter all'indirizzo http//{vCenter-IP-Address}/mob.
  2. Fare clic su contenuto.
  3. Trovare rootFolder nella colonna Nome e fare clic sul collegamento corrispondente nella colonna Valore. Ad esempio, group-d1.
  4. Trovare childEntity nella colonna Nome e fare clic sul collegamento corrispondente nella colonna Valore. Ad esempio, datacenter-21.
  5. Trovare hostFolder nella colonna Nome e fare clic sul collegamento corrispondente nella colonna Valore. Ad esempio, group-h23.
  6. Trovare childEntity nella colonna Nome. La colonna Valore corrispondente contiene collegamenti ai cluster host. Fare clic sul collegamento dell'host cluster appropriato. Ad esempio, domain-c33.
  7. Trovare host nella colonna Nome. La colonna Valore corrispondente elenca gli host in tale cluster in base al MOID e al nome host di vCenter. Fare clic sul collegamento dell'host appropriato, ad esempio host-32.
  8. Individuare vm nella colonna Nome. La colonna Valore corrispondente elenca le macchine virtuali in base al MOID e al nome host di vCenter. Ad esempio, vm-216 (web-01a). Fare clic sulla macchina virtuale desiderata.
  9. Individuare Configura nella colonna Nome. Fare clic su Configura nella colonna Valore.
  10. Trovare instanceUuid nella colonna Nome. La colonna Valore corrispondente elenca l'UUID dell'istanza della macchina virtuale. Ad esempio, 502e71fa-1a00-759b-e40f-ce778e915f16.

Operazioni successive

Al termine della migrazione delle macchine virtuali del carico di lavoro, è possibile rimuovere il bridge di livello 2.