KVMの3つの動作モード
クライアントモード: I/O以外のクライアントコードを実行し、仮想マシンがこのモードで稼働
ユーザーモード: ユーザーがI/Oコードを実行し、QEMUがこのモードで稼働
カーネルモード: CPUスケジューリングとメモリ管理関連
KVMの動作原理
ユーザーモードのQemuはlibkvmインターフェースを介してioctlシステムコールを通じてカーネルモードに入ります。KVMドライバは仮想マシン用の仮想CPUと仮想メモリを作成し、VMLAUNCH命令を実行してクライアントモードに入り、GuestOSをロードして実行します。GuestOSの実行中に割り込みやシャドウページフォaultなどの例外が発生すると、GuestOSの実行を一時停止し、現在のコンテキストを保存してカーネルモードに戻り、これらの例外を処理します。カーネルモードでこれらの例外を処理する際にI/Oが必要ない場合は、処理完了後に再度クライアントモードに入ります。I/Oが必要な場合はユーザーモードに入り、QemuがI/Oを処理し、完了後にカーネルモードに入り、さらにクライアントモードに入ります。
本ケースの実験環境
| ホスト | オペレーティングシステム | IPアドレス | 主要ソフトウェア |
| kvm01 | CentOS 7.9 x86_64 | 192.168.10.108 | KVM仮想マシン |
| kvm02 | CentOS 7.9 x86_64 | 192.168.10.109 |
ケース要件
- KVMのインストール
- 基本的なKVM操作管理(作成、起動、停止など)の完了
- KVMコマンドラインを使用した仮想マシン操作の完了
ケース実装の考え方
- KVM環境の準備
- KVMのインストール
- KVMブリッジネットワークの設定
- KVMストレージプールの作成と仮想マシンのインストール
- 仮想マシンのコマンドライン操作
KVM仮想化プラットフォームの構築
KVM仮想化環境の準備
1. インストール
(1) YUMによるKVMのインストール
dnf -y install qemu-kvm
dnf -y install qemu-kvm-tools
dnf -y install virt-install
dnf -y install qemu-img
dnf -y install bridge-utils
dnf -y install libvirt
dnf -y install virt-manager
dnf -y install libguestfs-tools
備考:
- qemu-kvm:KVMコアパッケージ - 仮想オペレーティングシステムエミュレータ加速モジュール
- qemu-kvm-tools:qemu-kvmのツールパッケージ
- virt-install:仮想マシンインストールツール
- qemu-img:QEMUのディスク管理ツール
- bridge-utils:仮想マシンと外部との通信を管理するコマンドツール
- libvirt:必須の核心ツール
- virt-manager:仮想マシングラフィカル管理ツール(ホストにデスクトップ環境がある場合にインストールを検討、コマンド操作またはリモート制御の場合は不要)
- QEMUは「Quick Emulator」の略称で、C言語で記述されたオープンソース仮想化ソフトウェア
- libguestfs-tools:仮想マシンのディスクイメージファイルにアクセスするためのコマンドセット
(2) シャットダウン後、CPUが仮想化をサポートするように設定し、再起動
(3) 起動後の検証
[root@kvm01 ~]# cat /proc/cpuinfo | grep vmx
[root@kvm01 ~]# lsmod | grep kvm
(4) libvirtdサービスの起動
インストール完了後、関連サポートを有効にするためにlibvirtdサービスを起動する必要があります。
[root@kvm01 ~]# systemctl start libvirtd
[root@kvm01 ~]# systemctl enable libvirtd
2. KVMネットワークの設定
ここではBridge(ブリッジ)を例に操作デモを行います
[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@kvm01 ~]# vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.108
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@kvm01 ~]# vim ifcfg-br0
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.108
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
[root@kvm01 ~]#systemctl restart network
[root@kvm01 ~]# ifconfig
3. KVM管理
[root@kvm01 ~]# virt-manager
(1) ストレージプールの作成
ストレージプール名:kvm_storage
ストレージプールディレクトリ:/var/lib/libvirt/images
(2) ストレージボリュームの作成
kvm_storageストレージプールにストレージボリュームを追加
ボリューム名:vm01
最大容量:10G
(3) LinuxシステムのISOファイルを/optディレクトリにコピーし、ストレージ設定を閉じる
(4) kvm01ホスト上で仮想マシンvm01を作成
KVMコマンドセットを使用した仮想マシンの管理
1. KVM基本機能管理
(1) コマンドヘルプの表示
[root@kvm01 ~]# virsh -h
(2) KVM設定ファイルの保存ディレクトリの表示
[root@kvm01 ~]# ls /etc/libvirt/qemu/
(3) 仮想マシン状態の表示
[root@kvm01 ~]# virsh list --all
(4) 仮想マシンのシャットダウンと起動
[root@kvm01 ~]# virsh shutdown vm01
[root@kvm01 ~]# virsh start vm01
(5) 仮想マシンの強制電源オフ
[root@kvm01 ~]# virsh destroy vm01
(6) 設定ファイルを使用した仮想マシンの起動
[root@kvm01 ~]# virsh create /etc/libvirt/qemu/vm01.xml
[root@kvm01 ~]# virsh list --all
(7) 仮想マシンのサスペンド
[root@kvm01 ~]# virsh suspend vm01
[root@kvm01 ~]# virsh list --all
(8) 仮想マシンのリジューム
[root@kvm01 ~]# virsh resume vm01
[root@kvm01 ~]# virsh list --all
(9) 仮想マシンインスタンスのホストと自動起動の設定
[root@kvm01 ~]# virsh autostart vm01
(10) 仮想マシン設定のエクスポート
[root@kvm01 ~]# virsh dumpxml vm01 > /etc/libvirt/qemu/vm02.xml
(11) 仮想マシンの削除と追加
仮想マシンの削除
[root@kvm01 ~]# virsh shutdown vm01
[root@kvm01 ~]# virsh undefine vm01
削除結果の確認:vm01の設定ファイルが削除されますが、ディスクファイルは削除されません。
[root@kvm01 ~]# ls /etc/libvirt/qemu/
virsh list --allでvm01の情報が見つからない場合、この仮想マシンが削除されたことを示します。
[root@kvm01 ~]# virsh list --all
バックアップされた設定ファイルを使用して仮想マシンを再定義します。
[root@kvm01 ~]# cd /etc/libvirt/qemu
[root@kvm01 qemu]# mv vm02.xml vm01.xml
仮想マシンの再定義
[root@kvm01 qemu]# virsh define vm01.xml
(12) 仮想マシン設定情報の変更(システムメモリサイズ、ディスクファイル情報などを変更するために使用)
vimコマンドを直接使用して変更
[root@kvm01 ~]# vim /etc/libvirt/qemu/vm01.xml
virshコマンドを使用して変更
[root@kvm01 ~]# virsh edit vm01
3. KVMファイル管理
(1) 現在のディスク形式の表示
[root@kvm01 ~]# qemu-img info /var/lib/libvirt/images/vm01.qcow2
(2) virt-catコマンド、catコマンドに類似
このコマンドを使用するにはlibguestfs-tools-cツールパッケージをインストールする必要があります。
[root@kvm01 ~]# virt-cat -a /var/lib/libvirt/images/vm01.qcow2 /etc/sysconfig/grub
(3) virt-editコマンド
virt-editコマンドはファイルの編集に使用され、vimと基本的に同じ使い方です。
[root@kvm01 ~]# virt-edit -a /var/lib/libvirt/images/vm01.qcow2 /etc/resolv.conf
(4) virt-dfコマンド
virt-dfコマンドは仮想マシンのディスク情報を表示するために使用されます。
[root@kvm01 ~]# virt-df -h vm01
4. 仮想マシンのクローン作成
(1) 仮想マシン状態の表示
[root@kvm01 ~]# virsh list --all
(2) vm01からvm02をクローン作成
[root@kvm01 ~]# virt-clone -o vm01 -n vm02 -f /var/lib/libvirt/images/vm02.qcow2
(3) 仮想マシン状態の表示
[root@kvm01 ~]# virsh list --all
(4) 仮想マシンの起動
[root@kvm01 ~]# virsh start vm02
5. 仮想マシンのスナップショット
KVM仮想マシンでイメージ機能を使用するには、ディスク形式がqcow2である必要があります。以下にKVM仮想マシンのスナップショットバックアップのプロセスを紹介します。
(1) vm01にスナップショットを作成
[root@kvm01 ~]# virsh snapshot-create vm01
ドメインスナップショット1503494464が生成されました
(2) 仮想マシンスナップショットのバージョン情報の表示
[root@kvm01 ~]# virsh snapshot-current vm01
(3) スナップショット情報の表示
[root@kvm01 ~]# virsh snapshot-list vm01
(4) 新しいスナップショットの作成
[root@kvm01 ~]# virsh snapshot-create vm01
(5) スナップショット情報の表示
[root@kvm01 ~]# virsh snapshot-list vm01
7月21日 01:03 投稿