Hyper-V の Nested VM (入れ子になった仮想化) を使用して、Hyper-V のゲスト OS として、ESXi を構築するための方法について情報を遺しておきたいと思います。
ホスト OS として、Windows Server 2019 / Windows Server 2022 を使用して確認しましたが、ネットワークの不安定さがあり、検証で使うのも少し厳しそうな感じではありました。
参考にする情報
ESXi in Hyper-V の環境を構築するための方法ですが、次の 2 つの情報に目を通しておけば、Hyper-V 上に ESXi を構築することができると思います。
- How to Install VMWare ESXi in a Hyper-V Virtual Machine?
- Install a VMWare ESXi 6.0 Hypervisor in a Hyper-V VM
カスタムイメージの作成については、ESXi-Customizer-PS.ps1 を使用することで作成をすることができます。
How to Install VMWare ESXi in a Hyper-V Virtual Machine? が 2021/9 の情報となっており、Hyper-V 上で ESXi を実行する際の記事としては最新の情報となっているように見受けられました。
構築時のポイント
上記の情報に記載されていますが、Hyper-V 上に ESXi をインストールする際にはいくつかのポイントがあります。
環境面では次のような制約があります。
- Hyper-V の仮想マシンは第一世代 VM (Gen1) を使用する
- NIC については、レガシ ネットワークアダプターを使用する
- レガシ ネットワークアダプターを使用する関係でネットワーク帯域の上限は 100Mbps となります
- ホスト OS と共有した仮想スイッチ / 内部 (Internal) スイッチを使用した場合、ホスト OS から通信を行うことができない
- ホスト OS と共有した外部仮想スイッチを使用した場合、ホスト OS 以外からはアクセスが可能でしたが、ホスト OS 上からはアクセスできませんでした。
- Windows Server 2022 の Hyper-V だとアクセスできることもあったのですが、2019 だとアクセスできませんでした。
- ホスト OS と共有しない外部仮想スイッチを作成すれば、ホスト OS からも通信が可能です。
- インストール可能な ESXi は、ESXi-6.0.0-20170604001 Build 5572656 までとなり、それ以降のバージョンでは構築ができない
- 上記のバージョンまでは、レガシネットワークアダプタで使用するドライバー (Net-tulip) を追加できるのですが、それ以降では追加できませんでした。
- ESXi 6.5 / 6.7 / 6.7 を使用した環境を構築することができません。
導入方法については上述の記事に書かれている通りとなり、次のような流れで作業をすれば環境を構築することができると思います。
- 第一世代 VM をレガシネットワークアダプタを接続した状態で作成
- レガシネットワークアダプタでは、MAC アドレスのスプーフィングを有効にしておきます。
- ESXi をインストールする仮想マシンを作成したら Nested VM を実行できるよう、次のコマンドで設定を行っておく
- Set-VMProcessor -VMName <VM 名> -ExposeVirtualizationExtensions $true
- ESXi-Customizer-PS.ps1 を使用して、Net-tulip のドライバーを追加したカスタムイメージを作成する。
- 最初から、ISO を作成しようとすると、「WinError 10054」が発生し、イメージを作成することができないケースがありましたので、-ozip -> -izip の順で実行して、ISO を作成しています。
- .\ESXi-Customizer-PS.ps1 -sip -ozip
- -sip で選択するイメージは ESXi-6.0.0-20170604001-standard となります。
- .\ESXi-Customizer-PS.ps1 -izip .\ESXi-6.0.0-20170304001-standard.zip -vft -load net-tulip
- カスタムイメージで起動したら、Tab を押し、起動パラメーターとして「ignoreHeadless=TRUE」を指定して起動する
- When booting with Headless mode enabled on a server, ESXi does not display the installer interface or DCUI (2054090)
- これでインストールは完了するはずです。
- インストール後の起動時に「Shift+O」を押し、起動パラメーターとして「ignoreHeadless=TRUE」を指定して起動する
- 起動したら、ESXi のコンソールで次の操作を行い、起動パラメーターを永続化させる
- Troubleshooting Options を選択し、Enable ESXi Shell を有効にして、シェルを起動できるようにする
- Alt+F1 でシェルを起動
- esxcfg-advcfg -k TRUE ignoreHeadless を実行
- /etc/vmware/config に vmx.allowNested="TRUE" を追加
- ESXi 上で、仮想マシンを起動できるようにするために必要
- ネストされた仮想マシンをインストールすると、次のエラーが表示される:互換性のないハイパーバイザーを通して VMware ESX を実行しています。このハイパーバイザーが無効にならない限り、仮想マシンをパワーオンできません (2108724)
- ここで一度再起動
- ブラウザから、VMware Host Client に接続し、「vSwitch0」の設定から「無差別モード : 承諾」に設定する
- この設定を行わないと、ESXi を起動してしばらくするとネットワークが接続できなくなります。
- この設定を有効にしても不安定差が残るのですが、設定をしていない時よりは安定はします。
- ネットワークが切断されてしまった場合、ESXi Shell からNIC の Down -> Up を実行すると回復します。
- esxcli network nic down -n vmnic0 && esxcli network nic up -n vmnic0
- ESXi の vmnic インターフェイスのリンク状態をアップまたはダウンにする (2006074)
このような作業を実施することで、ESXi in Hyper-V を構築することができるかと。
Gen11 の NUC に ESXi をインストール
まだ実施はできていないのですが、Gen11 の NUC に ESXi をインストールすることもできるようです。
Gen11 の NUC では、NIC として、I225-LM (Device ID : 15F2) が使用されています。NIC のサポートについては、https://www.vmware.com/resources/compatibility/search.php?deviceCategory=io で確認できますが、I225-LM は標準ではサポートされていないので、Community Networking Driver for ESXi を使用する必要があります。(Gen8 Pro Model の NUC までであれば、標準でサポートされていると思います)
Adding Third-Party Drivers into VMWare ESXi 6.7 ISO Image の情報と組み合わせてカスタムイメージを作成すれば、Gen11 向けのインストールイメージを作ることができそうですね。
Hyper-V 上で ESXi を動作させることは可能ですが、使用できるバージョン / ネットワークの安定性で難があるので、実機を用意したほうがよさそうですね。