最近研究了OpenStack,不可避免的用到了KVM,先總結下對KVM的學習。
一.KVM原理
KVM是在x86平臺上面實現的一種全虛擬化的方案,下面的這個圖是我從網上抄來的。基本上可以說明KVM的結構。
最底下是CPU,內存,IO等物理資源。物理資源上面是VMM(虛擬機監視器),和XEN,EXSI等這些虛擬化不一樣的是。 KVM的VMM其實是作爲linux的一個模塊實現的,所以我們安裝KVM的時候,只需要在linux操作系統上面加載kvm模塊就OK了,而不需要對專門的VMM系統或者對原有的系統進行修改。
VMM層是跑在linux的內核態的,在linux的用戶態,有個叫QEMU的東西,我們可以把QEMU看作是內核kvm模塊和虛擬機之間的橋樑,虛擬機和內核kvm模塊通信要通過QEMU,QEMU也給咱們提供了管理虛擬機的一些命令行工具。 圖裏面的/dev/kvm這個文件,就是QEMU和內核kvm模塊交流的通道。
圖裏面還有些東西沒描繪出來的是,如果僅僅是QEMU管理虛擬機的話,KVM也就只能叫做是軟件虛擬化了,其實KVM是一個硬件虛擬化的方案,硬件虛擬化物理平臺本身提供了對特殊指令的截獲和重定向的硬件支持。顯然,這麼做減少了軟件虛擬化過程中的IO開銷等等性能損耗,提高了虛擬機的性能。
表達的不太好,差不多是這個意思吧
二.硬件環境準備
前面說到了KVM是一套硬件虛擬化方案,主要用到的是Intel VT和AMD-V技術。目前Intel和AMD在硬件方面都已經實現了CPU, 芯片,內存方面的虛擬化,IO方面的虛擬化也快了。Intel的內存虛擬化叫做EPT。
所以安裝虛擬機之前,先在BIOS裏面開啓這些虛擬化相關的選項。
三.環境準備
看一下CPU虛擬化是否已經開啓
egrep '(vmx|svm)' --color=always /proc/cpuinfo
2.檢查一下kvm模塊是否已經加載至內核
root@kvm:~# lsmod | grep kvm kvm_intel 121968 0 kvm 287749 1 kvm_intel
如果查不到的話,就需要執行下下面的這個命令
modprobe kvm-intel或者modprobe kvm-amd
如果執行上面的命令還是加載失敗的時候,那說明內核不支持kvm,那就要重新編譯下內核了,不過2.6.?之後的內核都已經支持kvm了。
3.安裝軟件
aptitude -y install kvm bridge-utils
其中kvm是編譯好的debian平臺下的qemu-kvm,bridge-utils是linux網橋,構建KVM橋接或者NAT模式的網絡的時候需要用到。
四.虛擬機安裝
創建一個磁盤文件
kvm-img create -f qcow2 debian.qcow2 10G
qcow2是類型是KVM提倡使用的類型,這種類型支持壓縮,支持加密,支持稀疏文件,支持一個鏡像文件中有多個虛擬機快照。什麼叫稀疏文件呢?這個和咱們用Vmware的時候差不多,就是咱們雖然創建了一個10G的磁盤文件,但是qcow2類型不會一下子把這10G大小全佔用,而是按需取用。這樣做的好處,顯然可以節省磁盤空間,壞處也很明顯,當磁盤不夠用的時候,臨時去宿主機請求磁盤,這個增加了IO的開銷。
咱們也可以用dd創建一個linux默認的raw格式的磁盤文件
dd if=/dev/zero of=./debian.img count=8192 bs=1M
2.安裝操作系統
設置從光盤啓動,系統安裝到debian.qcow2上面
kvm -smp 2 -m 128 -boot order=cd -hda ./debian.qcow2 -cdrom ./debian-7.4.0-amd64-netinst.iso -vnc :1
安裝命令裏面設置了-vnc :1,我們用vncview連接上去,就可以看到操作系統的安裝界面了。和平常的操作系統一樣,安裝就OK了
3.啓動虛擬機
安裝完畢了,可以在命令行啓動虛擬機。默認啓動的VNC端口是5900,可以用vncview連接上去
kvm debian.qcow2
我這裏啓動虛擬機的時候,沒有加任何參數,使用的都是默認值,cpu默認是1顆,內存默認是128M,網絡默認是KVM自帶的user模式的網絡。下一篇寫寫網絡配置。