雑木林

頭の中の整理と忘れないための確認メモ

Nested Virtualizationの設定について(ESXi6)

複数のサーバ仮想化ソフトウェアを勉強する上で、限られた物理リソース上で如何にしてインフラ環境を整備するか問題に悩まされる方は多いのではないでしょうか。少なくとも私はよく悩まされます。そういったときに仮想マシン上でハイパーバイザが動かせればいいのに、と思うことが多いのではないでしょうか。
今回、VMWare ESXi上にESXiをインストールし、更にその上で64bitOSを動作させるまでの手順について、ESXi5.5でやった設定がESXi6.0でも利用できるのことを確認したので、備忘録として記載します。

【5/19 追記】
ESXi on ESXiの上で仮想マシンが通信するにはスイッチの設定も必要のため、こちらもご確認ください。


ゲストOSを動作させるために必要なもの

いわゆる仮想化支援機能と呼ばれるもので、Intel VTが代表的です。Intel VTは実はIntelが提供している仮想化支援技術の総称であり、いくつかの技術があるの(詳しくはWikipedia参照)ですが、x86サーバを仮想化する上で必要となるのはVT-xです。これがあればその上で32bitだろうが64ビットだろうがx86サーバを仮想化して動作することができます。自身のPCが対応しているかを確認するにはBIOS設定を見るなり、grep vmx /proc/cpuinfoするなり、VirtualCheckerを使うなりすれば確認できます。

Nested Virtualizationをするにはどうすればいいのか

端的にいうとVT-xを使って作成した仮想マシン上でVT-xを動作することを許可すればよいのです。ただし、これは利用する仮想化ソフト(ハイパーバイザ)によって手順は様々ですし、ソフトウェアによってはできない場合もあります。Nested Virtualizationができない代表としてはOracleのVirtual Boxでしょうか。現在公開中の5.xのβ版からはできるようになっているようですが。

仮想マシン上でVT-xが許可されていない場合の動作

インストール時にVT-xが無いため、警告が表示されます(インストール自体は可能)
f:id:zokibayashi:20150417000722p:plain

インストール後、仮想マシン上のESXiで64bitのOSを利用するゲストを作成しても起動しません。
(動作OSを32bitに設定すると仮想マシンは起動し、利用することが可能です。)
f:id:zokibayashi:20150417003208p:plain

これはESXiがVT-xを64bitOSを動作させるためだけに使用していることが理由のようです。とはいっても最近のOSは32bit版の提供をやめているところが多いため、VT-xが使えないと色々と苦労します。

ESXi上でNested Virtualizationをする

ESXi5.5もESXi6.0も手順は同じです。

SSHサービスを起動する

デフォルトESXiの設定ではSSHが停止しているため、サービスを起動します。
vSphere Clientで接続した場合、[構成] -> [セキュリティプロファイル] -> [サービス の プロパティ]をクリックします。
f:id:zokibayashi:20150417003417p:plain

[SSH]を選択し、[オプション]をクリックします。f:id:zokibayashi:20150417003458p:plain

[開始]をクリックすればSSHサービスが起動します。
f:id:zokibayashi:20150417003549p:plain

SSHでログインする

通常のSSHと同様ですが、チャレンジレスポンス方式でログインする必要があります。

設定ファイル(/etc/vmware/config)を編集する

設定ファイル(/etc/vmware/config)の最終行に vhv.enable = "TRUE" を追記します。

[root@localhost:~] cat /etc/vmware/config

libdir = "/usr/lib/vmware"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.proxy.nfcssl = "vmware-hostd:ha-nfcssl"
authd.proxy.vpxa-nfcssl = "vmware-vpxa:vpxa-nfcssl"
authd.proxy.vpxa-nfc = "vmware-vpxa:vpxa-nfc"
authd.fullpath = "/sbin/authd"
vhv.enable = "true"

hostdを再起動する

hostdを再起動することで仮想マシン上でもVT-xが有効になります。

[root@localhost:~] /etc/init.d/hostd restart
watchdog-hostd: Terminating watchdog process with PID 34044
hostd stopped.
Ramdisk 'hostd' with estimated size of 67MB already exists
hostd started.

終わったらsshを閉じ、サービスを停止すること。

余談

vhv.enable = "TRUE"はVMWare Playerでも有効です。ただし、/etc/vmware/configのような設定ファイルではなく、仮想マシンそのものの設定ファイル(デフォルトだとC:\ユーザ\ユーザ名\マイ ドキュメント\Virtual Machines\仮想マシン名\仮想マシン名.vmx)に追記することで設定できます。ノートPCでもメモリさえ積めば複数のハイパーバイザを試すことができるので、人によっては重宝する設定かもしれません。