kvm虛擬化技術(shù)實(shí)現(xiàn)原理

一碎罚、 虛擬化技術(shù)

  • 虛擬化是云計算的基礎(chǔ)磅废。簡單的說,虛擬化使得在一臺物理的服務(wù)器上可以跑多臺虛擬機(jī)荆烈,虛擬機(jī)共享物理機(jī)的 CPU拯勉、內(nèi)存、IO 硬件資源憔购,但邏輯上虛擬機(jī)之間是相互隔離的宫峦。
    物理機(jī)我們一般稱為宿主機(jī)(Host),宿主機(jī)上面的虛擬機(jī)稱為客戶機(jī)(Guest)

1玫鸟、虛擬化技術(shù)的分類:

(1) 模擬:Emulation

Qemu, PearPC, Bochs, ...

(2) 完全虛擬化:Full Virtualization导绷,Native Virtualization
  • 完全虛擬化提供底層物理系統(tǒng)的全部抽象化,且創(chuàng)建一個新的虛擬系統(tǒng)屎飘,客戶機(jī)操作系統(tǒng)可以在里面運(yùn)行妥曲。不需要對客戶機(jī)操作系統(tǒng)或者應(yīng)用程序進(jìn)行修改(客戶機(jī)操作系統(tǒng)或者應(yīng)用程序像往常一樣運(yùn)行,意識不到虛擬環(huán)境的存在)钦购。
  • VMware是一款完全虛擬化軟件檐盟。完全虛擬的弱點(diǎn)是效率不如半虛擬化的高
    半虛擬化系統(tǒng)性能可以接近在裸機(jī)上的性能。

VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

(3) 半虛擬化:Para-Virutalization
  • 半虛擬化需要對運(yùn)行在虛擬機(jī)上的客戶機(jī)操作系統(tǒng)
    進(jìn)行修改(這些客戶機(jī)操作系統(tǒng)會意識到它們運(yùn)行在虛擬環(huán)境里)并提供相近的性能押桃,但半虛擬化的性能要比完全虛擬化更優(yōu)越葵萎。

  • 特點(diǎn):GuestOS明確知道自己運(yùn)行虛擬機(jī)之上;
    xen, UML(user-mode linux)

(4) 容器級虛擬化:

LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...

(5) 庫級別虛擬化:

wine

(6) 程序級虛擬化

jvm, pvm, ...

2唱凯、主機(jī)虛擬化:Emulation, Full Virtualization, Para-Virutalization

Type-I:Hypervisor直接運(yùn)行于硬件羡忘;
Type-II:Hypervisor運(yùn)行主機(jī)OS之上;

3磕昼、云棧的類別:

  • IaaS(Infrastructure-as-a-Service)基礎(chǔ)設(shè)施服務(wù)
  • PaaS(Platform-as-a-Service)系統(tǒng)平臺服務(wù)
  • SaaS(Software-as-a-Service)軟件服務(wù)
  • FWaaS(FireWall as a Service)防火墻服務(wù)
  • DBaaS(DataBase-as-a-Service)數(shù)據(jù)庫服務(wù)
  • LBaas (load-balancer-as-a-service)負(fù)載均衡服務(wù)

二卷雕、主機(jī)虛擬化:

1、cpu的虛擬化:

  • 模擬類型:emulation掰烟,虛擬機(jī)的arch與物理平臺的arch可以不同爽蝴;qemu
  • 虛擬類型:virtualization
    完全虛擬化(full-virt)
    * BT:通過軟件二進(jìn)制轉(zhuǎn)換
    * HVM:硬件輔助的虛擬化
    半虛擬化: (pare-virt)
    * GuestOS明確知道自己運(yùn)行于虛擬技術(shù)中
硬件級物理cup虛擬化技術(shù)
  • 英特爾硬件虛擬化技術(shù)interl-VT
  • AMD硬件虛擬化技術(shù)AMD-V

2沐批、內(nèi)存虛擬化管理

  • 早期,虛擬機(jī)中的內(nèi)存到物理內(nèi)存地址機(jī)制,用軟件實(shí)現(xiàn)蝎亚, shadowmmu很低效
    硬件內(nèi)存中添加了九孩,標(biāo)識虛擬機(jī)標(biāo)簽機(jī)制tagged TLB。

  • MMU是Memory Management Unit的縮寫发框,中文名是內(nèi)存管理單元躺彬,它是中央處理器(CPU)中用來管理虛擬存儲器、物理存儲器的控制線路梅惯,同時也負(fù)責(zé)虛擬地址映射為物理地址宪拥,以及提供硬件機(jī)制的內(nèi)存訪問授權(quán),多用戶多進(jìn)程操作系統(tǒng)铣减。

硬件級內(nèi)存虛擬化:

硬件級物理內(nèi)存映射到虛擬機(jī)

  • 英特爾硬件虛擬化技術(shù)EPT她君,Extended Page Table
  • AMD硬件虛擬化技術(shù)NTP,Nested Page Table

3葫哗、硬盤的虛擬化:

  • 虛擬機(jī)如何使用硬盤的空間:虛擬機(jī)在物理硬盤上劃分一個文件來使用缔刹,此文件也是靠宿主機(jī)通過文件系統(tǒng)將磁盤分區(qū)后,并創(chuàng)建文件系統(tǒng)后劣针,分給虛擬機(jī)一個文件的大小的空間校镐。在宿主機(jī)上表現(xiàn)的就是一個文件,而在虛擬機(jī)上表現(xiàn)的就是一塊硬盤捺典。所以還需要用軟件的方式模擬一個適配器鸟廓,將此文件,模擬成硬盤襟己。

4引谜、網(wǎng)絡(luò)虛擬化

  • 用軟件的方式給每個虛擬機(jī)虛擬一塊網(wǎng)卡和MAC地址,當(dāng)通信時使用同一塊物理網(wǎng)卡稀蟋,網(wǎng)卡通訊有排隊方式煌张,在同一臺物理網(wǎng)卡上呐赡,排隊執(zhí)行任務(wù)退客。(將物理網(wǎng)卡設(shè)為混雜模式;無論是不是發(fā)向本機(jī)物理網(wǎng)卡的內(nèi)容都給與接收)链嘀;此時將物理網(wǎng)卡也虛擬化一個MAC地址萌狂,把物理網(wǎng)卡當(dāng)作交換機(jī)來使用。

5怀泊、IO虛擬化

I/O全虛擬化技術(shù)
  • 通過VMM模擬I/O設(shè)備(磁盤和網(wǎng)卡等)實(shí)現(xiàn)虛擬化茫藏。
    Guest OS所能看到就是一組統(tǒng)一的I/O設(shè)備。VMM截獲Guest OS對I/O設(shè)備的訪問請求霹琼,然后通過軟件模擬真實(shí)的硬件务傲。這種方式對Guest而言非常透明凉当,無需考慮底層硬件的情況。
I/O半虛擬化技術(shù)
  • 通過前端(Front-End)/后端(Back-End)模擬實(shí)現(xiàn)虛擬化售葡。
    Guest OS中的驅(qū)動程序?yàn)榍岸丝春迹琕MM提供的與Guest通信的驅(qū)動程序?yàn)楹蠖恕G岸蓑?qū)動將Guest OS的請求通過與VMM間的特殊通信機(jī)制發(fā)送給VMM的后端驅(qū)動挟伙,后端驅(qū)動在處理完請求后再發(fā)送給物理驅(qū)動楼雹。
I/O透傳技術(shù)
  • 設(shè)備透傳就是向一個特定客戶操作系統(tǒng)提供一種設(shè)備隔離,對于性能而言尖阔,使用設(shè)備透傳可以獲得近乎本機(jī)的性能贮缅。對于某些網(wǎng)絡(luò)應(yīng)用程序(或那些擁有高磁盤 I/O 的應(yīng)用程序)來說,這種技術(shù)簡直是完美的介却。這些網(wǎng)絡(luò)應(yīng)用程序沒有采用虛擬化谴供,原因是穿過管理程序(達(dá)到管理程序中的驅(qū)動程序或從管理程序到用戶空間模擬)會導(dǎo)致競爭和性能降低。但是齿坷,當(dāng)這些設(shè)備不能被共享時憔鬼,也可以將它們分配到特定的客戶機(jī)中。例如胃夏,如果一個系統(tǒng)包含多個視頻適配器轴或,則那些適配器可以被傳遞到特定的客戶域中。

6仰禀、一型虛擬化type-1

  • 特點(diǎn):于硬件級別直接運(yùn)行hypervisor虛擬機(jī)管理控制
    xen照雁,vmware ESX/ESXI


    xen虛擬過程

7、二型虛擬化type-2

  • 特點(diǎn):host主機(jī)上建立guest虛擬系統(tǒng)答恶,有宿主機(jī)
    在硬件級別運(yùn)行一個os(host os)饺蚊,而此上運(yùn)行一個vmm監(jiān)視器,用于管理guest虛擬系統(tǒng)
    vmwarworkstations悬嗓, kvm污呼,virtualbox

三、容器級級虛擬化

  • 缺點(diǎn):相較于主機(jī)級虛擬化隔離的不徹底
    方案:lxc, libcontainer, runC, openvz

  • Linux內(nèi)核運(yùn)行在物理設(shè)備上包竹;在內(nèi)核上運(yùn)行多個操作系統(tǒng)如:centos,wubantu;susan;等燕酷,因?yàn)樗麄兌际腔趌inux內(nèi)核來開發(fā)的不同界面的操作系統(tǒng)而已,底層運(yùn)行的內(nèi)核是相同的周瞎。在每個操作系統(tǒng)上在運(yùn)行每個應(yīng)用苗缩。在內(nèi)核上運(yùn)行一個軟件來創(chuàng)建和管理容器,是一個很小的軟件声诸,基本不消耗性能酱讶。

  • 由于多個操作系統(tǒng)使用的是同一個內(nèi)核,當(dāng)在操作系統(tǒng)上執(zhí)行關(guān)機(jī)命令彼乌,就會將內(nèi)核關(guān)閉泻肯,所以需要將每個操作系統(tǒng)隔離開來渊迁,關(guān)掉的只是自身容器 本身而已。各個操作系統(tǒng)之間的操作互補(bǔ)干擾灶挟。(共享內(nèi)核)

四宫纬、KVM虛擬技術(shù)

1、KVM概述

  • 以色列qumranet公司研發(fā)膏萧,后被RedHad公司收購
    (1)kvm只支持x86平臺
    (2)依賴于 HVM,inter VT AMD-v
  • KVM是(Kernel-based Virtual Machine)的簡稱漓骚,是一個開源的系統(tǒng)虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個主要發(fā)行版本中榛泛。它使用Linux自身的調(diào)度器進(jìn)行管理蝌蹂,所以相對于Xen,其核心源碼很少曹锨。
  • KVM的虛擬化需要硬件支持(如Intel VT技術(shù)或者AMD V技術(shù))孤个。是基于硬件的完全虛擬化。而Xen早期則是基于軟件模擬的Para-Virtualization沛简,新版本則是基于硬件支持的完全虛擬化齐鲤。但Xen本身有自己的進(jìn)程調(diào)度器,存儲管理模塊等椒楣,所以代碼較為龐大给郊。廣為流傳的商業(yè)系統(tǒng)虛擬化軟件VMware ESX系列是基于軟件模擬的Full-Virtualization。
工作原理

KVM 是基于虛擬化擴(kuò)展(Intel VT 或者 AMD-V)的 X86 硬件的開源的 Linux 原生的全虛擬化解決方案捧灰。KVM 中淆九,虛擬機(jī)被實(shí)現(xiàn)為常規(guī)的 Linux 進(jìn)程,由標(biāo)準(zhǔn) Linux 調(diào)度程序進(jìn)行調(diào)度毛俏;虛機(jī)的每個虛擬 CPU 被實(shí)現(xiàn)為一個常規(guī)的 Linux 進(jìn)程炭庙。這使得 KMV 能夠使用 Linux 內(nèi)核的已有功能。
但是煌寇,KVM 本身不執(zhí)行任何硬件模擬焕蹄,需要客戶空間程序通過 /dev/kvm 接口設(shè)置一個客戶機(jī)虛擬服務(wù)器的地址空間,向它提供模擬的 I/O阀溶,并將它的視頻顯示映射回宿主的顯示屏腻脏。目前這個應(yīng)用程序是 QEMU。


virtio虛擬方案

2淌哟、KVM的核心組件:

(1)迹卢、 kvm.ko內(nèi)核模塊
  • (kvm.ko)/dev/kvm:工作為hypervisor辽故,在用戶空間可通過系統(tǒng)調(diào)用ioctl()與內(nèi)核中的kvm模塊交互徒仓,從而完成虛擬機(jī)的創(chuàng)建、啟動誊垢、停止掉弛、刪除等各種管理功能症见;
(2)、 qemu-kvm:用戶空間的工具程序
  • qemu-kvm進(jìn)程:工作于用戶空間殃饿,用于實(shí)現(xiàn)IO設(shè)備模擬谋作;用于實(shí)現(xiàn)一個虛擬機(jī)實(shí)例;
(3)libvirt:工具箱用于與主流操作系統(tǒng)虛擬化進(jìn)行交互工具
  • libvirt是cs架構(gòu)應(yīng)用:
    • 客戶端:libvirt-client
      virt-manager
    • daemon:圖像化工具
      libvirt-deaemon

3乎芳、KVM運(yùn)行模式

KVM模塊load進(jìn)內(nèi)存之后遵蚜,系統(tǒng)的運(yùn)行模式:

  • 內(nèi)核模式:GuestOS執(zhí)行IO類的操作時,或其它的特殊指令操作時的模式奈惑;它也被稱為“Guest-Kernel”模式吭净;
  • 用戶模式:Host OS的用戶空間,用于代為GuestOS發(fā)出IO請求肴甸;
  • 來賓模式:GuestOS的用戶模式寂殉;所有的非IO類請求;

4原在、KSM機(jī)制

掃描物理內(nèi)存友扰,發(fā)現(xiàn)多個虛擬機(jī)實(shí)例有相同的內(nèi)存空間,合并成為一個共享內(nèi)存空間庶柿,節(jié)省內(nèi)存村怪。

5、kvm工具集:

image.png
  • qemu工具

    • qemu-kvm:用戶空間的工具程序浮庐,創(chuàng)建管理虛擬機(jī)

    • qemu-img:是 QEMU 的磁盤管理工具

  • libvirt工具

    • GUI:virt-manager, virt-viewer:圖形化管理
    • CLI: virsh, virt-install:創(chuàng)建管理虛擬機(jī)
  • 集群工具:
    libvirtd:管理虛擬機(jī)和其他虛擬化功能实愚,比如存儲管理,網(wǎng)絡(luò)管理的軟件集合兔辅。Libvirt是一個C工具包的虛擬化功能與最新版本的Linux(以及其他操作系統(tǒng))腊敲。主包包含libvirtd服務(wù)器虛擬化支持出口。

5维苔、KVM快速安裝

(1)判斷CPU是否支持硬件虛擬化:
grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v

運(yùn)行中的一個kvm虛擬機(jī)就是一個qemu-kvm進(jìn)程碰辅,運(yùn)行qemu-kvm程序并傳遞給它合適的選項及參數(shù)即能完成虛擬機(jī)啟動,終止此進(jìn)程即能關(guān)閉虛擬機(jī)介时;

(2)没宾、裝載內(nèi)核模塊

kvm:核心模塊

kvm-intel|kvm-amd
(3)、使用virt-manager管理KVM
# yum install qemu-kvm libvirt-daemon-kvm  virt-manager
# modprobe kvm

# systemctl start libvirtd.service

# virt-manager &
(4)沸柔、網(wǎng)絡(luò)虛擬化:

CentOS 7創(chuàng)建物理橋循衰,使用內(nèi)核自帶的橋接模塊實(shí)現(xiàn):
橋接口配置文件保留地址信息;

TYPE=Bridge
Device=BRIDGE_NAME

物理網(wǎng)卡配置文件:
刪除地址褐澎、掩碼和網(wǎng)關(guān)等相關(guān)的配置会钝,添加

BRIDGE=BRIDGE_NAME

重啟網(wǎng)絡(luò)服務(wù)即可:

五、安裝KVM示例

  • 安裝前首先開啟虛擬機(jī)Inter VT


    實(shí)驗(yàn)前開啟
#檢查主機(jī)cpu是否支持虛擬化
[root@node-64 ~]# grep -E -i "svm|vmx" /proc/cpuinfo
..........vmx ......... #出現(xiàn)這個字段即可支持虛擬化

#安裝kvm模塊
[root@node-64 ~]# modprobe kvm
[root@node-64 ~]# lsmod | grep kvm
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
[root@node-64 ~]# ls /dev/kvm
/dev/kvm

[root@node-64 ~]# yum install libvirt libvirt-daemon virt-manager -y
[root@node-64 ~]# systemctl start libvirtd.service
[root@node-64 ~]# systemctl enable libvirtd.service

#安裝物理橋
[root@node-64 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255
#創(chuàng)建網(wǎng)橋
[root@node-64 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33

此時會斷網(wǎng),到虛擬機(jī)重啟一下迁酸,發(fā)現(xiàn)已生成網(wǎng)橋先鱼,但還要配置網(wǎng)橋的dns,否則無法上網(wǎng)奸鬓。

[root@node-64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.1.64"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
DNS1=202.106.46.151   #添加
DNS2=8.8.8.8          #添加

#重啟網(wǎng)絡(luò)
[root@node-64 ~]#systemctl restart network.service

[root@node-64 ~]# ifconfig
br0:    #生成虛擬網(wǎng)橋焙畔,并獲得物理網(wǎng)卡的地址
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255

ens33:    #原物理網(wǎng)卡變成虛擬交換機(jī)
 flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:79:2e:94  txqueuelen 1000  (Ethernet)

其他終端圖形登錄[root@node-60 ~]# ssh -X root@192.168.1.64

 ssh -X root@192.168.1.64
[root@node-64 ~]# virt-manager

參考鏈接:
http://www.178linux.com/103971
https://www.cnblogs.com/sunhao96/p/7605865.html
https://bbs.csdn.net/topics/391040787
https://www.ibm.com/developerworks/cn/linux/l-pci-passthrough

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市串远,隨后出現(xiàn)的幾起案子宏多,更是在濱河造成了極大的恐慌,老刑警劉巖澡罚,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绷落,死亡現(xiàn)場離奇詭異,居然都是意外死亡始苇,警方通過查閱死者的電腦和手機(jī)砌烁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催式,“玉大人函喉,你說我怎么就攤上這事∪僭拢” “怎么了管呵?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哺窄。 經(jīng)常有香客問我捐下,道長,這世上最難降的妖魔是什么萌业? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任坷襟,我火速辦了婚禮,結(jié)果婚禮上生年,老公的妹妹穿的比我還像新娘婴程。我一直安慰自己,他們只是感情好抱婉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布档叔。 她就那樣靜靜地躺著,像睡著了一般蒸绩。 火紅的嫁衣襯著肌膚如雪衙四。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天患亿,我揣著相機(jī)與錄音传蹈,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛卡睦,可吹牛的內(nèi)容都是我干的宴胧。 我是一名探鬼主播漱抓,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼表锻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乞娄?” 一聲冷哼從身側(cè)響起瞬逊,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仪或,沒想到半個月后确镊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡范删,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年蕾域,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片到旦。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡旨巷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出添忘,到底是詐尸還是另有隱情采呐,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布搁骑,位于F島的核電站斧吐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仲器。R本人自食惡果不足惜煤率,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乏冀。 院中可真熱鬧涕侈,春花似錦、人聲如沸煤辨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽众辨。三九已至端三,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹃彻,已是汗流浹背郊闯。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人团赁。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓育拨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欢摄。 傳聞我的和親對象是個殘疾皇子熬丧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容