初識KVM之1——虛擬化介紹及創建KVM虛擬機
阿新 • • 發佈:2018-06-11
kvm 虛擬化 一、基礎知識
- CPU的工作機制
隨著雲計算的興起,虛擬化作為雲計算的組成部分也火了一把,但虛擬化並不是什麽新技術,早在上世紀70年代虛擬化技術就已經出現。傳統的CPU由4個環組成,分為:環0--環3,環0只與內核通信,執行特權指令,而環3工作在用戶空間,環1、環2預留,每當用戶空間發起特權請求時,會立即激活內核空間,此時用戶與內核空間的切換稱為軟中斷,用戶空間的所有特權指令都必須通過系統調用的方式來完成 - 全虛擬化、半虛擬化和CPU輔助虛擬化
虛擬化按照實現方式分為:全虛擬化、半虛擬化和CPU輔助的虛擬化,其特點如下:
2.1 全虛擬化
物理機的系統(以下簡稱OS)運行在環0,虛擬機系統(以下簡稱GuestOS)運行在環1,但它以為自己運行在環0,每當GuestOS要執行特權指令時由於內核拒絕與環0之外的CPU環交互,所以位於環0的OS需要捕獲並翻譯GuestOS的特權指令提交給內核,全虛擬化的代表產品為vmware workstation
與全虛擬化GuestOS以為自己運行在環0不同,半虛擬化的GuestOS明確知道自己運行在環1,所以當它要運行特權指令時會將特權指令直接交由OS來進行處理,省掉了OS捕獲的過程,但由於需要讓GuestOS知道自己運行在環1,就需要修改內核,Windows系統由於是不開源的所以不支持半虛擬化,代表產品為KVM、Zen
2.3 CPU輔助虛擬化
Intel和AMD在硬件層面對CPU進行了對虛擬化的支持,相當於OS運行在環-1,GuestOS運行在環0,通過VMM(virtual machine manager)來對虛擬機進行管理,代表產品為vmware esxi
二、KVM、Zen及Docker的實現原理
- Docker介紹
通過上文知道每一個虛擬機都有一個獨立的GuestOS,這種方式的優點是保證了系統的隔離性,但每個虛擬機都需要有GuestOS,不僅產生了不必要的性能消耗,又因為所有GuestOS的特權指令都需要經過GuestOS用戶空間-->GuestOS內核空間-->OS內核空間的2道轉換,降低了效率,Docker就是給予上述基礎產生的。
Docker的實現是將用戶空間隔離成一個個的容器,所有容器公用底層的內核空間而不再創建GuestOS,所以這種方式的響應速度不但快還降低了性能開銷,缺點就是由於共用內核空間,如果一個容器內的程序損壞了內核則該宿主機上的其他Docker也會受牽連 - Zen介紹
Zen是KVM出現前普遍被采用的一種虛擬化技術,但是由於其實現方式一直不被Linux的作者李納斯接受,其實現方式實在原有的Linux系統上安裝Zen後重啟操作系統,安裝的Zen相當於另一個內核,重啟時以Zen的內核啟動,原有的Linux內核成為了一個特權域(dm0),Zen上的每一個虛擬機稱為一個domain,所有虛擬機的特權請求需要通過dm0來完成,Linux淪為小弟的實現方式李納斯本人必然不會接受 - KVM介紹
KVM也有domain的概念,不同於Zen喧兵奪主的方式,采用一種柔和的方式實現,它在Linux系統之上安裝qemu後,原有的Linux系統就變成了可以實現虛擬化的系統,dm0則是原來root的用戶空間,所有特權指令還是通過dm0來實現
這種實現方式由於李納斯本人的推廣而興起,但是qemu本身只能夠實現CPU和內存的虛擬化,I/O的虛擬化則由libvirtd來實現,所以KVM本身只是虛擬化的加速器而非虛擬化本身
三、實驗說明
本次實驗系統版本為CentOS7.3,使用橋接的方式創建一臺KVM虛擬機,關於橋接模式此處做一些說明:所謂橋接模式就是創建一個設備模擬原先物理網卡的IP地址,而原先物理機的網卡此時當成一個交換機,將其工作於混雜模式(接受所有Mac地址),將交換機與模擬出的網卡相關聯
四、操作步驟
- 安裝圖形界面和字體
[root@node1 ~]# yum install dejavu-sans-fonts.noarch
[root@node1 ~]# yum groupinstall "X Window System" - 確認CPU是否支持虛擬化
[root@node1 ~]# grep vmx /proc/cpuinfo - 安裝並啟動服務
[root@node1 ~]# yum install libvirt virt-manager virt-viewer qemu-kvm
[root@node1 ~]# systemctl start libvirtd.service - 創建橋接模式(要先關閉NetworkManager)
[root@node1 ~]# systemctl stop NetworkManager
[root@node1 ~]# systemctl disable NetworkManager
[root@node1 ~]# virsh iface-bridge ens32 br0 --no-stp
[root@node1 network-scripts]# cat ifcfg-br0DEVICE="br0" ONBOOT="yes" TYPE="Bridge" BOOTPROTO="none" IPADDR="172.16.10.10" NETMASK="255.255.255.0" GATEWAY="172.16.10.1" STP="off"
[root@node1 network-scripts]# cat ifcfg-ens32
DEVICE=ens32 ONBOOT=yes BRIDGE="br0"
- 啟動圖形界面創建虛擬機
[root@node1 ~]# virt-manager
如果虛擬機鼠標鍵盤無法使用需要將Display改為VNC並添加一個Input設備,至此,操作完成
初識KVM之1——虛擬化介紹及創建KVM虛擬機