いずれかの DFW ルールで「適用先」が構成されている場合(「適用先」が「DFW」に設定されていない場合)は、この手順を使用します。

注: NSX-V から NSX-T への移行については、ナレッジベースの記事 https://kb.vmware.com/s/article/56991を参照してください。

NSX-TNSX-V に移行する場合、NSX-V の分散ファイアウォール フィルタが NSX-T よりも常に高いため、ワークロード仮想マシンを NSX-V に戻すと機能しないことがあります。回避策として、vMotion の前にワークロード仮想マシンを NSX-T 除外リストに配置します。

前提条件

  • 次のように設定されていることを確認します。
    • この移行に関係するクラスタ内の各ホストの VMkernel アダプタで、vSphere vMotion が有効になっている。VMkernel アダプタで vMotion を有効にする手順の詳細については、vSphere の製品ドキュメントを参照してください。
    • NSX-T の宛先ホストに仮想マシンの移行に十分なリソースが用意されている。
    • 移行元と移行先のホストが動作状態になっている。切断状態など、ホストに関するすべての問題を解決します。

vMotion の詳細については、vSphere 製品ドキュメントのvMotion での移行を参照してください。

手順

  1. 移行するすべての仮想マシンのインスタンス UUID を取得します。
    次の手順で API 呼び出しを行う場合は、インスタンス UUID が必要です。仮想マシンのインスタンス UUID を取得する方法については、このセクションの下部にある例を参照してください。
  2. 次の POST API 要求を実行します。
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=pre_migrate

    この API は、レイヤー 2 ブリッジを介して NSX-T オーバーレイ セグメントに移行する仮想マシングループ内の各 NSX-V ワークロード仮想マシンの仮想マシン インスタンスの UUID に対応する論理セグメント ポート (VIF) を作成します。この API の要求本文の例については、NSX Tech Zone の記事の Lift and Shift Migration Process セクションを参照してください。

  3. API GetVmGroupExecutionDetails を呼び出します。
    API GetVmGroupExecutionDetails を呼び出して、同じ group_id を使用した移行前の API 呼び出しの結果を取得します(vCenter Server 間の移行の場合は federation_site_id も使用します)。結果には、「logical_switch_id_to_vm_instance_id_and_vnics_map」リストとオプションの「failedVmInstanceIds」リストが含まれます。これには、移行元の vCenter Server にない仮想マシンの UUID が含まれます。次はその例です。
    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 コードを参考にして、仮想マシンの vMotion を実行するためのスクリプトを記述します。

    例については、NSX Tech Zone の記事の Python Example Scripts のセクションを参照してください。

        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. 移行した仮想マシンにセキュリティ タグと仮想マシンの静的メンバーシップを適用します。
    POST https://{nsxt-mgr-ip}/api/v1/migration/vmgroup?action=post_migrate
    post_migrate アクションが設定された vmgroup API エンドポイントにより、 NSX-T オーバーレイセグメント上の移行されたワークロード仮想マシンに NSX-V セキュリティ タグが適用されます。

    この API の要求本文の例については、NSX Tech Zone の記事の Lift and Shift Migration Process セクションを参照してください。

  6. 必要なすべての構成アイテムが NSX-T 環境に移行されていることを確認します。
    たとえば、次の構成が正常に移行されたかどうかを確認します。
    • ユーザー定義の分散ファイアウォール ルール。
    • IP セット、グループ、タグなどのグループ化されたすべてのオブジェクト。
    • 動的グループに有効なメンバーが表示されます。
    • タグは、移行されたワークロード仮想マシンに適用されます。
  7. [ワークロードの移行] ページで [終了] をクリックします。
    移行の終了を確認するダイアログ ボックスが表示されます。移行が終了すると、すべての移行の詳細は消去されます。終了した移行の設定を確認することはできなくなります。たとえば、 [構成の解決] ページで行った入力など。

例: vCenter Server MOB からの仮想マシン インスタンスの UUID の取得

この例では、http://{vCenter-IP-Address}/mobvCenter Server 管理対象オブジェクト ブラウザ (MOB) から仮想マシンのインスタンス UUID を取得または確認する方法を示します。また、vSphere への API 呼び出しを実行して、仮想マシンのインスタンス UUID を取得または確認することもできます。

  1. Web ブラウザで、http//{vCenter Server の IP アドレス}/mob に「vCenter Managed Object Browser」と入力します。
  2. [内容] をクリックします。
  3. [Name] 列で [rootFolder] を検索し、[Value] 列の対応するリンクをクリックします。例:group-d1。
  4. [Name] 列で [childEntity] を検索し、[Value] 列の対応するリンクをクリックします。例:datacenter-21。
  5. [Name] 列で [hostFolder] を検索し、[Value] 列の対応するリンクをクリックします。例:group-h23。
  6. [Name] 列で [childEntity] を検索します。対応する [Value] 列には、ホスト クラスタへのリンクが含まれています。該当するホスト クラスタ リンクをクリックします。例:domain-c33。
  7. [Name] 列で [host] を検索します。対応する [Value] 列には、クラスタ内のホストが vCenter MOID とホスト名別に一覧表示されます。該当するホスト リンクをクリックします(例: host-32)。
  8. [Name] 列で [vm] を検索します。対応する [Value] 列には、仮想マシンが vCenter Server MOID とホスト名別に一覧表示されます。例:vm-216 (web-01a)。対象の仮想マシンをクリックします。
  9. [Name] 列で [config] を検索します。[Value] 列で [config] をクリックします。
  10. [Name] 列で [instanceUuid] を検索します。対応する [Value] 列には、仮想マシン インスタンスの UUID が一覧表示されます。例:502e71fa-1a00-759b-e40f-ce778e915f16。

次のタスク

ワークロード仮想マシンの移行後、レイヤー-2 ブリッジを削除できます。