一碎罚、 虛擬化技術(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
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, openvzLinux內(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。
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
- 客戶端:libvirt-client
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工具集:
-
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
#檢查主機(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