RHEL6.0でKVM環境を構築する
環境
- rehel 6.0
KVM環境構築の流れ
1. KVMの導入
RHELのインストールの項目と指定するパラーメーターを以下の表に記述する
項目 | 指定するパラメーター |
---|---|
インストーラーの言語 | Japanese(日本語)ここはお好み |
キーボード | 日本語 |
ストレージデバイス | 基本ストレージデバイス |
ホスト名 | hoge.hogehoge.com |
ネットワークの設定 | [eth0] 自動的に接続 -> チェックを入れる IP -> 172.18.16.32 NetMask -> 255.255.255.0 ゲートウェイ -> 172.18.16.1 DNSサーバー -> 202.248.0.42 ドメインを検索 -> hogehoge.com |
タイムゾーン | アジア/東京 |
> システムクロックでUTCを使用 | 使用しない |
rootパスワード | redhat |
インストールタイプ | すべての領域を使用する |
パッケージグループ | 仮想化ホスト |
> パッケージのカスタマイズ | 今すぐカスタマイズ |
パッケージの選択 | ●デスクトップ - X Window System - グラフィカル管理ツール - デスクトップ - フォント - レガシー X Windows システムの互換性 - 入力メソッド - 汎用デスクトップ ●アプリケーション - インターネットブラウザ |
2. ネットワークの構成
OSインストール後のデフォルト構成ではNNATとなっているため、外部からアクセスする構成にはなっていない。 そのため、デフォルト環境を消し、L2スイッチを再度自分で構成する。
2-1 不要なネットワーク機能を停止
# virsh net-list
初期状態で上記を実行すると、defaltというネットワークブリッジが動作中であることがわかる。
以下のコマンドで停止する。
# virsh net-autostart --disable default
# virsh net-destroy default
また、ネットワークマネージャは、ネットワーク設定を勝手に書き換えるため、仮想化している場合はトラブルの元になるため、停止する。
# service NetworkManager stop
# chkconfig NetworkManager off
2-2 サービス提供用仮想ブリッジの構成
defaultに代わって、L2スイッチ相当の動作をする仮想スイッチを作成
# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=172.18.16.32
PREFIX=24
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT=yes
HWADDR=F8:0F:41:12:64:66
BRIDGE=br0
#GATEWAY=172.18.16.1
ゲートウェイは1つのサーバで1つしか持てない。 /etc/sysconfig/networkを先に読み、ifcfg系を後に読む。記述が重複していると後に読まれるファイルifcfg系で上書きされる。 そのため、ゲートウェイはnetworkファイルにのみ記述することで、トラブルが減る。
ネットワークの再起動
# service network restart
brctlやifconfigでbr0が作成された事を確認
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f80f41126466 no eth0
# ifconfig br0
br0 Link encap:Ethernet HWaddr F8:0F:41:12:64:66
inet addr:172.18.16.32 Bcast:172.18.255.255 Mask:255.255.255.0
inet6 addr: fe80::fa0f:41ff:fe12:6466/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13018 errors:0 dropped:0 overruns:0 frame:0
TX packets:5576 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11409776 (10.8 MiB) TX bytes:859312 (839.1 KiB)
3. ストレージの接続設定
今回はローカルストレージを使用するため、特別な設定は無し。
構成にあたり、注意点を以下に記述
VMはKVMホスト上のイメージファイルまたはブロックデバイスをディスクとして使用する
- イメージファイル: ホストは単一ファイルとして管理するためcpなど単なるコピーでバックアップがとれる。標準の格納先は/var/lib/libvirt/images/配下
- ブロックデバイス: 通常の物理的なデバイスとして認識するためdumpコマンドでバックアップ
4. 仮想マシンの構成
項目 | オプション名 | パラメーター |
---|---|---|
VM名 | --name | vm32-1(GUI) vm32-2(CLI) |
メモリ | --ram | 512MB |
インストール先 | --file | イメージファイル vm32-2.img |
ストレージサイズ | --file-size | 8G |
接続するネットワーク | bridge: br0 | |
インストール用データ(ISOなど)格納場所 | --location/--cdrom(ローカルインストールの場合) | ftpサーバ |
OSのタイプ | --os-type | Linux |
OSの種類 | --os-variant | rhel6 |
# virt-install --name=vm32-2 --ram=512 \
> --file=/var/lib/libvirt/images/vm32-2.img --file-size=8 \
> --network=bridge:br0 \
> --location=ftp://172.18.16.32/pub/rhel6 \
> --os-type=linux --os-variant=rhel6 \
> --extra-args='console=tty0 console=ttyS0, 115200n8 utf8' \
> --nographics
ちなみに、既存のqcow2を利用したい場合は、以下のようにインポートする
# virt-install --connect=qemu:///system \
> --import --name=vmname --ram=1024 \
> --disk path=/var/lib/libvirt/images/path-to-img,size=20,device=disk,bus=virtio,format=qcow2 \
> --network=network:default --keymap=ja
CLIで作成したVMはグラフィカルログインできないため、以下のコマンドでログインする
# virsh console vm32-2
ログアウト時はexitでできるが、KVMホストに戻りたい場合は、[Ctrl] + }を押す。 exitを押さずにCtrl+} で接続を切ると、次回ログイン時に直前の状態が残っているためセキュリティ上まずい。きちんとexitしてから接続を切りましょう
その他コマンドや設定
仮想GUIコンソールをセットしたいとき
# vi /etc/libvirt/qemu.conf
vcn_listen="0.0.0" #追記
設定を反映
# /etc/init.d/libvirt restart
VM作成コマンド実行時に以下をカットする
--extra-args='console=tty0 console=ttyS0,115200n8 utf8' --nographics
かわりに以下をつける
--vnc --vncport=59XX --keymap=ja
vmの状態一覧
# virsh list --all
Id 名前 状態
----------------------------------
1 vm32-1 実行中
2 vm32-2 一時停止中
VMの電源操作
ゲストOSの再起動では、仮想マシン構成ファイルは再読み込みされない。メモリやCPUの構成を変更したら、以下のVMの停止・起動をすることで設定が反映される
また、VMのRHELを最小構成でインストールした場合、acpidのパッケージのインストールが必要
# yum install -y acpid
# service acpid start
vmの起動
# virsh start [VM名]
vmの停止
# virsh shutdown [VM名]
vmの削除
vmを停止した状態で実行する
# virsh destroy [VM名]
自動起動
物理マシン起動後、仮想マシンを自動で起動させる
自動起動設定
# virsh autostart [VM名]
自動起動解除
# virsh autostart [VM名] --disable
ちなみに、VMを自動起動設定すると
/etc/libvirt/qemu/autostart
配下に[VM名].xmlというシンボリックリンクが作成されているため、自動起動設定の確認はここをlsするとわかる。
# ls /etc/libvirt/qemu/autostart/
vm32-1.xml
VMをホストと時刻同期する
VMホストのntp設定と、ゲストOSへntpdをインストールして有効化
- KVMホストのNTP設定変更
ゲストからNTPアクセス受け入れを許可する
# vi /etc/ntp.conf
restrict [VMホストのネットワークアドレス] mask 255.255.255.0 nomodify notrap
server 127.127.1.0 # local clock コメントアウトを解除
fudge 127.127.1.0 stratum 10 # コメントアウトを解除
設定を反映
# service ntpd restart
ntpdをインストール
# yum install -y ntp
時刻設定を手動でKVMホストに同期する。
ntpdが有効になるまで時間がかかるため、10分後位に同期されているかをdateで確認する。
# ntpdate [KVMホストのIPアドレス]
上記では手動で設定しただけなので、ntpサービスを設定する
# vi /etc/ntp.conf
#server 0.rhel.pool.ntp.org コメントアウト
#server 1.rhel.pool.ntp.org コメントアウト
#server 2.rhel.pool.ntp.org コメントアウト
server 172.18.16.32 # KVMホストのIPアドレスを追記
ntpサービスを起動
# service ntpd start
# chkconfig ntpd on
ntpdの接続先がKVMホストになっていることを確認
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*172.18.16.32 157.7.153.56 3 u 42 64 377 0.349 0.095 0.076
仮想NICを追加する
まずはVMの構成を確認
# virsh dumpxml vm32-1
(略)
<interface type='bridge'>
<mac address='52:54:00:41:0b:11'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
(略)
上記のように、interfaceにbr0がbridgeとして設定されていることがわかる
追加する構成をxml形式のファイルで作成
# vi add-if.xml
<interface type='bridge'>
<source bridge='br1' />
<model type='virtio' />
</interface>
設定をアタッチ
# virsh attach-device vm32-1 ./add-if.xml
Device attache successfully
<interface type='bridge'>
<mac address='52:54:00:41:0b:12'/> # ここ
<source bridge='br1'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
ゲストOSを再起動
# shutdown -r now
# vi /etc/sysconfig/network-scripts/ifcfg-br1
DEVICE="br1"
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=172.18.16.33 #ここ
HWADDR=F8:0F:41:12:64:67 #ここ
PREFIX=24
有効化
ifup br1
pingで先ほど設定した172.18.16.33に通信が通ればOK。
補足
kvmのイメージをnfs上に置く場合は、selinuxを設定する必要がある。
# getsebool virt_use_nfs
virt_use_nfs --> on
参考