Nested Virtualization(ESXi, Xen, Hyper-V, KVM)の組み合わせとサンプル


一般に言われる「Nested Virtualization(仮想化ネスト)」とは仮想マシンの中でハイパバイザ(Hypervisor)を実行可能とする機能を指します。
Nested VirtualizationをサポートするプラットフォームとしてはVMware ESX(i), Xen, KVM, Microsoft Hyper-Vがあります。
個別には、Nested ESXi, Nested Xen, Nested KVM, Nested Hyper-Vとも呼ばれます。
尚、Nested Virtualizationをサポートしているように見えるOracle VM VirtualBox 5.0において[VT-x/AMD-Vを有効化]というオプションがありますがそれを有効にしても実際にはゲストOS側でのハードウェア仮想化支援機能は有効にはなりません(VirtualBoxでのESXiインストール警告例, VirtualBoxでのESXiへの接続例)。
※VirtualBoxでESXiのネットワークを稼働させるためにはアダプタタイプを「Intel PRO/1000 MT Server (82545EM)」にすればOKです(ネットワーク設定情報)。
VirtualBoxでは[VT-x/AMD-Vを有効化]設定してもXenでの完全仮想化は実現できません(Linux上のVirtualBox利用ケース)。

「Nested Virtualization」の環境では最低限3個のレイヤが連携して動くことが必要となります。


下記はNested Vitualizationの組み合わせとNested Vitualizationのサンプルです。

  1. Hypervisorネストの組み合わせ
    下記はL1仮想マシンについてNested Virtualizationオプションを有効にした場合のテスト結果です。
    ※Nested Virtualizationオプションの有効化方法はL0の種別ごとに異なります。
    [凡例]
    ○:Hypervisorのインストール可、かつその上での仮想マシン作成可
    △:Hypervisorのインストール可、但し動作上の問題があって実質使えない
    ×:Hypervisorのインストール不可
    L0/L1ESXi 6.0Xen 4.4.2Hyper-VKVM
    ESXi 6.0

    Xen 4.4.2
    (SLES 11 SP4 on ESXi 6.0)

    (ESXiのインストールはできるがvSphere Clientからの接続不可:詳細)

    (Hyper-V HypervisorのインストールはできるがHypervisorのロードで失敗:詳細)
    Hyper-V
    (Windows Server 2016 TP4 on ESXi 6.0)
    ×
    (仮想プロセサ数を2以上に設定してもインストーラのローディング中に
    Relocating modules and Starting up the kernel...」部分で停止)

    (L1は物理ネットワーク接続不可でかつXen準仮想化ホスト限定)

    (KVM HypervisorのインストールはできるがKVM Hypervisorのロード不可)
    KVM
    (CentOS 7)
    ×
    (インストーラのローディング中にフリーズ)
    ×
    (Hyper-V Hypervisorのインストール不可)

    [補足]

  2. Nested ESXiサンプル
    L0, L1, L2, ...というレイヤ区分ごとの仮想マシン名を下表に示します。
    Lx仮想マシン名OS備考
    L0
    -
    (実機上のホスト名:esxi6)
    ESXi 6.0ESXi Hypervisor
    L1
    vsESXiESXi 6.0ESXi Hypervisor
    L2
    vsesxi2ESXi 6.0ESXi Hypervisor
    L3
    vsesxi3ESXi 6.0ESXi Hypervisor
    L4
    vsLivex64L4Ubuntu 14.04 (64ビット版)



    ・実寸画像はこちらです。

    Nested ESXiについては主に「オープンギャラリー:VMware vSphere Hypervisor (ESXi 6.0でのNested ESXi/Hyper-V)」でご紹介しています。

  3. Nested Xenサンプル
    L0, L1, L2, ...というレイヤ区分ごとの仮想マシン名を下表に示します。
    Lx仮想マシン名OS備考
    L0
    -
    (実機上のホスト名:esxi)
    ESXi 6.0ESXi Hypervisor
    L1
    vsesxi6testESXi 6.0ESXi Hypervisor
    L2
    vssles11xsclnl2SLES 11 SP4Xen Hypervisor
    L3
    xensles11xstestSLES 11 SP4Xen Hypervisor
    L4
    l2pvsles11SLES 11 SP4



    ・実寸画像はこちらです。

    Nested Xenについては主に「オープンギャラリー:Xen 4.4.2(SLES 11によるNested Xen環境構築編)」でご紹介しています。

  4. Nested Hyper-Vサンプル
    L0, L1, L2, ...というレイヤ区分ごとの仮想マシン名を下表に示します。
    Lx仮想マシン名OS備考
    L0
    -
    (実機上のホスト名:WS16TP4HVHOST)
    Windows Server 2016 TP4Hyper-V Hypervisor
    L1
    HVSWS16TP4VL1Windows Server 2016 TP4Hyper-V Hypervisor
    L2
    HVSWS16TP4VL2Windows Server 2016 TP4Hyper-V Hypervisor
    L3
    HVSWS16TP4VL3Windows Server 2016 TP4Hyper-V Hypervisor
    L4
    HVSWS16TP4VL4Windows Server 2016 TP4Hyper-V Hypervisor
    L5
    HVSWS16TP4VL5Windows Server 2016 TP4



    ・実寸画像はこちらです。

    Nested Hyper-Vについては主に「オープンギャラリー:Windows 10 Insider PreviewでのNested Virtualization利用手順」でご紹介しています。
    また「オープンギャラリー:Windows Server 2016 TP4による仮想Hyper-Vホスト間ライブマイグレーション実行例」も合わせてご参照願います。

  5. Nested KVMサンプル
    L0, L1, L2, ...というレイヤ区分ごとの仮想マシン名を下表に示します。
    Lx仮想マシン名OS備考
    L0
    -
    (実機上のホスト名:centos7)
    CentOS 7 (Build 1511)KVM Hypervisor
    L1
    kvmcentos7CentOS 7 (Build 1511)KVM Hypervisor
    L2
    l2kvmcentos7CentOS 7 (Build 1511)

    (1)KVM自体はESXi上やHyper-V上では正常動作しません。
    (2)Nested KVMを実現する方法はhttps://wiki.archlinux.org/index.php/KVM等で公開されています。
    (3)Nested KVM環境を構築した手順はオープンギャラリー:CentOS 7によるNested KVM環境でご紹介しているように特に問題なくCentOS 7をL0, L1, L2として使用できています。



    ・実寸画像はこちらです。