KVM定制OpenStack雲主機
如何定制化OpenStack雲主機?從去年10月份剛開始接觸OpenStack,到現在也有一年了。雖說目前只是停留在用它,對它的一些組件簡單的了解,但談到制作出一個OpenStack雲主機的鏡像還真不會。今年年初因為一個比賽需要給雲主機安裝tomcat、ssh等服務,一頭霧水,網上查資料。也有正確的資料,但對於我來說似乎也不管用。記得當時是用libvirt的virsh來實現的。而且雲主機用的是網上下載的ubuntu14.04的server版本,而且又看到網上說,OpenStack只能支持server版本的,我把只支持server當理論來記在腦海里,現在想想真是傻的不行。
前面嘮嗑了下,下面我會一步步來講解如何利用KVM來創建虛擬機(即本文提到的雲主機)。本文使用的環境是ubuntu14.04。一些KVM的概念這里就不闡述了,網上資料很多很全。
一、ubuntu14.04中安裝tun模塊。參考上篇博客,這里不再展開。博客地址
http://www.cnblogs.com/grglym/p/7891253.html
為什么用安裝tun模塊呢?既然需要對虛擬機進行定制化,即需要安裝一些個性化服務,文章開頭中有提及的,如tomcat、ssh等等。安裝這些就需要網絡進行安裝,這樣更加方便。所以呢,虛擬機需要能夠上網呀!在KVM的網絡實現中是通過qemu來實現。qemu網絡相關的教程很多,可以參考如下鏈接:
http://www.jianshu.com/p/110b60c14a8b http://blog.csdn.net/ztsinghua/article/details/49741795
這兩個鏈接把qemu的網絡細節說的很清楚。本文選擇就是qemu的橋接網絡方式來實現KVM虛擬機連接Internet。
二、開啟CPU虛擬化服務。(vmware和virtualbox各自的虛擬化服務如何開啟可網上查看)
modprobe kvm
cat /proc/cpuinfo |grep vmx
在宿主機中輸入如上指令,在flags一欄中查看是否有“vmx”或者“svm”字眼,如圖1所示:
圖 1
說明CPU是Inter的,如果是AMD的CPU,應該是“svm”。
我所遇到的錯誤:
modprobe: ERROR: could not insert 'kvm_intel': Operation not supported
通過在宿主機輸入如下指令
dmesg | grep kvm
輸出為:
kvm: no hardware support
解決辦法:看下是否開啟CPU虛擬化,如果你是用VMware或者virtualbox,它們有各自的CPU虛擬化選項,勾上即可。如果是在物理機上,則需要進入bios了。
三、安裝kvm-qemu工具
kvm-qemu這是個什么鬼呢?我們應該知道KVM是在linux內核內,KVM自身功能也非常。。。。不誇它了,反正就是很有用的虛擬化工具。但它也有痛點,即實現不了網卡虛擬化等一些必要功能,所以需要借助qemu來實現。kvm-qemu是kvm在用戶態下的一個管理工具吧!接下來源碼安裝kvm-qemu。
1、源碼下載
http://sourceforge.net/projects/kvm/files/
下載個最新版本qemu-kvm-1.2.0.tar.gz
tar -zxvf qemu-kvm-1.2.0.tar.gz cd qemu-kvm-1.2.0
2、對qemu-kvm打補丁。
因為本文用的環境時ubuntu14.04,所以需要對qemu-kvm-1.2.0中的configure進行簡單修改,不然會報錯。如圖2所示,添加黑框中的代碼,分別為:
timer_create(CLOCK_REALTIME, NULL, NULL); $pthread_lib libs_qga="-lrt $libs_qga"
圖 2
需要修改的代碼在2681行左右,可通過vim的命令模式下輸入/<time.h>,來快速定位需要修改的代碼位置。
3、qemu-kvm編譯及安裝
./configure --prefix=/usr/local/kvm (注,如果報錯,需要查看第2步中代碼是否修改正確)
make
make install
四、加載KVM內核模塊
modprobe kvm-intel lsmod | grep kvm
圖 3
如果modprobe出錯,可查看二的開啟CPU虛擬化服務。
五、創建br0網橋
1、安裝libvirt
apt-get install libvirt-bin
2、創建br0網橋
virsh iface-bridge eth0 br0
brctl show
圖 4
圖 5
六、KVM創建虛擬機
經過以上五大步驟,終於把准備工作做好了,接下來的才是重頭菜。
1、KVM創建虛擬磁盤,磁盤格式為qcow2。kvm的一些指令可以從網上查到,這里不再解釋。
/usr/local/kvm/bin/qemu-img create -f qcow2 openstack.img 10G
2、KVM虛擬機開啟和關閉的網絡腳本配置。
開啟腳本 qemu-ifup.sh:
#!/bin/bash switch=br0 if [ -n "$1" ]; then #create a tap interface #tunctl -u $(whoami) -t $1 #start up the tap interface ip link set $1 up sleep 1 #add tap interface to the bridge brctl addif ${switch} $1 exit 0 else echo "error: no interface specified" exit 1 fi
關閉腳本 qemu-ifdown.sh :
#!/bin/bash switch=br0 if [ -n "$1" ]; then #delete the specified interface tunctl -d $1 #rlease tap interface from bridge brctl delif $(switch) $1 #shutdown the tap interface ip link set $1 down exit 0 else echo "error: no interface specified" exit 1 fi
腳本授權:
chmod +x qemu-ifup.sh chmod +x qemu-ifdown.sh
3、KVM啟動虛擬機安裝:
/usr/local/kvm/bin/qemu-system-x86_64 -hda openstack.img -cdrom ubuntu-14.04.5-desktop-amd64.iso -boot d -m 1024 -net nic -net tap,ifname=tap1,script=qemu-ifup.sh,downscript=no
4、安裝完成后,下次如需重新進入系統,可用如下命令:
/usr/local/kvm/bin/qemu-system-x86_64 -hda openstack.img -boot d -m 1024 -net nic -net tap,ifname=tap1,script=qemu-ifup.sh,downscript=no
5、KVM虛擬機運行結果展示如圖6所示:
圖 6
6、KVM虛擬機訪問Internet效果展示如圖7所示:
圖 7
七、總結
利用KVM的整個過程還是有些麻煩,以后會嘗試用KVM的管理工具libvirt來實現更加便捷的定制化雲主機。網上資料會有很多,可能不同的環境需要參考不同的資料,這個過程需要踩過很多個坑,這里記錄下在本文環境中可行的處理步驟。
八、參考鏈接
http://blog.csdn.net/ztsinghua/article/details/49741795 http://royluo.org/2014/06/15/kvm-install-1/ http://blog.csdn.net/zhaihaifei/article/details/23168621