🎩
KVM構築
主要パッケージ
パッケージ名 | 説明 |
---|---|
libvirt | 仮想マシンを管理するための基盤となるツール |
qemu-kvm | Linux 上で仮想化環境を提供するハイパーバイザ |
virt-install | 仮想マシンをコマンドラインから作成・管理するツール |
cockpit-machines | Webブラウザから仮想マシンを簡単に作成・管理できるGUIツール |
環境
# uname -a
Linux pigukvm 4.18.0-553.32.1.el8_10.x86_64 #1 SMP Wed Dec 11 16:33:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
ハイパーバイザー設定
▽ モジュール・パッケージインストール
# dnf module -y install virt ///仮想化ツールのセットを含むモジュール(libvirt,qemu-kvm)
# dnf install -y virt-install cockpit-machines
▽ モジュール確認
# lsmod | grep kvm
kvm_intel 348160 0 ///Intel プロセッサ用の KVM モジュール
kvm 970752 1 kvm_intel ///KVM の基本モジュール
irqbypass 16384 1 kvm ///割り込み処理の最適化モジュール
▽ KVM ハードウェア要件の検証
# 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 は、I/O デバイスの仮想化を支援する技術。
弊環境だと Intel VT-d(Intel Virtualization Technology for Directed I/O)にて以下を支援する。
このため設定を有効化しておく。
・ネットワークカードの直接利用(ネットワーク I/O の最適化)
・ストレージデバイスの仮想マシンへの割り当て
secure guest support は、データの暗号化や、ホストとゲスト間のセキュリティ隔離をする技術。
弊環境だと Intel TDX(Trusted Domain Extensions)にて実現する。
仮想環境毎に顧客提供する場合は必要となりそうだが、今回は利用者が私だけのため不要。
▽ IOMMUの有効化
# cp -ip /etc/default/grub{,_`date +%Y%m%d`bk}
# ls -l /etc/default/grub{,_`date +%Y%m%d`bk}
///追加でselinux,ipv6も無効化する
# vi /etc/default/grub
# diff /etc/default/grub{,_`date +%Y%m%d`bk}
6c6
< GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap selinux=0 ipv6.disable=1 intel_iommu=on"
---
> GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap"
///grub.cfgは環境によってPathが異なる。指定するPathを誤ると起動できなくなるため要注意
# grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
# systemctl reboot
///再ログインし、適用後の確認をする
# getenforce
# ip a
# virt-host-validate
→IOMMUが"警告"から"成功"になっていること
▽ 必要サービスの有効化
# systemctl enable --now libvirtd.service ; systemctl status libvirtd.service
# systemctl enable --now cockpit.socket ; systemctl status cockpit.socket
///cockpitはソケットユニット経由でサービスユニットを都度起動し、リソースを有効活用する
▽ ゲストOS用のIOS準備
# mkdir /iso ; cd /iso
# dnf install -y wget
# wget https://ftp.iij.ad.jp/pub/linux/rocky/8.10/isos/x86_64/Rocky-8.10-x86_64-minimal.iso
# ls -l Rocky-8.10-x86_64-minimal.iso
仮想マシン作成
▽ CockpitのWebコンソールへ接続
https://IPアドレス:9090/
▽ ブリッジ作成
左ペインにある「ネットワーキング」- 「ブリッジの追加」をクリックする。
「ens160」にチェックし、「追加」ボタンをクリックする。
「bridge0」が追加されていること。
▽ 仮想マシン作成
左ペインにある「仮想マシン」- 「仮想マシンの作成」をクリックする。
仮想マシンの各項目を設定後、「作成して実行する」をクリックする。
項目 | 設定値 |
---|---|
名前 | 任意 |
インストールタイプ | ローカルインストールメディア |
インストールソース | /iso/Rocky-8.10-x86_64-minimal.iso |
オペレーティングシステム | Rocky Linux 8 (Green Obsidian) |
ストレージ | qcow2ボリュームの新規作成 |
ストレージの制限 | 10GiB |
メモリ | 2GiB |
仮想マシンの状態が「VM作成中」から「Running」になること
▽ 仮想マシンにOSインストール
「名前」欄の仮想マシン名をクリックする。
「コンソール」-「展開」をクリックする。
通常のインストール作業を実施する。
再起動後、コンソール画面からログインし、「ip a」コマンドでIPアドレスを確認する。
仮想マシン設定
ハイパーバイザーからゲストOSに操作する。
▽コンソール接続設定
# ssh ゲストOSのIPアドレス
# cp -ip /etc/default/grub{,_`date +%Y%m%d`bk}
# ls -l /etc/default/grub{,_`date +%Y%m%d`bk}
///コンソール接続できるように設定する。追加でselinux,ipv6も無効化する。
# vi /etc/default/grub
# diff /etc/default/grub{,_`date +%Y%m%d`bk}
6c6
< GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap selinux=0 ipv6.disable=1 console=ttyS0,115200n8r"
---
> GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap selinux=0 ipv6.disable=1 console=tty0 console=ttyS0,115200n8r"
/// コンソール設定
console=ttyS0,115200n8r
ttyS0:シリアルポート
115200: ボーレート(通信速度)
n: パリティなし
8: データビット数が8ビット
r: Raw モードで通信し、CR をそのまま処理
# grub2-mkconfig -o /boot/grub2/grub.cfg
# systemctl reboot
# virsh list --all
Id 名前 状態
---------------------------
2 pigugeust1 実行中
# virsh console pigugeust1
piguoguest1 login:
Discussion