2015年6月4日木曜日
KVMの環境構築、利用手順
KVM(Kernel-based Virtual Machine)を使い、Linuxの上でゲストOSを動かすための環境を構築する。
KVMはホストOS型に見えるが、Linux自体をハイパーバイザとする機能を提供する。
(関連)
VMware ESXi CU(CLI)I操作コマンド
【ホスト側での準備作業】
◆ KVMで利用するパッケージのインストール
# yum groupinstall "virtualization" "virtualization-client" "virtualization-platform" "virtualization-tools"
# libvirtd start
◆ KVMのmoduleがロードされてることの確認
# lsmod | grep kvm
◆ ゲスト用のISOを配置
# ls /iso/
Asianux-4-x86_64-dvd.iso
※もちろん、CentOSでもUbuntuでもなんでもよい
◆ KVMで外からVMにアクセスできるようにホスト側のNWの設定
ブリッジ接続するための設定を行う。
ホストがbondingを組んでいることを想定している。
# vi /etc/sysconfig/network-scripts/ifcfg-br0
(変更点) ※IPアドレスなどはそのまま利用
DEVICE=br0
TYPE=Bridge
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
(以下設定のみにする)
DEVICE=bond0
ONBOOT=yes
BRIDGE=br0
# service network restart
# service libvirtd restart
※一部バージョンでrestartが効かないバグがある
https://access.redhat.com/solutions/119783
◆ ゲストの起動・停止コントロール設定
# vim /etc/sysconfig/libvirt-guests
START_DELAY=30
ON_SHUTDOWN=shutdown
SHUTDOWN_TIMEOUT=60
◆ ゲストのanacondaの設定
# vi /iso/ks.cfg
・NW設定
IPアドレスは未設定
・disk構成
part /boot --fstype=ext4 --size=500
part swap --size=2048
part / --fstype=ext4 --grow --size=1
・package
基本サーバ
【ゲストOSの作成(imageから作成する場合)】
◆ KVMの仮想HDDイメージの作成
# cd /var/lib/libvirt/images
# qemu-img create -f qcow2 [IMAGE NAME] [DISK SIZE]G
◆ kickstart install
利用できるオプションを確認できる。
# virt-install --os-variant list
# virt-install \
--connect qemu:///system \
--vcpus=2 \
--name [DOMAIN NAME] \
--ram=4096 \
--hvm \
--location /iso/Asianux-4-x86_64-dvd.iso \
--os-type=Linux \
--os-variant=axs4 \
--disk=/var/lib/libvirt/images/[IMAGE NAME]],format=qcow2 \
--network bridge=br0 \
--autostart \
--noautoconsole \
--accelerate \
--keymap ja \
--initrd-inject=/iso/ks.cfg \
--extra-args='ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8'
この後、virt-install後セッションが切れるのでコンソール接続する。
対話モードになるため以下のコンソールで入る。
# virsh console [domain name]
※--noautoconsole をinstall時に抜くと不要である
◆ acpidの稼働
virshでshutdownできないためacpidを動かしておく。
# service acpid start
ネットワークの設定などのゲストの設定情報の修正は
この後のもう一つのゲストOSの作成手段後にあわせて実施する。
【ゲストOSの作成2(既にあるimageのコピーから作成する場合)】
◆ imageのコピー
IPアドレスの設定以外は基本的に実施済みである。
imageが以下にあるので、そのimageとVMの設定情報をコピーする形で作成する。
default directory:/var/lib/libvirt/images/
domain name: asianux4(VM1)
asianux4_vm2(VM2)
# virt-clone --original [ORIGIN DOMAIN NAME] --name [COPY DOMAIN NAME] --file /var/lib/libvirt/images/[COPY IMAGE NAME]
◆ ゲストの設定情報の修正(ゲストを起動して編集する場合)
macアドレスを確認する。
# virsh list --all
# virsh dumpxml [COPY DOMAIN NAME} | grep mac
IPアドレス、MACアドレス情報を書き換える。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
MACアドレス情報を書き換える。
# vi /etc/udev/rules.d/70-persistent-net.rules
ホスト名を書き換える。
# vi /etc/sysconfig/network
再起動して設定を確認する。
# reboot
◆ ゲストの設定情報の修正(virt-edit等を使用して編集する場合)
virt-editのツールを使うと、ゲストを落とした状態でも設定情報が変更できる。
macアドレスを確認する。
# virsh dumpxml [DOMAIN NAME] | grep mac
IPアドレス、MACアドレス情報を書き換える。
# virt-edit [DOMAIN NAME] /etc/sysconfig/network-scripts/ifcfg-eth0
MACアドレス情報を書き換える。
# virt-edit [DOMAIN NAME] /etc/udev/rules.d/70-persistent-net.rules
ホスト名を書き換える。
# virt-edit [DOMAIN NAME] /etc/sysconfig/network
起動する。
# virsh start [DOMAIN NAME]
最後にKVMを利用する上でよく利用するだろうコマンドをまとめておく。
【KVMでよく使うコマンド】
・ ゲストの一覧
停止中も表示したい場合は--allをつける。
# virsh list
・ ゲスト起動
# virsh start [DOMAIN NAME]
・ consoleでゲストへ接続
途中でターミナルが落ちたりすると接続したままになってしまうので注意。
consoleは1ゲストに対して1consoleしかつなげられない模様。
# virsh console [DOMAIN NAME]
・ ゲストの停止
acpidが起動してないと操作不可
# virsh shutdown [DOMAIN NAME]
・ ゲストの強制停止
# virsh destroy [DOMAIN NAME]
・ DOMAINの[未]定義
# virsh [un]define [DOMAIN NAME]
・ 仮想化サービスライブラリの起動スクリプト
console接続がログインしたまま切れてしまうと、
こちらをrestartしないといけない。
# service libvirtd start