KVM
ナビゲーションに移動
検索に移動
KVMとは
- KVM (Kernel-based Virtual Machine)は、Linuxに組み込まれたオープンソースの仮想化テクノロジー
- 具体的には、KVM を使用すると、Linux をハイパーバイザーすることができる
- これによりホストマシンは、ゲストや仮想マシンと呼ばれる複数の独立した仮想化環境を稼働させることができる。
- KVM は Linux の一部です。Linux 2.6.20 以降、KVM が搭載されている
QEMUとは
- QEMUとは仮想マシン・エミュレータと呼ばれ、KVMなどの仮想マシンとともに利用する場合がある。
- KVMとの組み合わせにより、それぞれが得意な役割を担うことで、処理速度が向上するなどメリットが生まれる。
- 具体的には、KVMは仮想CPUを提供する一方、QEMUはメモリや仮想I/Oデバイスを提供。
Ubuntuをホストとしてインストール
ハードウェアの仮想化チェック
$ egrep -c '(vmx|svm)' /proc/cpuinfo
- 0 : ハードウェア仮想化未サポート
- 1:以上サポートされているが、有効化の確認が必要
$ lscpu アーキテクチャ: x86_64 CPU 操作モード: 32-bit, 64-bit バイト順序: Little Endian Address sizes: 36 bits physical, 48 bits virtual CPU: 4 オンラインになっている CPU のリスト: 0-3 コアあたりのスレッド数: 2 ソケットあたりのコア数: 2 ソケット数: 1 NUMA ノード数: 1 ベンダー ID: GenuineIntel CPU ファミリー: 6 モデル: 42 モデル名: Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz ステッピング: 7 CPU MHz: 799.076 CPU 最大 MHz: 3200.0000 CPU 最小 MHz: 800.0000 BogoMIPS: 4993.70 仮想化: VT-x L1d キャッシュ: 64 KiB L1i キャッシュ: 64 KiB L2 キャッシュ: 512 KiB L3 キャッシュ: 3 MiB NUMA ノード 0 CPU: 0-3 Vulnerability Itlb multihit: KVM: Mitigation: Split huge pages Vulnerability L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable Vulnerability Mds: Mitigation; Clear CPU buffers; SMT vulnerable Vulnerability Meltdown: Mitigation; PTI Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Full generic retpoline, IBPB conditional, IBRS_FW, STIBP conditional, R SB filling Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected フラグ: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pe bs bts nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_ cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadl ine_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpr iority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
必要パッケージのインストール
- 18.10 以降
$ sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
ユーザーをグループに追加
$ sudo adduser `id -un` libvirt ユーザー `piroto' をグループ `libvirt' に追加しています... ユーザ piroto をグループ libvirt に追加 完了。 $ sudo adduser `id -un` kvm ユーザー `piroto' をグループ `kvm' に追加しています... ユーザ piroto をグループ kvm に追加 完了。
インストールの検証
- インストールが成功したか以下のコマンドで確認
$ virsh list --all Id Name State --------------------
- sock ファイルのパーミッションは以下
$ sudo ls -la /var/run/libvirt/libvirt-sock srwxrwx--- 1 root libvirt 0 8月 20 22:40 /var/run/libvirt/libvirt-sock
- 仮想マシンのインストールで問題を感じたらオーナーを以下にしてみる
$ sudo chown root:libvirt /dev/kvm
- ログインし直すか、リブート
GUIツールのインストール
- インストール
$ sudo apt-get install virt-manager
- 起動
$ virt-manager
外部ネットワークから接続
Ubuntu KVM に ネットワークブリッジを構成する
UbuntuでMultipass(KVM)のブリッジネットワーク環境を構築
nmcliを使用
$ nmcli con show NAME UUID TYPE DEVICE 有線接続 1 3ee7bb10-bdc4-3692-9048-1e2f35d06c90 ethernet enp0s25 ctc-g-d17c80 5105f279-97ae-4a5b-9313-0729a4a8ee35 wifi wlp10s0 virbr0 8879c8b2-fea9-4a33-b696-04b6a9dc7874 bridge virbr0 ctc-a-d17c80 719c99c6-6345-46b7-bd84-aac667d2dfbb wifi --
$ sudo nmcli con add type bridge ifname br0 接続 'bridge-br0' (1ef72134-e85d-4df5-9ed3-4db1a6bbff39) が正常に追加されました。
$ sudo nmcli con add type bridge-slave ifname enp0s25 master br0 接続 'bridge-slave-enp0s25' (29740da7-7a63-4d26-8ddc-2007e300d606) が正常に追加されました。
$ sudo nmcli con up bridge-slave-enp0s25 接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/9)
設定ファイルを編集
- https://symfoware.blog.fc2.com/blog-entry-2446.html
- https://qiita.com/zen3/items/757f96cbe522a9ad397d
- 仮想ブリッジを作成
- ip address で、[eth0 の 値を取得 enp0s25]
- 01-network-manager-all.yaml を編集
- ip固定
- netplan apply
$ sudo vi /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: networkd ethernets: enp0s25: dhcp4: false dhcp6: false addresses: [192.168.0.20/24] nameservers: addresses: [192.168.0.1] bridges: br0: dhcp4: yes dhcp6: yes $ sudo netplan apply
$ brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400305a80 yes virbr0-nic
- 仮想ブリッジに物理NICを接続
$ sudo brctl addbr br0 $ brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no virbr0 8000.525400305a80 yes virbr0-nic
© 2006 矢木浩人