KVM仮想マシンの管理

備忘録

■KVM(Kernel-Base Virtual Machine)
LinuxをType1のハイパーバイザーとして機能させる技術
・Linuxカーネルに組み込まれた仮想化技術
・CPU仮想化技術(Intel VT-x/AMD-V)と、PCエミュレータ(QEMU)を合わせて使用

■ハイパーバイザーの種類
　Type1ハイパーバイザー
　・ハードウェア上で直接動作(早い)
　・KVM、Microsoft Hyper-V、VMware vSphere等

　Type2ハイパーバイザー(ホスト型)
　・OS上でアプリケーションとして動作(遅い)
　・Oracle VirtualBox、Broadcom Fusion、VMware Workstation Player等

※CPU仮想化支援機能は、仮想CPU上では、実CPUと動作を変えるべき命令(=センシティプ命令)をTrapする仕組み。センシティプ命令以外は、実CPUで動作させれば良いので、高速に動作させる事ができる。
例:CPUID命令、デバイスIO


# ■仮想マシン一覧
稼働中の仮想マシン一覧
virsh list

```
#virsh list
 Id   名前         状態
---------------------------
 7    EVE-NG_10   実行中
```

全ての仮想マシン一覧（停止中を含む）
virsh list --all
```
#virsh list --all
 Id   名前         状態
---------------------------
 7    EVE-NG_10   実行中
 -    ACI6.03     シャットオフ
```
# ■仮想マシンの起動と停止
仮想マシンの起動 
virsh start &lt;VM_NAME&gt;
```
# virsh start EVE-NG_10
ドメイン 'EVE-NG_10' が開始しました
```
仮想マシンのシャットダウン
virsh shutdown &lt;VM_NAME&gt;
```
# virsh shutdown EVE-NG_10
ドメイン 'EVE-NG_10' はシャットダウンされています
```
仮想マシンの強制停止
virsh destroy &lt;VM_NAME&gt;
```
virsh destroy EVE-NG_10
ドメイン 'EVE-NG_10' 破壊されました
```
# ■仮想マシンの詳細確認
仮想マシンの情報表示
virsh dominfo &lt;VM_NAME&gt;
```
# virsh dominfo EVE-NG_10
Id:           12
名前:         EVE-NG_10
UUID:        25075ad4-87e9-49a1-8754-c5ad97ac9f7a
OS タイプ:   hvm
状態:         実行中
CPU:            8
CPU 時間:     37.2s
最大メモリー: 33554432 KiB
使用メモリー: 33554432 KiB
永続:         はい (yes)
自動起動:   無効にする
管理保存:   いいえ (no)
セキュリティモデル: selinux
セキュリティ DOI: 0
セキュリティラベル: system_u:system_r:svirt_t:s0:c715,c1016 (permissive)
```

ネットワークインターフェースの情報表示
virsh domiflist &lt;VM_NAME&gt;
```
#virsh domiflist EVE-NG_10
 インターフェイス   種類      ソース      モデル   MAC
----------------------------------------------------------------------
 vnet11           network   EVE-NG-NW   virtio   52:54:00:8f:6a:08
```
# ■仮想マシンの作成や削除
XMLファイルを使って仮想マシンを定義
virsh define &lt;XML_FILE&gt;
```
#virsh define EVE-NG_11.xml
ドメイン 'EVE-NG_11' が EVE-NG_11.xml から定義されました
```
virsh autostart &lt;VM_NAME&gt;
```
#virsh autostart EVE-NG_11
ドメイン 'EVE-NG_11' は自動起動としてマークされています
```
仮想マシンの削除（設定も含めて削除）
virsh undefine &lt;VM_NAME&gt;
```
#virsh undefine EVE-NG_11
ドメイン 'EVE-NG_11' の定義が削除されました
```
# ■仮想マシンのスナップショット管理
スナップショット作成
virsh snapshot-create-as &lt;VM_NAME&gt; &lt;SNAPSHOT_NAME&gt;
```
#virsh snapshot-create-as EVE-NG_10 snap_1
ドメインのスナップショット snap_1 が作成されました
```
スナップショット一覧
virsh snapshot-list &lt;VM_NAME&gt;
```
# virsh snapshot-list EVE-NG_10
 名前     作成時間                    状態
-----------------------------------------------
 snap_1   2024-11-24 09:23:01 +0900   running
```
スナップショットに戻す
virsh snapshot-revert &lt;VM_NAME&gt; &lt;SNAPSHOT_NAME&gt;
```
#virsh snapshot-revert  EVE-NG_10 snap_1
ドメインスナップショット snap_1 が復元されました
```
スナップショット削除
virsh snapshot-delete &lt;VM_NAME&gt; --current
```
#virsh snapshot-delete EVE-NG_10 --current
ドメインのスナップショット snap_1 が削除されました
```
# ■管理
GUIで管理
virt-manager

Cockpitで管理
https://localhost:9090/

仮想マシンのリソース使用状況の確認
virt-top

# ■仮想マシンへの接続
仮想マシンのGUI接続
virt-viewer &lt;VM_NAME&gt;

仮想マシンのコンソール接続
virsh console &lt;VM_NAME&gt;
※ (Ctrl + ])で終了
事前に仮想マシンのシリアル接続の設定が必要
sudo systemctl enable serial-getty@ttyS0.service
reboot

ディフォルトでは、VNCで1ポート使用してしまう。使用するポート番号は、/etc/libvirt/qemu.confのremote_display_port_min項目で指定する。また、VNC使用しない方法は、graphics項目を削除する。

#virsh edit EVE-NG_10
```
    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
```

```
# virsh console EVE-NG_10
ドメイン 'EVE-NG_10' に接続しました
エスケープ文字は ^] です (Ctrl + ])

eve-ng login:
```
# ■仮想マシンのネットワーク管理
ネットワーク一覧
virsh net-list --all
```
# virsh net-list --all
 名前        状態       自動起動      永続
--------------------------------------------------
 ACI         停止状態   いいえ (no)   はい (yes)
 default     動作中     はい (yes)    はい (yes)
 EVE-NG-NW   動作中     はい (yes)    はい (yes)
```
ネットワークの作成
virsh net-define &lt;NETWORK_XML&gt;
```
#virsh net-define EVE-NG-NW.xml
ネットワーク EVE-NG-NW が EVE-NG-NW.xml から定義されました
```
ネットワークの自動起動の設定
virsh net-autostart &lt;NETWORK_NAME&gt;
```
#virsh net-autostart EVE-NG-NW
ネットワーク EVE-NG-NW が自動起動に設定されました
```
ネットワークの起動
virsh net-start &lt;NETWORK_NAME&gt;
```
#virsh net-start EVE-NG-NW
ネットワーク EVE-NG-NW が起動されました
```
ネットワークの停止
virsh net-destroy &lt;NETWORK_NAME&gt;
```
#virsh net-destroy EVE-NG-NW
ネットワーク EVE-NG-NW は強制停止されました
```
ネットワークの削除
virsh net-undefine &lt;NETWORK_NAME&gt;
```
virsh net-undefine EVE-NG-NW
ネットワーク EVE-NG-NW の定義が削除されました
```
ネットワークのDHCPリリース状況

virsh  net-dhcp-leases &lt;NETWORK_NAME&gt;
```
#virsh  net-dhcp-leases EVE-NG-NW
 有効期限              MAC アドレス        プロトコル   IP アドレス         ホスト名   クライアント ID または DUID
-------------------------------------------------------------------------------------------------------------------------------------------------
 2024-11-24 10:38:57   52:54:00:8f:6a:08   ipv4         192.168.56.10/24   eve-ng     ff:00:8f:6a:08:00:01:00:01:2e:d4:5a:0f:52:54:00:b3:63:9b
 ```