| Version 23 (modified by yuna, 56 years ago) (diff) |
|---|
KVMメモ
このページは、KVMのメモです。簡単に使いたい人は、virt-managerを使ってください。
Windowsゲストドライバ
Windowsゲストドライバを利用すると、ネットワークI/OやディスクI/Oが速くなります。 ゲストドライバの取得とインストール方法は下記のURLを参照。
準備
kvmを利用するのに、libvirtを利用します。libvirtをインストールしておきます。virt-managerをインストールすると必要なパッケージが一通り入って便利です。また、kvmで仮想マシンを実行するのに必要なqemu-kvmもインストールしておきます。
# yum install virt-manager # yum install qemu-kvm
次に、kvmのモジュールをカーネルにロードします。AMDの場合は、kvm_intelの代わりにkvm_amdを使ってください。
# modprobe kvm # modprobe kvm_intel
libvirtを利用するには、libvirtdの起動が必要です。libvirtdを起動しておきます。
# /etc/init.d/libvirtd start
その他、下記のパッケージを入れておくとよいかもしれません。
# yum install virt-top # yum install qemu-kvm-tools
virshを利用したKVM仮想マシンの作り方
イメージ作成
# qemu-img create -f raw ubuntu.img 10G
libvirt XMLファイルの作成方法
下記のXMLを適当に編集。特に、
- name(他の仮想マシンとユニークな名前になるように)
- memory(メモリ容量)
- vcpu(CPUの数)
- diskとcdromのsource file
- clock offsetをWindowsの場合localtimeに。
- mac addressを他と被らないように
辺りに注意しておく。
<domain type='kvm' id='3'>
<name>UbuntuVM</name>
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='fedora-13'>hvm</type>
<boot dev='hd'/>
<boot dev='cdrom'/>
</os>
<clock offset='utc'/>
<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<!-- DISKの定義 -->
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/mnt/sda5/ubuntu.img'/>
<target dev='hda' bus='ide'/>
</disk>
<!-- CDROMの定義 -->
<disk type='file' device='cdrom'>
<driver name='qemu'/>
<source file='/mnt/sda5/iso/ubuntu-ja-10.04-desktop-i386-20100512.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
<!-- ネットワークインタフェースの定義 -->
<interface type='network'>
<mac address='52:54:00:1d:18:5e'/>
<source network='default'/>
<target dev='vnet0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5902' autoport='yes' keymap='ja'/>
</devices>
</domain>
virshに登録して起動
# virsh (virsh実行。以下、virshのコンソールで実行) virsh # define virt-kvm.xml
defineで仮想マシンを定義したXMLを登録すると、/etc/libvirt/qemuディレクトリに定義ファイルが作られる。
# ls /etc/libvirt/qemu UbuntuVM.xml hoge.xml kvmtest.xml networks
virsh # start UbuntuVM virsh # list Id 名前 状態 ---------------------------------- 1 UbuntuVM 実行中
VNCクライアントのスクリーン1で接続可能( vnc://localhost:1)
停止はshutdownを使う。
virsh # shutdown UbuntuVM
ハイバネートとレジューム
virsh # save UbuntuVM UbuntuVM.mem virsh # restore UbuntuVM UbuntuVM.mem
ネットワーク接続
- ゲスト側のネットワークを適当設定(例えば192.168.100.2,GWを192.168.100.1)。ネットワークセグメントはホストと別にする。
- ホスト側のネットワークを設定する。
# ifconfig vnet0 192.168.100.1 netmask 255.255.255.0
IPフォワードの設定をしていなければ、IPフォワードの設定を行う。
# echo 1 > /proc/sys/net/ipv4/ip_forward
図で説明すると、上記の設定で次のようなネットワークが構築できる。
+--------------+ +---------------+
+--+-+ +-+---+ +--+-+ |
LAN---|eth0| ホストOS |vnet0|-----|eth0| 仮想マシン |
+--+-+ +-+---+ +--+-+ |
+--------------+ +---------------+
vnet0:192.168.100.1 eth0:192.168.100.2
NATによるLAN上のIPからの接続
+--------------+ +---------------+
+--+-+ +-+---+ +--+-+ |
LAN---|eth0| ホストOS |vnet0|-----|eth0| 仮想マシン |
+--+-+ +-+---+ +--+-+ |
+--------------+ +---------------+
vnet0:192.168.100.1 eth0:192.168.100.2
- eth0に10.8.99.6でアクセスするとホストOSに接続。
- eth0に10.8.99.7でアクセスすると仮想マシン(192.168.100.2)に接続。
するように設定してみる。普通にeth0に10.8.99.6を設定しておく。 次にNAT用のnat.iptファイルを用意する。
*nat :PREROUTING ACCEPT [5318:237514] :POSTROUTING ACCEPT [162:9112] :OUTPUT ACCEPT [14132:847744] -A PREROUTING -d 10.8.99.7 -j DNAT --to-destination 192.168.100.2 -A POSTROUTING -d ! 192.168.100.0/255.255.255.0 -j MASQUERADE -A POSTROUTING -s 192.168.100.2 -j SNAT --to-source 10.8.99.7 -A OUTPUT -d 10.8.99.7 -j DNAT --to-destination 192.168.100.2 COMMIT
NATを読み込む。
# cat nat.ipt | iptables-restore
eth0に10.8.99.7を割り振らないとLAN上のマシンからアクセスできないので、ipコマンドでNICにIPを割り振る。
# ip addr add 10.8.99.7 dev eth0
ポートフォワードによる仮想マシンIPを利用したルートコンソールの接続
ゲストOSの5900番(VNCのデフォルトポート)をホストOS上の仮想マシンのコンソールのポートに転送するようにすれば、VNCで仮想マシンに接続するとルートコンソールが取れるようになる。
*nat :PREROUTING ACCEPT [5318:237514] :POSTROUTING ACCEPT [162:9112] :OUTPUT ACCEPT [14132:847744] -A PREROUTING -d 10.8.99.7 -p tcp --dport 5900 -j DNAT --to-destination 10.8.99.6:5900 -A PREROUTING -d 10.8.99.7 -j DNAT --to-destination 192.168.100.2 -A POSTROUTING -d ! 192.168.100.0/255.255.255.0 -j MASQUERADE -A POSTROUTING -s 192.168.100.2 -j SNAT --to-source 10.8.99.7 -A OUTPUT -d 10.8.99.7 -j DNAT --to-destination 192.168.100.2 COMMIT
ブリッジによる接続
下準備。eth0で外に繋いでいたのをbr0経由に変更する。
# brctl addbr br0 # brctl addif br0 eth0 # ifconfig br0 192.168.1.25 netmask 255.255.255.0 # route del default # route add default 192.168.1.1
libvirt.xmlのネットワークの設定を下記のように変更。
<interface type='bridge'>
<mac address='52:54:00:1d:18:5e'/>
<source bridge='br0' />
</interface>
あとは、仮想マシンを起動すればブリッジで接続される。仮想マシンには、192.168.1.xのアドレスを付与すればok。
DHCPでIPを付与
/var/lib/libvirt/network/default.xmlを次のように編集。
<network>
<name>default</name>
<uuid>631f86c8-5469-468a-a361-3a91d4b99a35</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.100' end='192.168.122.254' />
<host mac='52:54:00:1d:18:5e' name='foo.com' ip='192.168.122.28' />
</dhcp>
</ip>
</network>
上記のネットワーク設定ファイルを再設定して、ネットワークを再起動(net-destroy,net-start)する。
virsh # net-define /var/lib/libvirt/network/default.xml ネットワーク default が /var/lib/libvirt/network/default.xml から定義されました virsh # net-destroy default ネットワーク default は停止されました virsh # net-start default ネットワーク default が起動されました
リソース取得
virt-topコマンドを利用すれば、CPUの使用率やメモリの使用量がわかる。
KVMのもうちょっと高度な使い方
そのうち書く予定
- リソースの取得方法
- iscsiのDISKから起動
- ライブマイグレーション
- block migration
- pythonからの操作
