DFW 규칙에 "적용 대상"이 구성된 경우(즉, "적용 대상"이 "DFW"로 설정되지 않음) 이 절차를 사용합니다.

참고: NSX-V에서 NSX-T로의 마이그레이션에 대한 자세한 내용은 KB 문서 https://kb.vmware.com/s/article/56991 항목을 참조하십시오.

NSX-T에서 NSX-V로 마이그레이션하는 경우 NSX-V의 분산 방화벽 필터가 항상 NSX-T보다 높기 때문에 워크로드 VM을 다시 NSX-V로 마이그레이션하면 작동하지 않을 수 있습니다. 해결 방법은 vMotion 전에 워크로드 VM을 NSX-T 제외 목록에 배치하는 것입니다.

사전 요구 사항

  • 다음 사항을 충족하는지 확인하십시오.
    • vSphere vMotion은 이 마이그레이션과 관련된 클러스터에 있는 각 호스트의 VMkernel 어댑터에서 사용하도록 설정됩니다. VMkernel 어댑터에서 vMotion을 사용하도록 설정하는 방법에 대한 자세한 단계는 "vSphere " 제품 설명서를 참조하십시오.
    • NSX-T의 대상 호스트에 마이그레이션된 VM을 수신할 수 있는 충분한 리소스가 있습니다.
    • 소스 및 대상 호스트가 작동 상태입니다. 연결이 끊긴 상태를 포함하여 호스트에 있는 문제를 해결합니다.

vMotion에 대한 자세한 내용은 "vSphere" 제품 설명서에서 vMotion을 사용한 마이그레이션을 참조하십시오.

프로시저

  1. 마이그레이션하려는 모든 VM의 인스턴스 UUID를 가져옵니다.
    인스턴스 UUID는 다음 단계에서 API 호출을 수행할 때 필요합니다. VM의 인스턴스 UUID를 가져오는 방법은 이 섹션의 아래쪽에 있는 예제를 참조하십시오.
  2. 다음과 같이 POST API 요청을 실행합니다.
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=pre_migrate

    이 API는 계층 2 브리지를 통해 NSX-T 오버레이 세그먼트로 마이그레이션할 VM 그룹에 있는 각 NSX-V 워크로드 VM의 VM 인스턴스 UUID에 해당하는 논리적 세그먼트 포트(VIF)를 생성합니다. 이 API의 예제 요청 본문은 NSX 기술 영역 문서의 리프트 및 시프트 마이그레이션 프로세스 섹션을 참조하십시오.

  3. API GetVmGroupExecutionDetails를 호출합니다. 이 API는 NSX-T 3.2.2부터 사용할 수 있습니다.
    API GetVmGroupExecutionDetails를 호출하여 동일한 group_id(VC 간 마이그레이션의 경우 federation_site_id)를 사용한 마이그레이션 전 API 호출의 결과를 가져옵니다. 결과에는 “logical_switch_id_to_vm_instance_id_and_vnics_map” 목록과 소스 VC에서 찾을 수 없는 VM의 UUID를 포함하는 선택적 “failedVmInstanceIds” 목록이 포함되어 있습니다. 예:
    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. 아래의 유사 Python 코드를 따라 VM을 vmotion하는 스크립트를 작성합니다.

    예를 들어 NSX 기술 영역 문서의 Python 예제 스크립트 섹션을 참조하십시오.

        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. 마이그레이션된 VM에 보안 태그 및 VM 고정 멤버 자격을 적용합니다.
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=post_migrate
    post_migrate 작업이 지정된 vmgroup API 끝점은 NSX-V 보안 태그를 NSX-T 오버레이 세그먼트의 마이그레이션된 워크로드 VM에 적용합니다.

    이 API의 예제 요청 본문은 NSX 기술 영역 문서의 리프트 및 시프트 마이그레이션 프로세스 섹션을 참조하십시오.

  6. 마이그레이션을 완료하려면 인프라를 완료해야 합니다.
    POST https://{nsxt-mgr-ip}/api/v1/migration?action=finalize_infra
    이 마이그레이션 API는 마이그레이션 중에 생성된 모든 임시 개체 구성을 삭제하고 NSX-T 인프라가 정상 상태인지 확인합니다. 예를 들어, 임시 IP 집합이 그룹에서 제거됩니다.

    이 POST API에는 요청 본문이 없습니다.

  7. 예상되는 구성 항목이 NSX-T 환경에 마이그레이션되었는지 확인합니다.
    예를 들어 다음 구성이 성공적으로 마이그레이션되었는지 확인합니다.
    • 사용자 정의 분산 방화벽 규칙.
    • IP 집합, 그룹, 태그 등과 같은 모든 그룹 개체입니다.
    • 유효한 멤버는 동적 그룹에 표시됩니다.
    • 태그는 마이그레이션된 워크로드 VM에 적용됩니다.
  8. 워크로드 마이그레이션 페이지에서 마침을 클릭합니다.
    마이그레이션 완료를 확인하는 대화상자가 나타납니다. 마이그레이션을 완료하면 모든 마이그레이션 세부 정보가 지워집니다. 이 마이그레이션의 설정을 더 이상 검토할 수 없습니다. 예를 들어, 구성 해결 페이지에서 입력한 내용이 여기에 해당합니다.

예: vCenter MOB에서 VM 인스턴스 UUID 가져오기

이 예에서는 http://{vCenter-IP-Address}/mobvCenter Server MOB(관리 개체 브라우저)에서 VM의 인스턴스 UUID를 가져오거나 확인하는 방법을 보여 줍니다. vSphere에 대해 API 호출을 수행하여 VM의 인스턴스 UUID를 가져오거나 확인할 수도 있습니다.

  1. 웹 브라우저에서 http//{vCenter-IP-Address}/mob의 vCenter 관리 개체 브라우저로 이동합니다.
  2. 컨텐츠를 클릭합니다.
  3. [이름] 열에서 rootFolder를 찾고 [값] 열에서 해당 링크를 클릭합니다. 예: group-d1.
  4. [이름] 열에서 childEntity를 찾고 [값] 열에서 해당 링크를 클릭합니다. 예: datacenter-21.
  5. [이름] 열에서 hostFolder를 찾고 [값] 열에서 해당 링크를 클릭합니다. 예: group-h23.
  6. [이름] 열에서 childEntity를 찾습니다. 해당 [값] 열에는 호스트 클러스터에 대한 링크가 포함됩니다. 해당 호스트 클러스터 링크를 클릭합니다. 예: domain-c33.
  7. [이름] 열에서 host를 찾습니다. 해당 [값] 열에는 해당 클러스터의 호스트가 vCenter MOID 및 호스트 이름을 기준으로 나열됩니다. 해당 호스트 링크(예: host-32)를 클릭합니다.
  8. [이름] 열에서 vm을 찾습니다. 해당 [값] 열에는 가상 시스템이 vCenter MOID 및 호스트 이름을 기준으로 나열됩니다. 예: vm-216(web-01a). 관심 있는 VM을 클릭합니다.
  9. [이름] 열에서 config를 찾습니다. [값] 열에서 config를 클릭합니다.
  10. [이름] 열에서 instanceUuid를 찾습니다. 해당 [값] 열에는 VM 인스턴스 UUID가 나열됩니다. 예: 502e71fa-1a00-759b-e40f-ce778e915f16.

다음에 수행할 작업

워크로드 VM의 마이그레이션 후에 계층 2 브리지를 제거할 수 있습니다.