簡介:
kvm全稱Kernel-based Virtual Machine, 其實kvm隻是一個核心子產品,提供虛拟cpu和記憶體管理的子產品,至于其它的裝置是由qemu模拟的,如網卡,顯示卡,磁盤等。後來redhat聯合IBM以及Linux社群創造了libvirt,模拟的裝置性能要比qemu的好很多,并提供了一系列的管理工具和api,整個內建了kvm虛拟化的解決方案。Linux(redhat系)裝載kvm子產品後,搖身一變成為了VM Monitor,也稱為Hypervisor,部署使用簡單,需要硬體支援虛拟化。
作用:
提高實體伺服器的資源使用率。(較少在硬體上的投入)
可以批量部署
實作實時快照技術
支援克隆技術
可以實作虛拟機的離線遷移與動态遷移。(提高IT部署的靈活性)
可以資源的動态調整。傳統IT架構的資源全都是固定的,無法動态的配置設定。
一、部署虛拟機
1)檢測硬體是否支援虛拟化
#egrep '(vmx|svm)' --color=auto /proc/cpuinfo
#modprobe kvm
# modprobe kvm_intel || modprobe kvm_amd
#lsmod | grep kvm
kvm_intel 53484 3
kvm 316506 1 kvm_intel
如果含有vmx或者svm字樣,則表示支援cpu虛拟化,Intel是vmx,AMD是svm,如果裝載不成功,則需要在bios中開啟
2)安裝程式支援
#yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform"
#/etc/init.d/libvirtd start
#chkconfig libvirtd on
3)配置網絡橋接網卡
#virsh iface-bridge eth0 br0
## brctl show
bridge namebridge idSTP enabledinterfaces
br08000.5254008f22d4yeseth0
4)部署安裝虛拟機guestos
#mkdir -p /kvm/{isos,vms}
5)建立磁盤檔案,如果使用的是raw格式就不需要了,kvm虛拟機預設使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支援一些新的功能,如支援快照鏡像,zlib磁盤壓縮,AES加密等。這裡使用qcow2格式
#qemu-img create -f qcow2 /kvm/vms/centos6-test1.img 8G
6)建立虛拟機,下面通過幾種方式建立虛拟機
########### 使用使用iso來安裝 ###########
# virt-install \
--name=centos6 \
--os-variant=RHEL6 \
--ram=512 \
--vcpus=1 \
--disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \
--accelerate \
--cdrom /kvm/isos/CentOS6.iso \
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
keymap=en_us \
--network bridge=br0,model=virtio \
--noautoconsole
########### 使用使用nat模式網絡###########
--cdrom /data/iso/CentOS6.iso \
--vnclisten=0.0.0.0 \
keymap=en_us \
--network network=default,model=virtio \
--noautoconsole
######### 從http中啟動,使用ks安裝 #########
--name=centos6 \
--os-variant=RHEL6 \
--ram=4096 \
--vcpus=4 \
--virt-type kvm \
--disk path=/kvm/vms/centos6-test1.img,format=qcow2,size=8,bus=virtio \
--accelerate \
--location http://192.168.130.4/centos63 \
--extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--force \
--noautoconsole
########## 從http安裝,使用ks, 雙網卡, 啟用console ########
--location http://111.205.130.4/centos63 \
--extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0 serial"
--vnc --vncport=5910 --vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--network bridge=br1,model=virtio \
--force \
--noautoconsole
########## 安裝windows ########
--name=win7-test \
--os-variant=win7 \
--vcpus=4 \
--disk path=/kvm/vms/centos6-test1.img,size=100 \
--cdrom=/kvm/isos/win7.iso
--network bridge=br0 \
--force \
--noautoconsole
## 不能使用virtio,因為預設windows沒有virtio的硬碟和網卡驅動
參數說明:
--name指定虛拟機名稱
--ram配置設定記憶體大小。
--vcpus配置設定CPU核心數,最大與實體機CPU核心數相同
--disk指定虛拟機鏡像,size指定配置設定大小機關為G。
--network網絡類型,此處用的是預設,一般用的應該是bridge橋接。可以指定兩次也就是兩塊網卡
--accelerate加速
--cdrom指定安裝鏡像iso
--location 從ftp,http,nfs啟動
keymap=en_us 鍵盤布局方式,避免操作時鍵盤錯亂,不能正常操控
--vnc啟用VNC遠端管理
--vncport指定VNC監控端口,預設端口為5900,端口不能重複,可以通過在虛拟化主機上通過netstat/ss檢視。
--vnclisten指定VNC綁定IP,預設綁定127.0.0.1,這裡改為0.0.0.0,這樣可以通過"VNC Viewer" 連接配接虛拟機,格式'虛拟化主機IP:vncliten端口',通過用戶端方式連接配接時會出現閃退,配置:options--Expert--ColorLevel--full即可
--os-type=linux,windows
--extra-args指定額外的安裝參數
--os-variant= [win7 vista winxp win2k8 rhel6 rhel5]
--force 如果有yes或者no的互動式,自動yes
還可以通過virt-manager指令管理安裝虛拟機

二、virsh常見指令
1、直接鍵入virsh進入互動式模式,支援補全
#virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # list --all
2. virsh list [--all] 檢視虛拟機狀态
3. virsh start instanceName 虛拟機開機
4. virsh shutdown instanceName 虛拟機關機
需要Linux母體機電源管理
service acpid start
5. virsh destroy instanceName 強制關機
6. virsh create /etc/libvirt/qemu/wintest01.xml 通過以前的配置檔案建立虛拟機
7. virsh autostart instanceName 配置自啟動
8. virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml 導出配置檔案
9. virsh undefine wintest01 删除虛拟機配置檔案,不會真的删除虛拟機 ,需要徹底删除需把虛拟映像删除
10. mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml
virsh define /etc/libvirt/qemu/wintest01.xml
重新定義虛拟機
11. virsh edit wintest01 編輯虛拟機配置檔案
12. virsh suspend wintest01 挂起虛拟機
13. virsh resume wintest01 恢複挂起虛拟機
三、虛拟機克隆
I. 1.使用virt-clone指令克隆虛拟機
#virt-clone -n centostest01 -f /kvm/vms/centos6-test01.img -o centos6
Cloning centos6-test1.img 62% [=============================================== ] 25 MB/s | 1.8 GB 00:45 ETA
-n NEW_NAME,--name=NEW_NAME
克隆出的虛拟機名字
-f NEW_DISKFILE, --file=NEW_DISKFILE
硬碟映像存放位置
-o ORIGINAL_GUEST, --original=ORIGINAL_GUEST
被克隆的虛拟機,狀态必須為關閉或者暫停
2.修改centostest01配置檔案
#virsh edit centostest01
graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' keymap='en-us'>
<listen type='address' address='0.0.0.0'/>
#virsh define /etc/libvirt/qemu/centostest01.xml
3.啟動虛拟機
#virsh start centostest01
#netstat -nlpt | awk '$NF~/kvm/'
tcp 0 0 0.0.0.0:5914 0.0.0.0:* LISTEN 12535/qemu-kvm
4.克隆出來的虛拟機會保持原虛拟機的網絡配置,是以要修改MAC位址,防止沖突
1.通過virt-manager指令或者VNC Viewer用戶端連接配接centostest01
2.修改MAC位址,把系統生成的網絡裝置位址改到原網卡配置檔案中,然後修改/etc/udev/rules.d/70-persistent-net.rules
3.重新開機虛拟機
II. 使用virt-manager克隆
四.快照
kvm虛拟機預設使用raw格式的鏡像格式,性能最好,速度最快,它的缺點就是不支援一些新的功能,如支援鏡像,zlib磁盤壓縮,AES加密等。 要使用鏡像功能,磁盤格式必須為qcow2。
1.檢視磁盤格式
#qemu-img info /kvm/vms/test01.img
p_w_picpath: /kvm/vms/test01.img
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 2.9G
cluster_size: 65536
2.如果不是qcow2格式,需要關機轉換磁盤格式,如果是請跳過
#qemu-img convert -f raw -O qcow2 raw磁盤 qcow2磁盤63-119.22.img
3.在啟動虛拟機情況下建立快照
# virsh snapshot-create test01
4.快照位置
# ls /var/lib/libvirt/qemu/snapshot/test01/
1432633791.xml 1432634028.xml
5.檢視快照
#virsh snapshot-list test01
Name Creation Time State
------------------------------------------------------------
1432633791 2015-05-26 17:49:51 +0800 running
1432634028 2015-05-26 17:53:48 +0800 running
6.恢複快照
#virsh snapshot-revert test01 1432633791
7.删除快照
#virsh snapshot-delete test01 1432633791
disk size: 3.5G
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
2 1432634028 280M 2015-05-26 17:53:48 03:45:43.643
五.添加網卡
線上伺服器是雙網卡,一個走内網,一個走外網,我們也需要虛拟機這麼來工作,但是初始安裝虛拟機的時候沒有指定兩個網卡,這樣需要我們來添加一個網卡了,比如說我們已經将br1橋接到em2了,如果不會見剛開始br0橋接em1
1). 通過virt-manager來添加
簡單說一下 選中虛拟機 -- Open -- Details – AddHardware 選擇網卡模式,mac不要重複,确定即可
2). 通過指令來添加
Ⅰ. 使用virsh attach-interface指令為虛拟機添加網卡
# virsh attach-interface test01 --type bridge --source br1 --model virtio
Ⅱ. 導入配置檔案并覆寫原來的虛拟機配置檔案, 因為attach-interface添加後,隻是在虛拟機中生效了,配置檔案并沒有改變
#virsh dumpxml test01 > /etc/libvirt/qemu/test01.xml
#virsh define /etc/libvirt/qemu/test01.xml
Ⅲ. 修改GuestOS中網卡配置檔案,為另一個網卡配置IP
#cd /etc/sysconfig/network-scripts
修改網卡配置檔案
Ⅳ. 重新開機網卡
六.硬碟擴容
原來的/kvm目錄随着使用,空間漸漸滿了,這時候我們就需要給/kvm的挂載分區擴容了,有兩種情況 1. 該分區是lvm格式 2. 不是lvm格式,且不是擴充分區
1). 分區是lvm格式 這種很簡單,添加一塊磁盤,lvm擴容
virt-manager添加方式和添加網卡一樣,不再贅述,下面是使用指令來添加
Ⅰ. 建立磁盤,并附加到虛拟機中
# qemu-img create -f raw 10G.img 10G
# virsh attach-disk test01 /kvm/kvm/10G.img vdb
說明:
test01 虛拟機的名稱
/kvm/vms/10G.img 附加的磁盤
vdb 添加為哪個磁盤, 也就是在guestos中的名字
Ⅱ. 導出并覆寫原來的配置檔案,和網卡一樣,attach後隻是在虛拟機中生效
# virsh dumpxml test01 > /etc/libvert/qemu/test01.xml
Ⅲ. 使用lvm線上擴容,詳見 http://www.cnblogs.com/cmsd/p/3964118.html
2). 分區不是lvm格式,該分區不是擴充分區, 需要關機離線擴充
Ⅰ. 建立一個磁盤,大于原來的容量,比如原來是40G,你想對某個分區擴容20G那麼
# qemu-img create -f qcow2 60G.img 60G
Ⅱ. 備份原來的磁盤,以防三長兩短
# cp test01.img test01.img.bak
Ⅲ. 檢視原來的磁盤決定擴容哪一個分區
# virt-filesystems --partitions --long -a test01.img
# virt-df test01.img
Ⅳ. 擴容GuestOS的sda2
# virt-resize --expand /dev/sda2 test01.img 60G.img
說明:
/dev/sda2 擴容guestos的/dev/sda2
test01.img 原來的磁盤檔案
60G 第一步建立的更大的磁盤檔案
Ⅴ. 使用新磁盤啟動
# mv 60G.img test01.img
# virsh start test01
virt-resize其實就是将原來磁盤中的檔案複制到新的檔案中,講想要擴大的分區擴大了
七.動态遷移
用過vSphere 或者 xenserver的都知道動态遷移,最大程度上減少當機時間 , 比如将正在運作在A上的虛拟機不關機遷移到B上,會将原來虛拟機的記憶體,CPU狀态等遷移到新的主機上,動态遷移需要一些條件
1. 該虛拟機使用共享存儲,在兩台主機上的位置一樣 比如 A,B都将主機C的 /kvm/vms 挂載到了自己的/kvm/vms中,A,B對nfs可讀可寫,或者用moosefs做檔案伺服器,挂在到虛拟化主機。虛拟機在共享存儲中,映像位置不統一會遷移失敗,目标主機環境要和源主機一直,包括網卡配置等。
2. 目标主機最好與源主機型号一樣,或者CPU支援的指令集更多
3. 目标主機CPU,記憶體充足
4. 能通過root使用者ssh連接配接到目的主機上
5. hostname和ip解析一緻, 遷移是通過hostname的,修改/etc/hosts,可以ping通對方的Hostname,為了友善遷移也可以建立主機ssh互信
1)在目标主機上挂載和源虛拟主機位置一樣的檔案系統,并添加主機名和ip到/etc/hosts,建立主機互信
1.1)使用virt-manager來遷移
目标虛拟主機上檢視
#
# virsh list --all
Id 名稱 狀态
----------------------------------------------------
4 centos6b running
1.2)使用migrate指令動态遷移
# virsh migrate centos6b --live qemu+ssh://192.168.1.154:22/system --unsafe
centos6b 遷移的vm
--live 線上模式
qemu+ssh ssh的方式
--unsafe 強制遷移,忽略錯誤
本部落格根據老廣老師的部落格學習整理,播客出處http://laoguang.blog.51cto.com/6013350/1551379