目標
EC2 ベアメタルインスタンス(インスタンスタイプi3.metal
を利用)上にKVM仮想マシンを構築する。
前提
EC2 ベアメタルインスタンス(Red Hat Enterprise Linux 8 (HVM), SSD Volume Type、インスタンスタイプi3.metal
)が構築済みであること(※)
※かなり料金高いようなので注意してください
作業の流れ
項番 | タイトル |
---|---|
1 | 前提確認 |
2 | 仮想マシン構築前準備 |
3 | 仮想マシン構築 |
手順
1.前提確認
前提のEC2インスタンスなら問題ないという認識ですが、一応KVM導入前の前提を確認します。
①CPU仮想化支援機能への対応確認
/proc/cpuinfoのflags行を確認し、CPUがCPU仮想化支援機能に対応しているかどうかを確認します(※)。
※「flags」行にIntel VT対応ならvmx
、AMD-V対応ならsvm
が表示されます。
# 検索がヒットすればOK
grep -E "(vmx|svm)" /proc/cpuinfo
②カーネルモジュールのロード確認
lsmod | grep kvm
以下のように、CPU仮想化支援機能を利用するためのモジュールkvm-intel.ko
及び、KVMのコア機能を提供するkvm.ko
がロードされていればOKです。
[root@ip-172-31-40-16 ~]# lsmod | grep kvm
kvm_intel 303104 0
kvm 798720 1 kvm_intel
irqbypass 16384 1 kvm
2.仮想マシン構築前準備
①必要ツールのインストール
yum install qemu-kvm qemu-img libvirt virt-install
②libvirtdデーモンの起動
KVMではlibvirtという仮想環境管理ツールを利用したセットアップが基本となります。
libvirtを利用するためにはlibvirtdデーモンを起動する必要があります。
systemctl start libvirtd
systemctl enable libvirtd
③仮想ディスクイメージの作成
仮想マシンに割り当てる仮想ディスクイメージをqemu-img
コマンドで作成します。
今回は仮想マシンに約5Gの領域を割り当てるためのイメージ/tmp/vm1.imgを作成します。
qemu-img create -f qcow2 /tmp/vm1.img 5G
④isoイメージファイルのインストール
CentOS7のisoイメージファイルを今回の仮想マシンのOSとして利用するためインストールします。
まずはイントール先ディレクトリに移動し、wgetコマンドをインストールします。
cd /usr/local/src/
yum install wget
isoイメージファイルをインストールします。
wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
3.仮想マシン構築
先ほどインストールしたvirt-install
コマンドを利用して実際に仮想マシンを構築(※)します。
※詳細な定義内容は以下
仮想マシン名: vm1
メモリサイズ: 1024MB
利用する仮想ディスクイメージ: /tmp/vm1.img
仮想CPU数: 2
仮想ブリッジ名: virbr0
利用する仮想マシンイメージ: /usr/local/src/CentOS-7-x86_64-Minimal-2009.iso
またGUI環境を利用しないインストールのため、--graphics noneオプションと--extra-args='console=tty0 console=ttyS0,115200n8'を指定しています。
--extra-argsオプションはKernelに渡すオプションを指定するもので、この値を渡すことでゲストOSのシリアルコンソールが有効化されるようです(DigitalOceanでKVMを触ってみるより)。
sudo virt-install \
--name vm1 \
--ram 1024 \
--disk path=/tmp/vm1.img \
--vcpus 2 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location=/usr/local/src/CentOS-7-x86_64-Minimal-2009.iso \
--arch x86_64 \
--extra-args 'console=ttyS0,115200n8 serial'
処理が進むと以下のような仮想マシンのセットアップコンソールとなります。
!
マークがついておらず、セットアップが実施されていないTime settings、Installation Destination、
Root passwordあたりをコンソールでセットアップしました(手順省略致します)
1) [x] Language settings 2) [!] Time settings
(English (United States)) (Timezone is not set.)
3) [!] Installation source 4) [!] Software selection
(Processing...) (Processing...)
5) [!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled)
7) [ ] Network configuration 8) [!] Root password
(Not connected) (Password is not set.)
9) [!] User creation
(No user will be created)
以下のようになった状態で仮想マシン構築処理続行
1) [x] Language settings 2) [x] Time settings
(English (United States)) (Asia/Tokyo timezone)
3) [x] Installation source 4) [x] Software selection
(Local media) (Minimal Install)
5) [x] Installation Destination 6) [x] Kdump
(Automatic partitioning (Kdump is enabled)
selected) 8) [x] Root password
7) [ ] Network configuration (Password is set.)
(Not connected)
9) [ ] User creation
(No user will be created)
Please make your choice from above ['q' to quit | 'b' to begin installation |
'r' to refresh]: b
最終的に仮想マシンが構築されログイン処理に移行される想定です。
ユーザはrootで、上記セットアップコンソールで設定したパスワードを入力します。
仮想マシンにログイン出来ればOKです(ログイン後はctrl
と]
を同時押しすることで、仮想マシンからホストOSへ操作戻ることが可能です)。
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
localhost login: root
Password:
[root@localhost ~]#
ホストOSからvirsh list
コマンドを利用して仮想マシン一覧を確認
[root@ip-172-31-36-246 src]# virsh list
Id Name State
----------------------
2 vm1 running
virsh dominfo
コマンドで仮想マシンの詳細を確認可能
virsh dominfo vm1
Id: 2
Name: vm1
UUID: 082fec70-89a6-43ba-973b-94b83dae394c
OS Type: hvm
State: running
CPU(s): 2
CPU time: 14.6s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: selinux
Security DOI: 0
Security label: system_u:system_r:svirt_t:s0:c268,c305 (enforcing)
virsh console
コマンドで仮想マシンに再ログイン可能なことも確認しておきます。
[root@ip-172-31-36-246 src]# virsh console vm1
Connected to domain vm1
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Thu Jan 21 11:41:39 on ttyS0
[root@localhost ~]#