簡介:
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模式網絡###########
# 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 /data/iso/CentOS6.iso \
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
keymap=en_us \
--network network=default,model=virtio \
--noautoconsole
######### 從http中啓動,使用ks安裝 #########
# virt-install \
--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 ########
# virt-install \
--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://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 ########
# virt-install \
--name=win7-test \
--os-variant=win7 \
--ram=4096 \
--vcpus=4 \
--disk path=/kvm/vms/centos6-test1.img,size=100 \
--accelerate \
--cdrom=/kvm/isos/win7.iso
--vnc --vncport=5910 --vnclisten=0.0.0.0 \
--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
#virsh snapshot-list test01
Name Creation Time State
------------------------------------------------------------
1432634028 2015-05-26 17:53:48 +0800 running
#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: 3.5G
cluster_size: 65536
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