Nested Virtualization は仮想マシンからホストマシンの CPU の仮想化機能を利用できる機能です。
VirtualBox では AMD CPU の Nested Virtualization が 6.0.6 でリリースされました。そして 6.1.0 で Intel CPU でも Nested Virtualization が利用できるようになりました。
Changelog – Oracle VM VirtualBox
リリースノートには、
starting with 5th generation Core i, codename Broadwell
とあり、僕の MacBook Pro Early 2015 は ギリギリ第5世代ですので使えるはずです。
現バージョンでは仮想マシン名を指定して個別に有効化する必要があります。
'Ubuntu 18' という仮想マシンに対して Nested Virtualization を有効化するには以下を実行します。
$ VBoxManage modifyvm 'Ubuntu 18' --nested-hw-virt on
これで、有効化されました。
仮想マシンを起動して CPU がハードウェア仮想化をサポートしているか確認してみます。
KVM/Installation - Community Help Wiki
$ egrep -c '(vmx|svm)' /proc/cpuinfo 1
この数値が1以上ならサポートされているので OK です。KVM2 をインストールしてみます。
$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
インストールが終わって KVM acceleration が利用可能になったかチェック。
$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
大丈夫みたいです。
/dev/kvm へのアクセス権をログインユーザーに付与します。
$ sudo chown <username> /dev/kvm
libvirt でエラーがないことを確認。
$ virt-host-validate virt-host-validate QEMU: Checking for hardware virtualization : PASS : QEMU: Checking for cgroup 'blkio' controller mount-point : PASS QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform) LXC: Checking for Linux >= 2.6.26 : PASS : LXC: Checking if device /sys/fs/fuse/connections exists : PASS
OK でした。
/etc/libvirt/libvirtd.conf
に以下の設定を追加
unix_sock_group = "libvirtd" unix_sock_ro_perms = "0770" unix_sock_rw_perms = "0770"
いったんリブートしておきます。
KVM を使って Ubuntu の仮想マシンに CentOS 7 仮想マシンをインストールしてみます。
$ curl -LO http://ftp.riken.jp/Linux/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso $ sudo kvm -hda centos7.img -cdrom CentOS-7-x86_64-DVD-1908.iso -boot once=d -m 512
インストーラが起動。
インストーラの GUI が起動しました。
ソフトウェアインストール後の initramfs の初期化などにすごく時間がかかっていましたが、なんとかコンソールが起動しました。
ホストマシンが実機の場合は当たり前の光景ですが、これが仮想マシン内で実行されているのは中々凄いですね。
QEMU で仮想マシンが動くなら、Minikube で KVM も使えそうです。
以前 Minikube を macOS の HyperKit と Windows の Hyper-V で使ってみました。
Linux 版の Minikube をインストールします。
https://minikube.sigs.k8s.io/docs/start/linux/
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_1.7.2-0_amd64.deb \ && sudo dpkg -i minikube_1.7.2-0_amd64.deb
vm-driver に kvm2 を指定して minikube を実行
CPU が振り切ったまま、マウスカーソルすら表示されなくなってしまいました。
ということで、マシンパワーが足りないのか VirtualBox 側の最適化が足りないのか、僕の環境では実用的な速度では動きませんでした。もう少し熟成を待つ方がよさそうです。