KVMによる仮想基盤サーバの構築と仮想マシンの作成 (RHEL 8)

はじめに

以前の記事で、まだメジャーバージョンアップしたての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ユーザの情報を入力して「ログイン」をクリックします。

ブリッジインターフェースの作成

初期設定の仮想ネットワークdefaultvirbr0を経由してNATによる外部ネットワークとの通信が行えますが、外部ネットワークから仮想マシンへの通信には、ファイアウォールにスタティックルートを都度設定する必要があり不便です。外部のネットワークに直結した仮想ネットワークを作成するため、新たにブリッジインターフェースを仮想基盤サーバのホストOS上に作成します。

ダッシュボード画面で「ネットワーキング」をクリックします。

「ブリッジの追加」をクリックします。

「名前」にbr101を入力し、「ポート」でvlan101にチェックを付け「適用」をクリックします。

vlan101を子ポートとして収容したブリッジインターフェースbr101が作成されました。IPアドレスは、もともとvlan101に付与していたものが自動的に引き継がれます。同様の手順で、vlan200を子ポートとして収容するbr200も作成します。

ブリッジインターフェースとして、br101br200が存在することを確認します。

仮想マシンの作成

仮想基盤の環境構築が完了したので仮想マシンを作成します。

仮想マシンの作成

「仮想マシン」→「仮想マシンの作成」をクリックします。

以下画像の通りパラメータを指定し、「作成」をクリックします。仮想マシンの設定はまだ完了していないので、「仮想マシンをすぐに起動」のチェックは外しておきます。

ファームウェアを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を操作します。

参考文献

仮想化の設定および管理

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です