一、 虛擬化技術(shù)
- 虛擬化是云計(jì)算的基礎(chǔ)。簡(jiǎn)單的說(shuō),虛擬化使得在一臺(tái)物理的服務(wù)器上可以跑多臺(tái)虛擬機(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)建一個(gè)新的虛擬系統(tǒng),客戶機(jī)操作系統(tǒng)可以在里面運(yùn)行。不需要對(duì)客戶機(jī)操作系統(tǒng)或者應(yīng)用程序進(jìn)行修改(客戶機(jī)操作系統(tǒng)或者應(yīng)用程序像往常一樣運(yùn)行,意識(shí)不到虛擬環(huán)境的存在)。
- VMware是一款完全虛擬化軟件。完全虛擬的弱點(diǎn)是效率不如半虛擬化的高
半虛擬化系統(tǒng)性能可以接近在裸機(jī)上的性能。
VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)
(3) 半虛擬化:Para-Virutalization
半虛擬化需要對(duì)運(yùn)行在虛擬機(jī)上的客戶機(jī)操作系統(tǒng)
進(jìn)行修改(這些客戶機(jī)操作系統(tǒng)會(huì)意識(shí)到它們運(yùn)行在虛擬環(huán)境里)并提供相近的性能,但半虛擬化的性能要比完全虛擬化更優(yōu)越。特點(diǎn):GuestOS明確知道自己運(yùn)行虛擬機(jī)之上;
xen, UML(user-mode linux)
(4) 容器級(jí)虛擬化:
LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...
(5) 庫(kù)級(jí)別虛擬化:
wine
(6) 程序級(jí)虛擬化
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)平臺(tái)服務(wù)
- SaaS(Software-as-a-Service)軟件服務(wù)
- FWaaS(FireWall as a Service)防火墻服務(wù)
- DBaaS(DataBase-as-a-Service)數(shù)據(jù)庫(kù)服務(wù)
- LBaas (load-balancer-as-a-service)負(fù)載均衡服務(wù)
二、主機(jī)虛擬化:
1、cpu的虛擬化:
- 模擬類型:emulation,虛擬機(jī)的arch與物理平臺(tái)的arch可以不同;qemu
- 虛擬類型:virtualization
完全虛擬化(full-virt)
* BT:通過(guò)軟件二進(jìn)制轉(zhuǎn)換
* HVM:硬件輔助的虛擬化
半虛擬化: (pare-virt)
* GuestOS明確知道自己運(yùn)行于虛擬技術(shù)中
硬件級(jí)物理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)識(shí)虛擬機(jī)標(biāo)簽機(jī)制tagged TLB。MMU是Memory Management Unit的縮寫,中文名是內(nèi)存管理單元,它是中央處理器(CPU)中用來(lái)管理虛擬存儲(chǔ)器、物理存儲(chǔ)器的控制線路,同時(shí)也負(fù)責(zé)虛擬地址映射為物理地址,以及提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán),多用戶多進(jìn)程操作系統(tǒng)。
硬件級(jí)內(nèi)存虛擬化:
硬件級(jí)物理內(nèi)存映射到虛擬機(jī)
- 英特爾硬件虛擬化技術(shù)EPT,Extended Page Table
- AMD硬件虛擬化技術(shù)NTP,Nested Page Table
3、硬盤的虛擬化:
- 虛擬機(jī)如何使用硬盤的空間:虛擬機(jī)在物理硬盤上劃分一個(gè)文件來(lái)使用,此文件也是靠宿主機(jī)通過(guò)文件系統(tǒng)將磁盤分區(qū)后,并創(chuàng)建文件系統(tǒng)后,分給虛擬機(jī)一個(gè)文件的大小的空間。在宿主機(jī)上表現(xiàn)的就是一個(gè)文件,而在虛擬機(jī)上表現(xiàn)的就是一塊硬盤。所以還需要用軟件的方式模擬一個(gè)適配器,將此文件,模擬成硬盤。
4、網(wǎng)絡(luò)虛擬化
- 用軟件的方式給每個(gè)虛擬機(jī)虛擬一塊網(wǎng)卡和MAC地址,當(dāng)通信時(shí)使用同一塊物理網(wǎng)卡,網(wǎng)卡通訊有排隊(duì)方式,在同一臺(tái)物理網(wǎng)卡上,排隊(duì)執(zhí)行任務(wù)。(將物理網(wǎng)卡設(shè)為混雜模式;無(wú)論是不是發(fā)向本機(jī)物理網(wǎng)卡的內(nèi)容都給與接收);此時(shí)將物理網(wǎng)卡也虛擬化一個(gè)MAC地址,把物理網(wǎng)卡當(dāng)作交換機(jī)來(lái)使用。
5、IO虛擬化
I/O全虛擬化技術(shù)
- 通過(guò)VMM模擬I/O設(shè)備(磁盤和網(wǎng)卡等)實(shí)現(xiàn)虛擬化。
Guest OS所能看到就是一組統(tǒng)一的I/O設(shè)備。VMM截獲Guest OS對(duì)I/O設(shè)備的訪問(wèn)請(qǐng)求,然后通過(guò)軟件模擬真實(shí)的硬件。這種方式對(duì)Guest而言非常透明,無(wú)需考慮底層硬件的情況。
I/O半虛擬化技術(shù)
- 通過(guò)前端(Front-End)/后端(Back-End)模擬實(shí)現(xiàn)虛擬化。
Guest OS中的驅(qū)動(dòng)程序?yàn)榍岸耍琕MM提供的與Guest通信的驅(qū)動(dòng)程序?yàn)楹蠖恕G岸蓑?qū)動(dòng)將Guest OS的請(qǐng)求通過(guò)與VMM間的特殊通信機(jī)制發(fā)送給VMM的后端驅(qū)動(dòng),后端驅(qū)動(dòng)在處理完請(qǐng)求后再發(fā)送給物理驅(qū)動(dòng)。
I/O透?jìng)骷夹g(shù)
- 設(shè)備透?jìng)骶褪窍蛞粋€(gè)特定客戶操作系統(tǒng)提供一種設(shè)備隔離,對(duì)于性能而言,使用設(shè)備透?jìng)骺梢垣@得近乎本機(jī)的性能。對(duì)于某些網(wǎng)絡(luò)應(yīng)用程序(或那些擁有高磁盤 I/O 的應(yīng)用程序)來(lái)說(shuō),這種技術(shù)簡(jiǎn)直是完美的。這些網(wǎng)絡(luò)應(yīng)用程序沒有采用虛擬化,原因是穿過(guò)管理程序(達(dá)到管理程序中的驅(qū)動(dòng)程序或從管理程序到用戶空間模擬)會(huì)導(dǎo)致競(jìng)爭(zhēng)和性能降低。但是,當(dāng)這些設(shè)備不能被共享時(shí),也可以將它們分配到特定的客戶機(jī)中。例如,如果一個(gè)系統(tǒng)包含多個(gè)視頻適配器,則那些適配器可以被傳遞到特定的客戶域中。
6、一型虛擬化type-1
-
特點(diǎn):于硬件級(jí)別直接運(yùn)行hypervisor虛擬機(jī)管理控制
xen,vmware ESX/ESXI
xen虛擬過(guò)程
7、二型虛擬化type-2
- 特點(diǎn):host主機(jī)上建立guest虛擬系統(tǒng),有宿主機(jī)
在硬件級(jí)別運(yùn)行一個(gè)os(host os),而此上運(yùn)行一個(gè)vmm監(jiān)視器,用于管理guest虛擬系統(tǒng)
vmwarworkstations, kvm,virtualbox
三、容器級(jí)級(jí)虛擬化
缺點(diǎn):相較于主機(jī)級(jí)虛擬化隔離的不徹底
方案:lxc, libcontainer, runC, openvzLinux內(nèi)核運(yùn)行在物理設(shè)備上;在內(nèi)核上運(yùn)行多個(gè)操作系統(tǒng)如:centos,wubantu;susan;等,因?yàn)樗麄兌际腔趌inux內(nèi)核來(lái)開發(fā)的不同界面的操作系統(tǒng)而已,底層運(yùn)行的內(nèi)核是相同的。在每個(gè)操作系統(tǒng)上在運(yùn)行每個(gè)應(yīng)用。在內(nèi)核上運(yùn)行一個(gè)軟件來(lái)創(chuàng)建和管理容器,是一個(gè)很小的軟件,基本不消耗性能。
由于多個(gè)操作系統(tǒng)使用的是同一個(gè)內(nèi)核,當(dāng)在操作系統(tǒng)上執(zhí)行關(guān)機(jī)命令,就會(huì)將內(nèi)核關(guān)閉,所以需要將每個(gè)操作系統(tǒng)隔離開來(lái),關(guān)掉的只是自身容器 本身而已。各個(gè)操作系統(tǒng)之間的操作互補(bǔ)干擾。(共享內(nèi)核)
四、KVM虛擬技術(shù)
1、KVM概述
- 以色列qumranet公司研發(fā),后被RedHad公司收購(gòu)
(1)kvm只支持x86平臺(tái)
(2)依賴于 HVM,inter VT AMD-v - KVM是(Kernel-based Virtual Machine)的簡(jiǎn)稱,是一個(gè)開源的系統(tǒng)虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個(gè)主要發(fā)行版本中。它使用Linux自身的調(diào)度器進(jìn)行管理,所以相對(duì)于Xen,其核心源碼很少。
- KVM的虛擬化需要硬件支持(如Intel VT技術(shù)或者AMD V技術(shù))。是基于硬件的完全虛擬化。而Xen早期則是基于軟件模擬的Para-Virtualization,新版本則是基于硬件支持的完全虛擬化。但Xen本身有自己的進(jìn)程調(diào)度器,存儲(chǔ)管理模塊等,所以代碼較為龐大。廣為流傳的商業(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ī)的每個(gè)虛擬 CPU 被實(shí)現(xiàn)為一個(gè)常規(guī)的 Linux 進(jìn)程。這使得 KMV 能夠使用 Linux 內(nèi)核的已有功能。
但是,KVM 本身不執(zhí)行任何硬件模擬,需要客戶空間程序通過(guò) /dev/kvm 接口設(shè)置一個(gè)客戶機(jī)虛擬服務(wù)器的地址空間,向它提供模擬的 I/O,并將它的視頻顯示映射回宿主的顯示屏。目前這個(gè)應(yīng)用程序是 QEMU。
2、KVM的核心組件:
(1)、 kvm.ko內(nèi)核模塊
- (kvm.ko)/dev/kvm:工作為hypervisor,在用戶空間可通過(guò)系統(tǒng)調(diào)用ioctl()與內(nèi)核中的kvm模塊交互,從而完成虛擬機(jī)的創(chuàng)建、啟動(dòng)、停止、刪除等各種管理功能;
(2)、 qemu-kvm:用戶空間的工具程序
- qemu-kvm進(jìn)程:工作于用戶空間,用于實(shí)現(xiàn)IO設(shè)備模擬;用于實(shí)現(xiàn)一個(gè)虛擬機(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類的操作時(shí),或其它的特殊指令操作時(shí)的模式;它也被稱為“Guest-Kernel”模式;
- 用戶模式:Host OS的用戶空間,用于代為GuestOS發(fā)出IO請(qǐng)求;
- 來(lái)賓模式:GuestOS的用戶模式;所有的非IO類請(qǐng)求;
4、KSM機(jī)制
掃描物理內(nèi)存,發(fā)現(xiàn)多個(gè)虛擬機(jī)實(shí)例有相同的內(nèi)存空間,合并成為一個(gè)共享內(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ī)和其他虛擬化功能,比如存儲(chǔ)管理,網(wǎng)絡(luò)管理的軟件集合。Libvirt是一個(gè)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)行中的一個(gè)kvm虛擬機(jī)就是一個(gè)qemu-kvm進(jìn)程,運(yùn)行qemu-kvm程序并傳遞給它合適的選項(xiàng)及參數(shù)即能完成虛擬機(jī)啟動(dòng),終止此進(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)這個(gè)字段即可支持虛擬化
#安裝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
此時(shí)會(huì)斷網(wǎng),到虛擬機(jī)重啟一下,發(fā)現(xiàn)已生成網(wǎng)橋,但還要配置網(wǎng)橋的dns,否則無(wú)法上網(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