KVMによる仮想基盤サーバの構築と仮想マシンの作成 (RHEL 8)
Contents
はじめに
以前の記事で、まだメジャーバージョンアップしたてのCentOS 8.0を使用して仮想基盤サーバの構築を行いました。その際、CockpitのWebコンソールからネットワーク設定がうまくできず、中途半端にCLIを使用した手順となってしまいました。
参考:
KVMによる仮想基盤サーバの構築と仮想マシンの作成 (CnetOS 8)
ここ最近は、Red Hat Developer Programに参加してRHELを使う機会が増えてきたので、現行バージョンのRHEL 8.3で仮想基盤サーバの構築に再チャレンジしてみました。CockpitのWebコンソールが以前から改善されたので、Webコンソールのみでネットワーク設定および仮想マシンの作成を実施します。
前提条件
以下の前提条件で検証しています。
ハードウェア
- Asrock Deskmini 110
- CPU: Core i5 6500 (4C/4T)
- RAM: DDR4-2133 32GB
- SSD: 2.5inch SATA III 120GB
ソフトウェア
- Red Hat Enterprise Linux 8.3 (仮想基盤サーバ)
- qemu-kvm: 4.2.0
- libvirt-daemon: 6.0.0
- virt-install: 2.2.1
- cockpit: 224.2
- CentOS Stream 8 (仮想マシン)
仮想基盤サーバのRHELは以下記事の手順をベースに、Red Hat Developer Subscription for Individualsを使用して物理筐体にOSのインストールが完了している状態から作業を始めます。
Red Hat Developer Programに参加してRHEL 8.3をインストール(前編)
Red Hat Developer Programを利用してRHEL 8.3をインストール(後編)
【RHEL 8】macOSでUSBメモリ インストールメディアを作成
ネットワーク
ネットワーク構成は以下の通りです。
仮想基盤を接続するネットワークとして、Service
(サービスLAN / VLAN200)とMgmt
(管理LAN / VLAN101)の2つを用意します。仮想基盤サーバのOSインストール時に、物理NIC(enp0s31f6
)を親とする論理的なVLANインターフェースを2つ作成し、タグVLANの通信が行えるようにしておきます。
$ nmcli con
NAME UUID TYPE DEVICE
vlan200 039aaf93-a1a0-4b07-a05a-dfd6fbc8d99f vlan vlan200
vlan101 22c1b684-0114-44ff-ab36-f3eaca294f98 vlan vlan101
enp0s31f6 a6cec391-f590-4757-ac9e-c844abc8839c ethernet enp0s31f6
仮想基盤サーバのデフォルトゲートウェイは、対向機器(ファイアウォール)のService
ネットワーク側IPアドレスを指定します。なお、デフォルトゲートウェイの設定のみでは、既存のHome
ネットワークから仮想基盤サーバのMgmt
ネットワーク側ポートに対して管理用の通信を行う際、戻りの通信経路が非対称になってしまいます。管理通信の行きと戻りの経路を一致させるために、対向機器(ファイアウォール)のMgmt
ネットワーク側IPアドレスをネクストホップとしたHome
ネットワーク向けのスタティックルートを追加します。
# ip r
default via 192.168.200.1 dev br200 proto static metric 426
192.168.100.0/24 via 192.168.101.1 dev br101 proto static metric 425
192.168.101.0/24 dev vlan101 proto kernel scope link src 192.168.101.10 metric 425
192.168.200.0/24 dev vlan200 proto kernel scope link src 192.168.200.10 metric 426
その他
各手順はroot権限を持つユーザで実施しています。
OSは、RHELインストールDVDのISOファイルから「最小限のインストール」の構成でインストールしました。
必要パッケージのインストール
DNFのモジュール機能を使用して、仮想環境パッケージ一式を含むvirt
をインストールします。併せて、仮想マシンのOSインストールを行うツールであるvirt-install
、Webコンソールから仮想マシンを管理するためのcockpit-machines
もインストールします。
# dnf module -y install virt
# dnf install -y virt-install cockpit-machines
仮想化支援機能の確認
仮想基盤サーバの内部環境における仮想化支援機能の確認を行います。
# virt-host-validate
QEMU: 確認中 for hardware virtualization : 成功
QEMU: 確認中 if device /dev/kvm exists : 成功
QEMU: 確認中 if device /dev/kvm is accessible : 成功
QEMU: 確認中 if device /dev/vhost-net exists : 成功
QEMU: 確認中 if device /dev/net/tun exists : 成功
QEMU: 確認中 for cgroup 'cpu' controller support : 成功
QEMU: 確認中 for cgroup 'cpuacct' controller support : 成功
QEMU: 確認中 for cgroup 'cpuset' controller support : 成功
QEMU: 確認中 for cgroup 'memory' controller support : 成功
QEMU: 確認中 for cgroup 'devices' controller support : 成功
QEMU: 確認中 for cgroup 'blkio' controller support : 成功
QEMU: 確認中 for device assignment IOMMU support : 成功
QEMU: 確認中 if IOMMU is enabled by kernel : 警告 (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
QEMU: 確認中 for secure guest support : 警告 (Unknown if this platform has Secure Guest support)
上記の例では、IOMMUとsecure guestに関する警告が表示されました。
IOMMU
IOMMUは、物理PCIデバイスを仮想マシンでそのまま使用できるPCIパススルーと呼ばれる仮想化支援機能で使用する技術です。警告の原因は、以下が挙げられます。
- CPU / マザーボードがIOMMU(Intel VT-d / AMD-V)に対応していない
- BIOS / UEFIで上記設定が有効化されていない
- カーネルのIOMMU機能が有効化されていない
IOMMUが使用できなくても仮想マシンの作成は可能ですが、可能であれば有効化しておくのが望ましいです。BIOS / UEFIの設定については、ホストマシンのマザーボードのマニュアルを参照してください。
device assignment IOMMU support
の行が成功
と表示される場合はハードウェア側でIOMMUがサポートされているので、ブートローダの設定を変更してカーネルのIOMMU機能を有効化します。viなどのテキストエディタでGRUB2の設定ファイルを開きます。
# vi /etc/default/grub
変更箇所は以下の通りです。CPUがIntel製の場合、GRUB_CMDLINE_LINUX
の末尾にintel_iommu=on
を追記します。CPUがAMD製の場合は、amd_iommu=on
を追記します。
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
↓
GGRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet intel_iommu=on"
変更したGRUB2設定ファイルから、GRUB2が実際に使用するファイルを作成します。その後、OSの再起動を行います。
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for EFI firmware configuration
done
# reboot
secure guest
secure guestについて、Intel CPUではそもそもチェックが行われない旨の記事をWeb上で見つけました。今回は警告を無視して先に進めることにします。
QEMU: WARN (Unknown if this platform has Secure Guest support)
サービスの起動
仮想基盤サービスを提供するlibvirtd
サービスの自動起動設定と起動を行います。
# systemctl enable --now libvirtd.service
Webコンソール機能を提供するcockpit
ソケットの自動起動設定と起動を行います。systemctlの管理上cockpit
はサービスユニットではなくソケットユニットなので、.socket
をユニット名の末尾に付与して、ソケットユニットであることを明示します。
# systemctl enable --now cockpit.socket
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.
OSインストール用ISOファイルの用意
仮想マシンにOSをインストールするためのISOファイルを用意します。今回は、CentOS Stream 8のインストールDVDのISOファイルを/iso
に保存します。
curl
コマンドの引数に指定するURLのファイル名は頻繁に変更されるので、ミラーリポジトリのリストから任意のリポジトリを開き、CentOS-Stream-8-x86_64-yyyymmdd-dvd1.iso
のリンク先URLを都度確認してください。
# mkdir /iso
# cd /iso
# curl -LO http://ftp.riken.jp/Linux/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-20210427-dvd1.iso
ネットワーク設定
Webコンソールへの接続
作業端末のWebブラウザからCockpitのWebコンソールへ接続します。URL中のIPアドレスは各自の環境に置き換えてください。
https://192.168.101.10:9090/
「ユーザー名」「パスワード」に、管理者権限を持つOSユーザの情報を入力して「ログイン」をクリックします。
ブリッジインターフェースの作成
初期設定の仮想ネットワークdefault
はvirbr0
を経由してNATによる外部ネットワークとの通信が行えますが、外部ネットワークから仮想マシンへの通信には、ファイアウォールにスタティックルートを都度設定する必要があり不便です。外部のネットワークに直結した仮想ネットワークを作成するため、新たにブリッジインターフェースを仮想基盤サーバのホストOS上に作成します。
ダッシュボード画面で「ネットワーキング」をクリックします。
「ブリッジの追加」をクリックします。
「名前」にbr101
を入力し、「ポート」でvlan101
にチェックを付け「適用」をクリックします。
vlan101
を子ポートとして収容したブリッジインターフェースbr101
が作成されました。IPアドレスは、もともとvlan101
に付与していたものが自動的に引き継がれます。同様の手順で、vlan200
を子ポートとして収容するbr200
も作成します。
ブリッジインターフェースとして、br101
とbr200
が存在することを確認します。
仮想マシンの作成
仮想基盤の環境構築が完了したので仮想マシンを作成します。
仮想マシンの作成
「仮想マシン」→「仮想マシンの作成」をクリックします。
以下画像の通りパラメータを指定し、「作成」をクリックします。仮想マシンの設定はまだ完了していないので、「仮想マシンをすぐに起動」のチェックは外しておきます。
ファームウェアをUEFIに変更します。「BIOS」をクリックします。
選択欄に「UEFI」を指定して「保存」をクリックします。
「ネットワークインターフェース」タブを開き、デフォルトで作成されたネットワークインターフェースの「編集」をクリックします。
「インターフェース形式」がBridge to LAN
、「ソース」がbr200
、「モデル」がvirtio (Linux, perf)
になっていることを確認し、「保存」をクリックします。
「ネットワークインターフェイスの追加」をクリックします。
「インターフェース形式」をBridge to LAN
、「ソース」をbr101
、「モデル」をvirtio (Linux, perf)
、「MACアドレス」を自動生成
に指定し、「追加する」をクリックします。
ネットワークインターフェースの設定が完了すると以下の状態となります。
仮想マシンのOSインストール
「コンソール」タブを開き、「インストール」をクリックします。
仮想マシンが起動してCentOS StreamのISOファイルからブートメニューが表示されるので、「Install CentOS Stream 8-stream」を選択、Enterキーを押下します。
CentOS Streamのインストーラが起動します。この後は、物理マシンにインストールする場合と同様にインストーラを進めていくことで、仮想マシンのOSインストールは完了します。
なお、作業環境によってはコンソールのマウスポインタの位置座標がずれてしまう場合があります。その場合はマウスの代わりにTabキーやSpaceキーを使用してインストーラのGUIを操作します。