原文はこちら。
https://blogs.oracle.com/cloud-infrastructure/nested-kvm-virtualization-on-oracle-iaasWhy KVM Nested Virtualization?
Nested virtualizationを使えば、物理ホストのハードウェアアクセラレーションを使いつつ、仮想マシン(VM)を別のVM内で実行できます。簡単なプロビジョニングプロセスで、エンタープライズや通常のユーザーに対し、ワークロードの要件に基づいて低コストかつ大きな柔軟性を提供します。このエントリでは、Oracle Cloud Infrastructure(OCI)KVMハイパーバイザー仮想マシンの上にKVMゲストをインストール、構成、および使用する手順を紹介します。このプロセスは、Nested KVM Virtualizationとも呼ばれます。Getting Started
以下は、KVMハイパーバイザーホストとして利用できる現在のシェイプオプションです(注:原文執筆時(2017/10/27)の情報は古いため、最新情報のためにURLに差し替えています)。 環境で使用できる現行のオプションと機能については、Oracle Cloud Infrastructureのパブリック・ドキュメントを参照した後、作業負荷要件に基づいて仮想マシン・シェイプを選択し、プロビジョニングしてから手順を薦めてください。Oracle Compute Infrastructure - Launching an Instance
https://docs.us-phoenix-1.oraclecloud.com/Content/Compute/Tasks/launchinginstance.htm
Bare Metal Shapes
https://cloud.oracle.com/infrastructure/compute/bare-metal/features
VM Shapes
https://cloud.oracle.com/en_US/infrastructure/compute/virtual-machine/features
Requirements
- Oracle Linux 7.xを実行する仮想マシンインスタンス(KVMをサポートしている限り、他のLinuxディストリビューションも使用できます)
- サード・パーティのアプリケーション・ライセンスをOracle Cloud Infrastructureに持ち込む場合、KVM Server Instance上で使用しているサード・パーティのOS/アプリケーション・ベンダーとのライセンス義務を負います
- ゲストVMのインストールのために、KVM VM OSのISOファイルをKVMサーバインスタンスにアップロードする必要があります
- 追加のブロックストレージボリュームをNested KVM Serverインスタンスに接続し、KVM VM qcow2ディスクイメージファイルを保持することを推奨します。また、KVM VM qcow2ディスクイメージファイル用に、iSCSIブロックストレージをアタッチせず、NVMeディスク付きのVM.DenseIOシェイプも利用できます。
Installing KVM
KVMハイパーバイザー用に利用する仮想マシンをプロビジョニング後、以下のコマンドを実行して最新のqemuパッケージをvirt-managerと共にインストールします。$ sudo yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
Installing VNC and Xorg packages for GUI Remote Connection
以下のコマンドを実行して、VNCとXorgパッケージをインストールします。これらのパッケージを使って仮想マシンのGUIを使ってKVMゲストを管理できます。vncserver@.serviceを vncserver@:1.serviceにコピーします。$ sudo yum groupinstall "Server with GUI" -y
$ sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils tigervnc-server -y
vncserver@1.service のをユーザー名 "opc"に置き換え、vncserver@.serviceで定義済みのopcユーザー用のVNCパスワードを設定します。$ cd /lib/systemd/system
$ sudo cp vncserver@.service vncserver@:1.service
$ sudo vi vncserver\@\:1.service
VNC接続を許可するようfirewallサービスを構成します。### run the following command as opc user
$ vncpasswd
Password:
Verify:
$ exit
再起動時に自動起動するようにVNCサービスを有効化します。$ sudo firewall-cmd --permanent --zone=public --add-service vnc-server
$ sudo systemctl daemon-reload
$ sudo systemctl enable vncserver@:1.service
$ sudo systemctl start vncserver@:1.service
Preparing the KVM Server for IOMMU Passthrough and Nested Virtualization
Nested KVMサーバーを実行するには、まず仮想NICのパススルー(IOMMU)オプションを使用する機能を有効にした上で、Nested VMハイパーバイザーでNested KVMを有効化する必要があります。How to assign devices with VT-d in KVMOracle Linux 7.xのNested KVM仮想マシンインスタンスでは、以下の操作をします。
https://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM
保存してviを終了してから、以下のコマンドを実行します。### Backup Grub File
$ sudo cp /etc/default/grub /etc/default/grub.bck
### Edit grub and include the following opitons
$ sudo vi /etc/default/grub
### Append the following parameters in GRUB_CMDLINE_LINUX line
intel_iommu=on kvm-intel.nested=1
### Below is an example of how grub file should look like:
$ sudo cat /etc/default/grub |grep CMDLINE
GRUB_CMDLINE_LINUX="crashkernel=auto LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 ip=dhcp netroot=iscsi:169.254.0.2::::iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 intel_iommu=on kvm-intel.nested=1"
Using the OCIコンソールを使い、仮想クラウドネットワークセキュリティリストを編集し、(利用中のVNCで使っているポートが5901/tcpである場合)5901/tcpを有効化します。環境に応じてVNCポート番号を変更してください。### Enable tuned
$ sudo systemctl enable tuned
$ sudo systemctl start tuned
$ sudo tuned-adm profile virtual-host
### Recreate grub to validate all the changes
$ sudo cp /boot/efi/EFI/redhat/grub.cfg /boot/efi/EFI/redhat/grub.cfg.orig
$ sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
OCI Nested KVM VMインスタンスを再起動して、KVMカーネルモジュール、VNCおよびXorgサービスをロードします。 VMがオンラインに戻ったら、vncviewerのようなVNCアプリケーションを使用してKVM VMハイパーバイザーインスタンスに接続します。Source: 0.0.0.0/0
IP Protocol: TCP
Source Port Range: All
Destination Port Range: 5901
Allows: TCP traffic for ports: 5901
RealVNC Viewer
https://www.realvnc.com/en/download/viewer/
Creating an Oracle Cloud Infrastructure Secondary vNIC
続いてセカンダリvNICを作成し、それをKVM Nested VMインスタンスにアタッチします。このセカンダリvNICは、Nested VMゲストで使用します。OCIダッシュボードを使って、KVM Nested VMインスタンスの詳細をクリックし、[Attached vNIC]を選択し、[Create vNIC]をクリックします。以下の例では、アベイラビリティ・ドメイン1(AD1)でNew-BM-172と呼ばれるVirtual Cloud Network(VCN)を使用しています。vNIC作成後、以下のような表示が出ます。後で使用するため、MACアドレスとIPアドレス情報を覚えておいてください。
Associating OCI Secondary vNIC with the KVM Guest VM
ゲストをインストールする前に、KVM VM Hypervisorで以下のコマンドを実行します。以前の手順で作成したOCIセカンダリvNIC MACアドレスに一致するインターフェイスを特定します。上記のように、インタフェースens4は、KVMゲストのインストールプロセスで使用するインタフェースです。次の手順でKVMゲストVMをプロビジョニングし、上記のvNIC情報を追加します。$ sudo ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 00:00:17:01:16:5d brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 00:00:17:01:ce:47 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT
link/ether 52:54:00:40:76:12 brd ff:ff:ff:ff:ff:ff
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 500
link/ether 52:54:00:40:76:12 brd ff:ff:ff:ff:ff:ff
Creating a KVM guest instance
コマンドラインまたはグラフィカルツールでKVMを管理できますが、ここでは、GUIツールを中心に説明します。VNCを使用してOCI KVM Hypervisorインスタンスに接続し、gnome-terminalを開いて次のコマンドを実行します。virt-managerを初めて実行する場合、ローカルのQEMU/KVM接続を作成する必要があります。作成完了後、"Create a new Virtual Machine"ボタンをクリックし、図のように必要なオプションに従います。Requirementsの章に記載の通り、OSファイルはまずKVM Nested VMにアップロードする必要があります。SCPコマンドライン(MacまたはLinuxワークステーション)またはwinscp(Windowsワークステーション )を使うなどの方法でアップロードします。OS ISOファイルのアップロードが終了したら、KVM Guestのインストールプロセスを続行します。$ sudo virt-manager
Oracle® Linux Administrator's Guide for Release 7
Using scp and sftp to Copy Files Between Systems
https://docs.oracle.com/cd/E52668_01/E54669/html/ol7-s9-openssh.html
WinSCP - Uploading Files
https://winscp.net/eng/docs/task_upload
1- KVM Guestインストールを選択
2- セットアップに基づく情報を選択
3- KVMゲストVM上で利用するサービスワークロードに基づいてメモリやCPU設定を選択
4- ストレージのサイズおよび場所を設定
5- "Customize Configuration before install"を選択していることを確認して、finishをクリック
6- virt-managerのゲスト作成プロセスで追加されたデフォルトのNICをクリックしてPassthrough(パススルー)に変更し、識別したOCIセカンダリvNIC MACアドレスを正しいネットワークインターフェイス名(つまりens4)と一緒に追加します。
7- "Apply"をクリックして"Begin Installation"ボタンをクリックしてからは、通常のOSインストールプロセスに従います。
(注意)インストール中またはインストール後にネットワーク情報を追加する必要があるため、ネットワーク構成として静的IP(上記で作成したセカンダリvNICに基づくIP情報を使用)とDNS(サーバーと検索ドメインオプション)、ゲートウェイIPを設定することをお忘れなく。
Additional Security Recommendations
- SSHパスワード認証を無効にし、SSH鍵認証を有効にする(/home/opc/.ssh/authorized_keysファイルにssh公開鍵を追加)
- KVMゲストファイアウォールを有効にしておき、必要なポートだけを開ける
- KVMゲストVMに定期的にパッチを適用する
- 可能であればVPNを使用する
- VNCポートをブロックしたままにし、 "ssh -L"(SSHポートフォワード)を使用して、OCI Nested KVM VMハイパーバイザーとローカルホスト間にトンネルを作成し、暗号化されたチャネルを介してVNCを使用できるようにする
Conclusion
Oracle Cloud InfrastructureでNested KVMハイパーバイザーを設定する方法を説明しました。これは、旧バージョンのKVM上で実行中のアプリケーションに対処したり、オンプレミスのインフラストラクチャコストを削減して、KVM環境をクラウドに移行するのに最適な方法です。Oracle Cloud Infrastructureは、仮想マシンやベアメタル・シェイプ上で直接実行するための完全なKVMサポートを備えていますし、別のユースケースには、既存のKVM環境の移行および管理においてRavelloも適しています。Ravello Service - Oracle Cloud
https://cloud.oracle.com/ja_JP/ravello