KVM 全稱 kernel-based virtual machine,由Qumranet公司發起,2008年被RedHat收購。
KVM實現主要基於Intel-V或者AMD-V提供的虛擬化平臺,利用普通的Linux進程運行於虛擬態的指令集,模擬虛擬機監視器和CPU。KVM不提供硬件虛擬化操做,其IO操做等都藉助QEMU來完成。node
KVM有以下特色:python
每個虛擬機(guest)在Host上都被模擬爲一個QEMU進程,即emulation進程。
咱們建立一個虛擬機後,用普通的ps 命令就能夠查看到。linux
➜ ~ virsh list --all Id Name State ---------------------------------------------------- 1 kvm-01 running ➜ ~ ps aux | grep qemu libvirt+ 20308 15.1 7.5 5023928 595884 ? Sl 17:29 0:10 /usr/bin/qemu-system-x86_64 -name kvm-01 -S -machine pc-i440fx-wily,accel=kvm,usb=off -m 2048 -realtime mlock=off -smp 2 qemu ....
能夠看到,此虛擬機就是一個普通的Linux進程,他有本身的pid。而且有四個線程,線程數量不是固定的,可是至少會有三個(vCPU,IO,Signal)。其中有兩個是vCPU線程,有一個IO線程還有一個信號處理線程。ios
➜ ~ pstree -p 20308 qemu-system-x86(20308)-+-{qemu-system-x86}(20353) |-{qemu-system-x86}(20408) |-{qemu-system-x86}(20409) |-{qemu-system-x86}(20412)
guest的全部用戶級別(user)的指令集,都會直接由宿主機線程執行,此線程會調用KVM的ioctl方式提供的接口加載guest的指令並在特殊的CPU模式下運行,不須要通過CPU指令集的軟件模擬轉換,大大的減小了虛擬化成本,這也是KVM優於其餘虛擬化方式的點之一。centos
KVM向外提供了一個虛擬設備/dev/kvm,經過ioctl(IO設備帶外管理接口)來對KVM進行操做,包括虛擬機的初始化,分配內存,指令加載等等。緩存
guest做爲一個進程存在,固然他的內核的全部驅動等都存在,只是硬件被QEMU所模擬(後面介紹virtio的時候特殊)。guest的全部硬件操做都會有QEMU來接管,QEMU負責與真實的宿主機硬件打交道。服務器
guest的內存在host上由emulator提供,對emulator來講,guest訪問的內存就是他的虛擬地址空間,guest上須要通過一次虛擬地址到物理地址的轉換,轉換到guest的物理地址其實也就是emulator的虛擬地址,emulator再次通過一次轉換,轉換爲host的物理地址。後面會有介紹各類虛擬化的優化手段,這裏只是作一個overview。網絡
1.安裝centos7服務器架構
點擊完成,後開始安裝less
2.虛機開啓虛擬化引擎配置
3.開啓網卡ONBOOT,並重啓網卡
4.查看CPU是否支持虛擬化
grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
5.安裝KVM
virtualization #提供虛擬機的環境,主要包含qemu-kvm
virtualization-client #管理和安裝虛擬機實例的客戶端,主要有python-virtinst,virt-manager,virt-viewer
virtualization-platform #提供訪問和控制虛擬客戶端的接口,主要有libvirt,libvirt-client
virtualization-tools #管理離線虛擬機鏡像的工具,主要有libguestfs
gnome-desktop #安裝圖形管理界面
yum -y group install gnome-desktop virtualization-tools virtualization-platform virtualization-client virtualization #yum安裝包組
6.KVM遠程管理
[root@localhost ~]# which virsh #查看虛擬機管理命令 /usr/bin/virsh [root@localhost ~]# virsh list --all #查看全部虛擬機 Id 名稱 狀態 ----------------------------------------------------
7.使用qemu-kvm管理虛擬機
參數簡介
CPU、Memory、SMP、NUMA
-cpu cpu #select CPU (-cpu ? for list) -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets] -m megs #set vRAM size to megs MB [default=128] -numa node[,mem=size][,cpus=cpu][,nodeid=node]
Storage Device
-drive option[,option[,option[,...]]] #定義一個存儲設備 子選項介紹: id=name #定義硬盤設備名稱 file=/path/to/somefile #硬件映像文件路徑 if=interface_type #指定硬盤設備所鏈接的接口類型(控制器類型), 如ide, scsi, virio等 index=i #設定同一種控制器類型中不一樣設備的索引號 media=disk|cdrom #定義介質類型爲硬盤(disk)仍是光盤(cdrom) snapshot=on|off #指定當前硬盤設備是否支持快照功能 cache=writethrough|writeback|none|unsafe #定義如何使用物理機緩存來訪問塊數據 format=format #指定映像文件的格式, 具體格式可參見qemu-img命令
Display options #顯示選項用於定義虛擬機啓動後的顯示接口相關類型及屬性等
-nographic #默認狀況下, qemu使用SDL來顯示VGA輸出; 而此選項用於禁止圖形接口, 此時, qemu相似一個簡單的命令行程序, 其仿真串口被將被重定向到控制檯 -curses #禁止圖形接口, 並使用curses/ncurses做爲交互接口 -alt-grab #使用Ctrl+Alt+shift組合鍵釋放鼠標 -ctrl-grab #使用右Ctrl鍵釋放鼠標 -sdl #啓用SDL -spice option[,option[,...]] #啓用spice遠程桌面協議, 具體請參照qemu-kvm幫助手冊 -vga [std|cirrus|vmware|qxl|xenfb|none] #指定要仿真的VGA接口類型 -vnc display #默認狀況下, qemu使用SDL顯示VGA輸出; 使用該選項, 可讓qemu監聽在VNC上, 並將VGA輸出重定向至VNC會話; 使用此選項, 必須使用-k選項指定鍵盤佈局類型
Network options #簡單介紹幾種,更多可參考官方手冊
NIC -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] # 建立一個新的網卡設備並鏈接至vlan n中; # pc架構上默認的nic爲e1000, macaddr用於爲其指定MAC地址 # 使用"qemu-kvm -net nic,model=?"來獲取當前平臺支持的類型 # name用於指定一個在監控時顯示的網卡設備名稱 TAP -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][downscript=dfile] #經過物理機的tap網絡接口鏈接至vlan n中, #使用script=file指定腳本(默認爲/etc/qemu-ifup)來配置當前網絡接口 #使用downscript=dfile指定腳本(默認爲/etc/qemu-ifdown)來撤銷接口配置 #使用script=no和downscript=no可分別用來禁止執行腳本 USER -net user[,option][,option][,...] #在用戶模式配置網絡棧, 其不依賴於管理權限 子選項介紹: vlan=n #鏈接之vlan n, 默認n=0 name=str #指定接口的顯示名稱, 經常使用於監控模式中 net=addr[/mask] #設定GuestOS可見的IP網絡, 默認爲192.168.1.0/24 host=addr #指定GuestOS中看到的Host的IP地址, 默認爲指定網絡中的第二個, 即x.x.x.x dhcpstart=addr #指定DHCP服務器地址池中16個地址的起始IP, 默認爲第16個至第31個, 即x.x.x.x ~ x.x.x.x dns=addr #指定GuestOS可見的dns服務器地址, 默認爲GuestOS網絡中第三個地址, 即x.x.x.x
7.1 安裝qemu-kvm
yum -y install qemu-kvm
7.2 查看文件位置
rpm -ql qemu-kvm | grep qemu-kvm | head -2
7.3 建立軟鏈接到/usr/bin目錄下
ln -s /usr/libexec/qemu-kvm /usr/bin
7.4 安裝centos6.10虛機
qemu-kvm -m 128 -smp 1 -name "test" -hda /kvm/images/CentOS-6.10.iso #內存128M CPU 1塊
若此步報錯,應該是主機未開啓虛擬化,在bios中配置虛擬化便可
7.5 安裝VNC客戶端
yum -y install tigervnc
7.6 切換圖形管理界面鏈接VNC
startx & #打開終端命令臺 vncviewer :5900
8.virt-install建立虛擬機並安裝
8.1 建立磁盤
qemu-img create -f qcow2 /kvm/images/CentOS-6.10.qcow2 5G #建一個格式爲qcow2的磁盤
8.2 安裝系統
virt-install \ --name=centos6 \ --disk path=/kvm/images/CentOS-6.10.qcow2 \ --vcpus=1 --ram=1024 \ --cdrom=/kvm/images/CentOS-6.10.iso \ --network network=default \ --graphics vnc,listen=0.0.0.0 \ --os-type=linux \ --os-variant=rhel6
切換至圖形界面可看到以下圖