CentOS 7によるNested KVM環境の構築とLXCネットワーク


一般に言われる「Nested Virtualization」とは仮想マシンの中でハイパバイザ(Hypervisor)を実行可能とする機能を指します。
Nested Virtualizationをサポートするプラットフォームとしては今回取り上げるKVMの他にVMware ESX(i), Xen, Microsoft Hyper-Vがあります。
※個別には、Nested KVM, Nested ESXi, Nested Xen, Nested Hyper-Vとも呼ばれます。

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

Nested KVMで最もシンプルなものはL0,L1,L2すべてが同じOSのカーネルを使用することです。
今回はCentOS 7のKVMを使用したNested KVM環境の構築例やKVMと他のHypervisorを組み合わせた「Hypervisor混在型Nested Virtualization」の構築例、更にはKVMとLXCの同時実行とLXCネットワークについてもご紹介致します。
(Nested KVMについてはhttps://wiki.archlinux.org/index.php/KVMに簡単な説明があります)

今回使用したPCのハードウェア/ソフトウェア構成は以下の通りです。


■ CentOS 7のL0構築
  1. インストール上のポイント

  2. インストール完了後のパッケージ追加
    今回のテーマはNested KVM環境の構築ですがXen機能の検証目的も考慮してKVM関連パッケージとXen関連パッケージの両方を追加インストールしました。
    yum install ftp
    yum groupinstall "Virtualization Host" ※KVM関連パッケージのインストール
    yum install centos-release-xen
    yum update
    yum install xen
    grub-bootxen.sh ※ブートメニューでXenブートをデフォルトにするシェルの実行
    yum install virt-manager ※今回はvirt-installはインストールせず

    尚、SELINUXの無効化は任意です。

  3. KVMの有効性確認
    Intelマシンの場合は「lsmod|grep kvm」を実行して以下のような表示になればOKです。


  4. ブリッジデバイスbr0の作成
    KVM仮想マシンが実ネットワークに接続するために使用するブリッジデバイスbr0を以下の手順で作成します。
    下記はブリッジされたデバイスがenp4s1となる例ですので実際に使用するデバイス名やアドレスに置き換えてコマンド実行します。
    nmcli c add type bridge autoconnect yes con-name br0 ifname br0
    nmcli c modify br0 ipv4.addresses 192.168.0.248/24 ipv4.method manual
    nmcli c modify br0 ipv4.gateway 192.168.0.1
    nmcli c modify br0 ipv4.dns 192.168.0.240
    nmcli c delete enp4s1
    nmcli c add type bridge-slave autoconnect yes con-name enp4s1 ifname enp4s1 master br0
    systemctl stop NetworkManager
    systemctl start NetworkManager


■ CentOS 7のL1構築
  1. インストール上のポイント

  2. ライセンス条項への同意
    インストール完了後の再起動で「Initial setup CentOS Linux 7 (Core)」というライセンス条項画面が表示されます。
    [I accept the license agreement.]にチェックマークが付くように操作して続行します。



  3. デスクトップ操作確認



    ちなみに「kvmcentos7 仮想マシン」の[仮想マシン]-[USBデバイスのリダイレクト]でKVM仮想マシンからiPhone等のUSB接続も可能となります。

  4. kvmcentos7のシャットダウン

  5. Nested KVMの有効化

  6. kvmcentos7の起動
  7. kvmcentos7でのパッケージ追加
    このkvmcentos7仮想マシンはNested KVM検証用ですのでKVM関連パッケージだけ追加インストールします(Xen関連パッケージはインストールしません)。
    yum install ftp
    yum groupinstall "Virtualization Host" ※KVM関連パッケージのインストール
    yum install virt-manager ※今回はvirt-installはインストールせず
    lsmod|grep kvm ※kvm_intelとkvmという2行が表示されます

    尚、SELINUXの無効化は任意です。

  8. ブリッジデバイスbr0の作成
    kvmcentos7内の更なるKVM仮想マシンが実ネットワークに接続するために使用するブリッジデバイスbr0を以下の手順で作成します。
    ここでのブリッジされたデバイス名はens3固定となります。
    nmcli c add type bridge autoconnect yes con-name br0 ifname br0
    nmcli c modify br0 ipv4.addresses 192.168.0.249/24 ipv4.method manual
    nmcli c modify br0 ipv4.gateway 192.168.0.1
    nmcli c modify br0 ipv4.dns 192.168.0.240
    nmcli c delete ens3
    nmcli c add type bridge-slave autoconnect yes con-name ens3 ifname ens3 master br0
    systemctl stop NetworkManager
    systemctl start NetworkManager


■ CentOS 7のL2構築
  1. インストール上のポイント

  2. ライセンス条項への同意
    CentOS 7のL1構築の場合と操作は同じです。

  3. デスクトップ操作確認



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

  4. l2kvmcentos7のシャットダウン



■ SLES 11 SP4によるL1/L2構築
上記はL0/L1/L2すべてがCentOS 7でL0/L1のKVM Hypervisorも同じCentOS 7のものでした。
ここからはL1としてSUSE Linux Enterprise Server(SLES) 11 SP4のKVM Hypervisorを使用する場合とそのXen Hypervisorも使用する場合についてご紹介します。
(1)SLES 11 SP4のKVM Hypervisorを使用するL1上のL2はSLES 11 SP4の通常カーネルです。
(2)SLES 11 SP4のXen Hypervisorを使用するL1上のL2はSLES 11 SP4のXenカーネルです。


■ SLES 11 SP4のL1構築
  1. インストール上のポイント

  2. デスクトップ操作確認
    この時点でのL1についてはNested KVMの設定を実施していないためKVM HypervisorはロードされていないためKVM仮想マシンの作成はエラーとなります。



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

  3. kvmsles11xsのシャットダウン

  4. Nested KVMの有効化

  5. Xenブートでの完全仮想化対応確認
    kvmsles11xsの構成ファイルでのcpu modeの設定変更により、実機のCentOS 7側の仮想マシンマネジャからkvmsles11xsを起動してkvmsles11xsをXenカーネルでブートして「仮想マシンの作成」を起動すると仮想化方式で完全仮想化が選択可能になっています。


■ SLES 11 SP4のL2構築(KVM仮想マシンとしての構築編)
  1. インストール上のポイント

  2. L1のXen Hypervisor使用のためのL2仮想マシンの準備と起動手順
    SLES 11 SP4のL1ではKVMホストとして使用する場合とXenホストとして使用する場合があります。
    SLES 11 SP4のL1をXenホストとして使用する場合にはそのL1上で実行される仮想マシンを別に用意する必要があります。
    SLES 11 SP4のL1をXenホストとして使用する場合のL2仮想マシンは以下の手順で簡単に揃えることができます。


■ SLES 11 SP4の代替L2構築(完全仮想化Xen仮想マシンとしての構築編)
KVM仮想マシンとして構築した上記のl2kvmsles11についてはXen仮想マシンとして実行させた場合にマウス使用に支障が出るという問題がありました。
そこでそのマウス問題を回避させるためのSLES 11 SP4の代替L2を完全仮想化Xen仮想マシンとして構築する手順を以下に紹介します。
  1. インストール上のポイント

  2. L1のXen Hypervisor使用のためのL2仮想マシンディスクの準備と起動手順
    kvmsles11xsの仮想マシンマネジャからl2fvsles11kxを起動してXenカーネルブートすると以下のメッセージが出てブート不可となります。
    ※l2fvsles11kxのXenカーネルブートはGRUBメニューの[Xen -- SUSE ...]ではなく[SUSE Linux ... (XEN)]選択で行います。
    Could not find /dev/hda2.
    Want me to fall back to /dev/hda2? (Y/n)
    ※Yを応答してもブート不可
    この対策としてkvmsles11xsをXenカーネルブートできるようにする仮想ディスクを以下の手順で準備します。
  3. SLES 11 SP4の代替L2におけるKVM利用問題
    後述部分(Xen環境でのKVMの動作:可能)で示すようにSLES 11 SP4 Xen Hypervisor上でCentOS 7 KVM Hypervisorは問題なく動作しその中で更にKVM仮想マシンも作成できます。
    しかしSLES 11 SP4 Xen Hypervisor上ではSLES 11 SP4 KVM Hypervisorは期待通りの動きにはなりませんでした。
    以下はその備忘録です。


KVMとLXCの同時実行とLXCネットワーク
  1. KVMとLXCの同時実行
    LXC(Linuxコンテナ)はchrootベースの超軽量タイプの仮想化技術です。
    LXCのCentOS 7のコンテナテンプレートを使ってCentOS 7コンテナを作成してKVM環境でも実行できることを確認してみました。

  2. LXCネットワーク
  3. CentOS 7コンテナのGUIアプリの利用
    CentOS 7コンテナにGUIアプリがインストールされていればCentOS 7コンテナにssh接続してそのGUIアプリを起動して利用することが可能となります。
    ここではCentOS 7コンテナにssh接続してGNOME-Terminalを起動する方法を簡単に紹介します。
    尚、ここでのファイアウォールの設定については割愛させて戴きます。


■ ご参考1:L0(KVM)へのESXi/Hyper-Vインストールについて


■ ご参考2:KVM以外のHypervisor環境でのKVMの動作可否について