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