通過libvirt和convirt來管理KVM虛擬機

        首先稍微介紹下convirt,這是一個開源的虛擬機管理軟件,有良好的操作界面,是基於web開發的,最近對convirt也研究了一段時間,它目前是可以支持xen和kvm的,它的安裝過程從網上是挺好找的。與libvirt相比,convirt操作kvm的參數有點老了,有時候會影響到虛擬機的性能,個人推薦使用libvirt,libvirt目前幾乎支持所有的虛擬化工具,他是一個封裝好了的C庫,支持python。這裏重點說一下libvirt操作kvm虛擬機,如果是在桌面版的ubuntu上裝libvirt,是可以安裝界面版的libvirt的,這個用起來就比較簡單了,這裏說一下在服務器版的ubuntu上的操作。

先稍微說下convirt:

         這個很簡單,安裝好,打開瀏覽器訪問,會出現一個web界面,這網速太爛就先不傳圖片了,稍微描述一下:它主要管理兩個部分,一個是  數據中心(Data Center)一個是模板管理(模板創建虛擬機的使用用),兩個樹節點,他是以右鍵菜單的形式操作,在 Data Center下添加 Server Pool,然後在Server Pool下添加服務器,添加服務器的時候會讓你選擇是 kvm的還是 xen的,添加好服務器以後就可以定製虛擬機了,添加完虛擬機就可以通過右鍵菜單來操作虛擬機了,還可以通過右邊界面來看虛擬機的狀態,最近工作比較忙,白天沒時間寫,如果有需要的話,我再詳細寫一下如何用convirt來管理虛擬機。


詳細介紹一下libvirt的使用:

一、環境
role hostname ip OS
kvm_server target 192.168.32.40/24 rhel6.0_x64
vir_guest1 node4 192.168.32.34/24 rhel5.5_i386
vir_guest2 node5 192.168.32.35/24 rhel5.5_i386
manager manager 192.168.32.33/24 rhel5.5_i386
ESXi ESXi 192.168.2.251/24 ESXi 3.5
二、安裝kvm
[root@target ~]# yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64 #安裝kvm內核
[root@target ~]# yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 #安裝virt管理工具
[root@target ~]# modprobe kvm #加載kvm內核
[root@target ~]# modprobe kvm-intel #intel cpu加載kvm-intel內核,要支持全虛擬化,必須開啓;要求cpu支持,通過bios可設置。
[root@target ~]# modprobe kvm-amd #amd cpu加載kvm-intel

[root@target ~]# modprobe -ls | grep kvm #查看內核是否開啓
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko
[root@target ~]# modprobe -ls | grep kvm-intel
kernel/arch/x86/kvm/kvm-intel.ko

三、安裝guest虛擬機
1、直接通過virt-manager安裝、管理虛擬機(略)

2、通過命令行安裝guest虛擬機
[root@target ~]# yum install virt-viewer #開啓圖形控制檯安裝虛擬客戶機需要,
[root@target ~]# virt-install \ #安裝選項可用virt-install --help查看
--name node4 \ #虛擬機名
--ram=1024 \ #分配內存大小,MB
--arch=x86_64 \ #模擬的CPU 構架
--vcpus=1 \ #配置虛擬機的vcpu 數目
--check-cpu \ #檢查確定vcpu是否超過物理 CPU數目,如果超過則發出警告。
--os-type=linux \ #要安裝的操作系統類型,例如:'linux'、'unix'、'windows'
--os-variant=rhel5 \ #操作系統版本,如:'fedora6', 'rhel5', 'solaris10', 'win2k'
--disk path=/virhost/node7.img,device=disk,bus=virtio,size=20,sparse=true \ #虛擬機所用磁盤或鏡像文件,size大小G
--bridge=br0 \ #指定網絡,採用透明網橋
--noautoconsole \ #不自動開啓控制檯
--pxe #網絡安裝

四、利用virsh對虛擬機管理
1、開關機
[root@target ~]# virsh start node4 #開機
[root@target ~]# virsh create /etc/libvirt/qemu/node4.xml #直接通過主機配置文檔啓動主機
[root@target ~]# virsh shutdown node4 #關機
[root@target ~]# virsh destroy node4 #強制關閉電源
[root@target ~]# virsh list --all #查看虛擬機狀態 
Id 名稱 狀態
----------------------------------
18 node4 running
- node5 關閉
- win8 關閉

2、添加刪除虛擬機
[root@target ~]# virsh define /etc/libvirt/qemu/node5.xml #根據主機配置文檔添加虛擬機
[root@target ~]# virsh list --all #node5已經添加
Id 名稱 狀態
----------------------------------
18 node4 running
- node5 關閉
- win8 關閉

[root@target ~]# virsh undefine node5 #移除虛擬機
[root@target ~]# ls /etc/libvirt/qemu
networks node4.xml win8.xml
[root@target ~]# virsh list --all #node5已經被移除
Id 名稱 狀態
----------------------------------
18 node4 running
- win8 關閉

3、遠程管理虛擬機(qemu+ssh連接)
[root@target ~]# yum install virt-viewer
[root@target ~]# export DISPLAY=192.168.40.18:0.0
[root@target ~]# virt-viewer -c qemu///system node4 #本地管理虛擬機,system:獲取system權限,注意qemu後是三個/
[root@manager ~]# virt-viewer -c qemu+ssh://[email protected]/system node4 #遠程linux通過virt-viewer+ssh管理虛擬機
Xlib: extension "RANDR" missing on display "192.168.40.18:0.0".
[email protected]'s password:
[email protected]'s password:
#會彈出virt-viwer的gtk管理界面

4、使用已存在的虛擬機配置文檔安裝新的虛擬機
[root@target ~]# qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G
#爲新建虛擬機生產磁盤鏡像文件

[root@target ~]# virsh list
Id 名稱 狀態
----------------------------------
18 node4 running

[root@target ~]# virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml
#導出虛擬機node6的硬件配置信息爲/etc/libvirt/qemu/node6.xml

[root@target ~]# vim /etc/libvirt/qemu/node6.xml 
<domain type='kvm' id='20'> #修改node6的id號
<name>node6</name> #虛擬機node6的name
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid> #uuid必須修改,否則會和node4的衝突
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='rhel5.4.0'>hvm</type>
<boot dev='network'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/virhost/node4.img'/> #指定新虛擬機的硬盤文件
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<mac address='54:52:00:69:d5:c7'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio'/>
</interface>
<interface type='bridge'>
<mac address='54:52:00:69:d5:d7'/>
<source bridge='br0'/>
<target dev='vnet1'/>
<model type='virtio'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/4'/>
<target port='0'/>
</serial>
<console type='pty' tty='/dev/pts/4'>
<source path='/dev/pts/4'/>
<target port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' keymap='en-us'/>
</devices>
</domain>

[root@target ~]# virsh define /etc/libvirt/qemu/node6.xml
#使用虛擬描述文檔建立虛擬機,可用virsh edit node6修改node6的配置文件

[root@target ~]# virsh start node6
#啓動虛擬機

5 爲虛擬機開啓vnc
[root@target ~]# virsh edit node4 #編輯node4的配置文件;不建議直接通過vim node4.xml修改。
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us'/>
#port='-1' autoport='yes':port自動分配,監聽迴環網絡(virt-manager管理需要listen='127.0.0.1'),無密碼
改爲
<graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0' keymap='en-us' passwd='xiaobai'/>
#固定vnc管理端口5904,不自動分配,vnc密碼xiaobai,監聽所有網絡

2. 遠程vnc訪問地址:192.168.32.40:5904

五、存儲池和存儲卷的管理
1.創建 KVM主機存儲池
1).創建基於文件夾(目錄)的存儲池
[root@target virhost]# virsh pool-define-as vmware_pool --type dir --target /virhost/vmware
#定義存儲池vmware_pool

[root@target virhost]# virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware 
#創建存儲池vmware_pool,類型爲文件目錄,/virhost/vmware,與pool-define-as結果一樣

2).創建基於文件系統的存儲池
[root@target virhost]#virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

[root@target virhost]#virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

3).查看存儲池信息
[root@target virhost]# virsh pool-info vmware_pool #查看存儲域(池)信息
名稱: vmware_pool
UUID: 2e9ff708-241f-fd7b-3b57-25df273a55db
狀態: running
Persistent: no
自動啓動: no
容量: 98.40 GB
分配: 18.39 GB
可用: 80.01 GB
4).啓動存儲池
[root@target virhost]# virsh pool-start vmware_pool #啓動存儲池
[root@target virhost]# virsh pool-list
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes 
virhost 活動 yes 
vmware_pool 活動 no
5)銷燬存儲域,取消存儲池
[root@target virhost]# virsh pool-destroy vmware_pool #銷燬存儲池
[root@target virhost]# virsh pool-list --all
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes 
virhost 活動 yes 
vmware_pool 不活躍 no 
[root@target virhost]# virsh pool-undefine vmware_pool #取消存儲池的定義
[root@target virhost]# virsh pool-list --all 
名稱 狀態 自動開始
-----------------------------------------
default 活動 yes 
virhost 活動 yes

2.創建了存儲池後,就可以創建一個卷,這個卷是用來做虛擬機的硬盤
[root@target virhost]# virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2
#創建卷 node6.img,所在存儲池爲vmware_pool,容量10G,初始分配1G,文件格式類型qcow2

[root@target virhost]# virsh vol-info /virhost/vmware/node6.img #查看卷信息
名稱: node6.img
類型: 文件
容量: 10.00 GB
分配: 136.00 KB

3.在存儲捲上安裝虛擬主機
[root@target virhost]#virt-install --connect qemu:///system \
-n node7 \
-r 512 \
-f /virhost/vmware/node7.img \
--vnc \
--os-type=linux \
--os-variant=rhel6 \
--vcpus=1 \
--network bridge=br0 \
-c /mnt/rhel-server-6.0-x86_64-dvd.iso

六、虛擬機的遷移(vmware 2 kvm)
1.安裝軟件
[root@target ~]# yum install -y virt-v2v.x86_64
[root@target ~]# rpm -ivh libguestfs-winsupport-1.0-7.el6.x86_64.rpm virtio-win-1.2.0-1.el6.noarch.rpm 
#虛擬機爲windows時需要libguestfs-winsupport 包來支持 NTFS 文件系統和 virtio-win 包來支持 Windows para-virtualized 存儲和網絡設備驅動

2.創建 KVM 主機存儲域(略)
virt-v2v 在遷移虛擬機的過程中,需要拷貝被遷移虛擬機到 KVM 主機預先定義的存儲池中。

3.創建 KVM 主機網絡接口(略)
虛擬機在遷移之後將連接 KVM 主機網絡, 因此主機必須有一個與之相匹配的網絡接口,比如說網橋。

4.在 KVM 主機上創建或修改 $HOME/.netrc 文件,添加 VMware ESXi 服務器的用戶名和密碼。
[root@target ~]# cat ~/.netrc
machine 192.168.2.251 login root password xxxxxx
[root@target ~]# chmod 0600 ~/.netrc

5.Vmware ESXi到KVM的遷移
[root@target ~]# virt-v2v -ic esx://192.168.2.251/?no_verify=1 -op virhost -b br0 ipserver 
** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 401 Unauthorized
** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK
** GET https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK (2084s)
unknown filesystem /dev/hda
unknown filesystem /dev/fd0
virt-v2v: Installation failed because the following files referenced in the configuration file are required, but missing: rhel/4/kernel-smp-2.6.9-89.EL.i686.rpm
virt-v2v: 非 virtio 驅動程序配置的 tserver21

#所有選項可通過配置文件/etc/virt-v2v.conf來指定
#-op:指定用於轉換後的存儲域(pool),virhost
#-b:指定網絡爲網橋br0
#-ic:指定要轉換的源地址

[root@target kvm_node]# virsh list --all
Id 名稱 狀態
----------------------------------
1 node4 running
- node5 關閉
- tserver21 關閉
- win8 關閉
[root@target kvm_node]# virsh start tserver21

6.KVM到KVM遷移
[root@target kvm_node]# virt-v2v -ic qemu+ssh://192.168.32.179/system -op virhost -b br0 node6
[email protected]'s password:
[email protected]'s password:
unknown filesystem label SWAP-vda3
virt-v2v: The connected hypervisor does not support a machine type of rhel5.4.0. It will be set to the current default.
virt-v2v: virtio 驅動程序配置的 node6

[root@target kvm_node]# virsh list --all
Id 名稱 狀態
----------------------------------
1 node4 running
- node5 關閉
- node6 關閉
- tserver21 關閉
- win8 關閉

[root@target kvm_node]# virsh start node6


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章