2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)
虛擬化技術(shù)簡介
說道KVM,那必須先提虛擬化技術(shù),我網(wǎng)上查的資料,貌似大家對(duì)虛擬化的一些術(shù)語沒有達(dá)成統(tǒng)一的標(biāo)準(zhǔn),如:仿真、完全虛擬化、超虛擬化、操作系統(tǒng)級(jí)虛擬化。
其實(shí)我覺得這些術(shù)語沒有統(tǒng)一,也僅僅是因?yàn)榻嵌鹊膯栴}。也或許是理解不深,所以我這說的也僅僅是個(gè)人理解,可能也是理解不夠深,僅供參考。
而單單連虛擬化這詞,在不同人,不同層面上理解,都不一樣。
神級(jí)別的虛擬化(虛擬化的起源)
先站住計(jì)算機(jī)科學(xué)的層面來看,也就是站在神級(jí)別的角度去看(僅僅為了說得生動(dòng)而已,并非神化科學(xué)),站在神級(jí)別的角度來看什么是虛擬化,準(zhǔn)確來說是虛擬化的起源:
它的存在已經(jīng)超過 50多年了。虛擬化技術(shù)最早用在包括 IBM的7044、麻省理工學(xué)院(MIT)的 CTSS(Compatible Time Sharing System)以及曼徹斯特大學(xué)的 Atlas 項(xiàng)目(世界上最早的超級(jí)計(jì)算機(jī)之一),這些都是請(qǐng)求頁面調(diào)度和監(jiān)管進(jìn)程調(diào)用的先驅(qū)。硬件虛擬化
IBM 早在 20 世紀(jì) 60 年代開發(fā) System/360? Model 67 大型機(jī)時(shí)就認(rèn)識(shí)到了虛擬化的重要性。Model 67 通過 VMM(Virtual Machine Monitor)對(duì)所有的硬件接口都進(jìn)行了虛擬化。在早期計(jì)算中,操作系統(tǒng)被稱為supervisor。能夠在運(yùn)行其他操作系統(tǒng)的操作系統(tǒng)被稱為 hypervisor(這個(gè)術(shù)語是在 20 世紀(jì) 70 年代出現(xiàn)的)。VMM 可以直接在底層硬件上運(yùn)行,允許運(yùn)行多個(gè)虛擬機(jī)(VM)。每個(gè) VM 都可以運(yùn)行一個(gè)自己私有操作系統(tǒng)的實(shí)例 —— 在早些時(shí)候,這稱為 CMS(或 Conversational Monitor System)。之后 VM 繼續(xù)發(fā)展,現(xiàn)在您可以在 System z9? 大型機(jī)上發(fā)現(xiàn) VM。這提供了很好的向后兼容性,甚至是對(duì) System/360 產(chǎn)品線的兼容性。
這里,這個(gè)hypervisor術(shù)語有點(diǎn)重要,要考的。在早期計(jì)算中,操作系統(tǒng)被稱為supervisor。能夠在運(yùn)行其他操作系統(tǒng)的操作系統(tǒng)被稱為 hypervisor。
處理器虛擬化
虛擬化早期的另外一種用法(在本例中是對(duì)處理器的仿真)是 P-code(或偽碼)機(jī)。P-code 是一種機(jī)器語言,運(yùn)行于虛擬機(jī)而不是實(shí)際硬件。P-code 早在 20 世紀(jì) 70 年代就已在加州大學(xué)圣地亞哥分校(UCSD)Pascal 系統(tǒng)上頗有名氣了,它將 Pascal 程序編譯成 P-code,然后在一個(gè) P-code 虛擬機(jī)上運(yùn)行。這就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虛擬機(jī),P-code 程序就可以運(yùn)行。20 世紀(jì) 60 年代對(duì) BCPL(Basic Combined Programming Language)的設(shè)計(jì)中也采用了相同的概念,C 語言即由 BCPL 發(fā)展而來。在這種用法中,編譯器會(huì)將 BCPL 代碼編譯成稱為 O-code 的中間機(jī)器代碼。接下來的第二個(gè)步驟是將 O-code 編譯成目標(biāo)機(jī)器的原始語言。現(xiàn)代編譯器所使用的這種模型為將編譯器移植到新目標(biāo)體系結(jié)構(gòu)上提供了很大的靈活性(通過一種中間語言將前端和后端分隔開來)。
soga,原來C的設(shè)計(jì)也是有這么一方面的考慮。-0-這虛擬化概念牽涉真深。
指令集虛擬化
虛擬化最新的發(fā)展稱為指令集虛擬化,或者二進(jìn)制轉(zhuǎn)換。在這種模型中,虛擬指令集被轉(zhuǎn)換成底層硬件的物理指令集,這個(gè)過程通常都是動(dòng)態(tài)的。當(dāng)代碼執(zhí)行時(shí),就會(huì)對(duì)代碼的某個(gè)段進(jìn)行轉(zhuǎn)換。如果出現(xiàn)分支情況,就會(huì)導(dǎo)入新代碼集并進(jìn)行轉(zhuǎn)換。這使它與緩存操作非常類似,后者是將指令塊從內(nèi)存移動(dòng)到本地快速緩存中執(zhí)行。這種模型最近在 Transmeta 設(shè)計(jì)的 Crusoe 中央處理單元(CPU)中得到了使用。二進(jìn)制轉(zhuǎn)換由 Code Morphing 的專利技術(shù)實(shí)現(xiàn)。類似的一個(gè)例子是完全虛擬化解決方案通過運(yùn)行時(shí)代碼掃描來查找和重定向特權(quán)指令(用來解決特定處理器指令集的一些問題)。
這么一說,好像是Java的JIT(just-in-time) 即時(shí)編譯
當(dāng)虛擬機(jī)發(fā)現(xiàn)某個(gè)方法或代碼塊運(yùn)行特別頻繁時(shí),就會(huì)把這些代碼認(rèn)定為“Hot Spot Code”(熱點(diǎn)代碼),為了提高熱點(diǎn)代碼的執(zhí)行效率,在運(yùn)行時(shí),虛擬機(jī)將會(huì)把這些代碼編譯成與本地平臺(tái)相關(guān)的機(jī)器碼,并進(jìn)行各層次的優(yōu)化,完成這項(xiàng)任務(wù)的正是 JIT 編譯器。人級(jí)別的虛擬化(大家常說的虛擬化)
而這個(gè)層面,虛擬化是:
虛擬化是指在同一臺(tái)物理服務(wù)器上模擬多臺(tái)虛擬機(jī)的能力,且每臺(tái)虛擬機(jī)在邏輯上擁有獨(dú)立的CPU、內(nèi)存、硬盤和網(wǎng)絡(luò)接口等。虛擬化可以提高硬件資源的利用率,使多個(gè)應(yīng)用能隔離的運(yùn)行在同一臺(tái)物理機(jī)上。站在廣義的虛擬化來看(知道我為什么上面用神級(jí)別虛擬化來代替吧,我真不知道比廣義還廣的應(yīng)該叫啥,知道的同學(xué)可以幫忙科普下):
虛擬化分為硬件層面的虛擬化和軟件層面的虛擬化。
硬件層面的虛擬化
硬件層面的虛擬化,我發(fā)現(xiàn)好像很多人是站在這個(gè)角度去看的,所以才把這里面的虛擬化技術(shù)分為:仿真、完全虛擬化、超虛擬化、超虛擬化、操作系統(tǒng)級(jí)虛擬化(這個(gè)應(yīng)該屬于軟件層面的虛擬化,放在這里方便統(tǒng)一記憶)。
在硬件虛擬化的層面,現(xiàn)代虛擬化技術(shù)通常是全虛擬和半虛擬的混合體。常見的硬件虛擬化技術(shù)例如VMWare、Xen和KVM都同時(shí)支持全虛擬化和半虛擬化。硬件虛擬化方式提供的虛擬機(jī),都獨(dú)立的運(yùn)行著一個(gè)完整的操作系統(tǒng),這樣在同一臺(tái)物理宿主機(jī)上存在大量相同或者相似的進(jìn)程和內(nèi)存頁,從而導(dǎo)致較大的性能損耗(比如:宿主機(jī)操作系統(tǒng)是Centos,使用KVM生成的多個(gè)虛擬機(jī),且在每個(gè)虛擬機(jī)中都運(yùn)行Windows操作系統(tǒng)和相同的QQ程序,這樣宿主機(jī)的性能必然產(chǎn)生較大損耗)。因此,硬件虛擬化也被稱為重量級(jí)虛擬化,在同一宿主機(jī)上能夠同時(shí)運(yùn)行的虛擬機(jī)數(shù)量相當(dāng)有限。這層面虛擬化項(xiàng)目有:
| Bochs | 仿真 | LGPL |
| QEMU | 仿真 | LGPL/GPL |
| VMware | 完全虛擬化 | 私有 |
| z/VM | 完全虛擬化 | 私有 |
| Xen | 超虛擬化 | GPL |
| UML | 超虛擬化 | GPL |
| Linux-VServer | 操作系統(tǒng)級(jí)虛擬化 | GPL |
| OpenVZ | 操作系統(tǒng)級(jí)虛擬化 | GPL |
一句話:硬件層面的虛擬化,就是在硬件上面模擬出N套硬件出來,N套硬件上可以裝不同的系統(tǒng),然后不同的虛擬化技術(shù)就是層次不一樣,從而造成性能、便利等有所區(qū)別。
軟件層面的虛擬化
而站在這個(gè)角度里看,有些人都把上述的硬件層面的虛擬機(jī)化統(tǒng)稱為完全虛擬化(這個(gè)概念跟上面的硬件層面的虛擬化中的“完全虛擬化”沖突了,可能會(huì)有困惑,理解角度不一樣看到就不一樣,這或許就沒那么困惑)。
指在同物理服務(wù)器上提供多個(gè)隔離的虛擬運(yùn)行環(huán)境,也被稱為容器技術(shù)。在軟件虛擬化的層面,同一宿主機(jī)上的所有虛擬機(jī)(又稱Container)共享宿主機(jī)的操作系統(tǒng)實(shí)例,不存在由于運(yùn)行多個(gè)操作系統(tǒng)實(shí)例所造成的性能損耗(比如:宿主機(jī)的操作系統(tǒng)為Centos,通過軟件虛擬化技術(shù)生成多個(gè)Container,且每個(gè)Container都運(yùn)行著QQ程序,由于它們共享同一個(gè)宿主機(jī)Centos操作系統(tǒng),所有Container中QQ程序的進(jìn)程在Centos中只有一個(gè))。因此,軟件虛擬化也被稱為輕量級(jí)虛擬化,在同一宿主機(jī)上能夠同時(shí)運(yùn)行的虛擬運(yùn)行環(huán)境數(shù)量比較寬松。以Solaris操作系統(tǒng)上的Container為例,一個(gè)Solaris操作系統(tǒng)的實(shí)例理論上可以支持多達(dá)8000個(gè)Container(實(shí)際能夠運(yùn)行的Container數(shù)量取決于系統(tǒng)資源和負(fù)載)。與此類似,Linux操作系統(tǒng)上的LXC也可以輕松地在同一宿主機(jī)上同時(shí)支持?jǐn)?shù)量可觀的虛擬運(yùn)行環(huán)境。LXC技術(shù)就是屬于這層次上面,對(duì)應(yīng)的項(xiàng)目有:Linux-VServer、OpenVZ和另外一個(gè)鼎鼎大名的Docker
虛擬化性能分析(XEN/KVM/LXC)
參考 http://blog.chinaunix.net/uid...
三種虛擬化性能比較 LXC>>KVM>>XEN
三種虛擬化隔離比較 XEN>>KVM>>LXC
LXC只能虛擬化linux。三種虛擬化內(nèi)存利用率 LXC>>KVM>>XEN
由于LXC共用內(nèi)核,內(nèi)存利用率最高;其他兩種方案每個(gè)虛機(jī)都需要單獨(dú)的操作系統(tǒng)占用一部分內(nèi)存空間。虛擬化的演變和發(fā)展
到了這個(gè)層次,虛擬化應(yīng)該誕生出行業(yè)的區(qū)別。誕生出的行業(yè)有:云計(jì)算、大數(shù)據(jù)
云計(jì)算
比較有代表性就是亞馬遜AWS和開源項(xiàng)目Openstack
大數(shù)據(jù)
比較有代表性的是Hadoop
這里就不展開的說,再展開或許就有點(diǎn)跑偏題。
另外,虛擬化也可以將多臺(tái)計(jì)算機(jī)組合成一臺(tái)計(jì)算機(jī)的形式呈現(xiàn)出來。這通常稱為服務(wù)器聚合或網(wǎng)格計(jì)算。
安裝步驟
準(zhǔn)備工作
1.裝centos7時(shí),SOFTWARE SELECTION這選項(xiàng)選擇Virtualization Host
2.進(jìn)入系統(tǒng)后,修改host
3.關(guān)閉SELinux
vim /etc/selinux/config 將第一個(gè)enable改為disable4.關(guān)閉防火墻
systemctl stop firewalld.service systemctl mask firewalld.service5.新建橋接的網(wǎng)卡,假設(shè)現(xiàn)有以太網(wǎng)的網(wǎng)卡是eth0,則改為以下
進(jìn)入目錄: cd /etc/sysconfig/network-scripts/ TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="0cd981cd-8d6c-4802-a185-c64770110711" DEVICE="eth0" ONBOOT="yes" BRIDGE="br0"其中BOOTPROTO、BRIDGE、ONBOOT是需要改之外,其他都是系統(tǒng)安裝時(shí)的樣子即可
6.在當(dāng)前目錄新建配置ifcfg-br0(復(fù)制ifcfg-eth0改名為ifcfg-br0),內(nèi)容如下:
其中TYPE、BOOTPROTO、BRIDGE、ONBOOT、NAME、DEVICE、IPADDR、PREFIX、GATEWAY、DNS1是需要改之外,其他都是復(fù)制ifcfg-eth0的即可
也就只能ifup br0,所以br0的IPADDR最好就是設(shè)置之前eth0獲取的ip,另外gateway的查詢是: netstat -rn 或 route -n
netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 br0 192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0(以0.0.0.0開始的行的Gateway是默認(rèn)網(wǎng)關(guān))
DNS的查詢則是
注,需查看自己CPU支不支持虛擬化:
egrep '(vmx|svm)' /proc/cpuinfo有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的。
安裝kvm
當(dāng)上面準(zhǔn)備工作都做好,就可以安裝kvm了
1.安裝KVM程序包及其依賴
kvm相關(guān)程序包及其作用:
| qumu-kvm | KVM核心模塊 |
| libvirt | 虛擬機(jī)管理工具,對(duì)虛擬機(jī)進(jìn)行操作的集成各種接口庫函數(shù)的中間件 |
| python-virtinst | 記錄創(chuàng)建VM的xml文件 |
| bridge-utils | 網(wǎng)橋支持工具 |
| virt-viewer | 圖形查看功能 |
| virt-manager | 安裝圖形界面管理虛擬機(jī),virt-manager通過libvirt實(shí)現(xiàn)對(duì)虛擬機(jī)的操作 |
3.開啟kvm服務(wù),并且設(shè)置其開機(jī)自動(dòng)啟動(dòng)
systemctl start libvirtd systemctl enable libvirtd4.兩個(gè)方式查看kvm服務(wù)運(yùn)行狀況
systemctl status libvirtd systemctl is-enabled libvirtd新建虛擬機(jī)
1.新建虛擬機(jī)命令:
virt-install \ --virt-type=kvm \ --name=centos7A \ --vcpus=2 \ --memory=4096 \ --location=/root/CentOS-7-x86_64-DVD-1708.iso \ --disk path=/home/vms/centos7A.qcow2,size=40,format=qcow2 \ --network bridge=br0 \ --graphics none \ --extra-args='console=ttyS0' \ --force2.安裝可過程是命令式安裝centos的,此過程跟圖像界面很類似,這就略過了
虛擬機(jī)常用命令
1.退出鏈接虛擬機(jī):ctrl+]
2.查看虛擬機(jī)列表
3.鏈接虛擬機(jī)
virsh console centos7A4.啟動(dòng)虛擬機(jī)
virsh start centos7C5.刪除虛擬機(jī)
virsh undefine centos7A rm -rf /home/vms/centos7A.qcow2虛擬機(jī)復(fù)制
KVM的虛擬機(jī)復(fù)制分兩種情況:
本機(jī)復(fù)制
1.關(guān)閉虛擬機(jī)
virsh shutdown centos7A2.查看虛擬機(jī)鏡像文件在哪
virsh edit centos7A以下標(biāo)簽就是文件的路徑
<source file='/home/vms/centos7A.qcow2'/>``
3.將centos7A復(fù)制為centos7B
4.即可鏈接虛擬機(jī)centos7B了
非本機(jī)復(fù)制
這目的就是完成類似用VirtualBox的導(dǎo)出功能,導(dǎo)出來給其他機(jī)子上使用
1.創(chuàng)建新虛擬機(jī)centos7B的配置文件
2.進(jìn)入centos7A鏡像的目錄/home/vms/,復(fù)制鏡像
cp centos7A.qcow2 centos7B.qcow23.用vim修改配置文件centos7B.xml,修改name,uuid,disk文件位置,mac地址
4.通過新虛擬機(jī)的配置文件,定義一個(gè)虛擬機(jī):
注:uuid可以網(wǎng)上找個(gè)工具生成,但mac地址一定是新物理機(jī)有的mac地址,如果是本機(jī)復(fù)制,那就不用改mac地址
TroubleShoot
1.非本機(jī)復(fù)制時(shí),define一個(gè)虛擬機(jī)時(shí)報(bào):
錯(cuò)誤:從 /etc/libvirt/qemu/centos7C.xml 定義域失敗 錯(cuò)誤:XML error: expected unicast mac address, found multicast '23:F6:7F:2B:67:5D'那是因?yàn)樗斓膍ac地址是組播地址,要非組播的mac地址才行,開頭大于24即可
2.
錯(cuò)誤:開始域 centos7C 失敗 錯(cuò)誤:unsupported configuration: guest and host CPU are not compatible: Host CPU does not provide required features: x2apic, hypervisor, rdseed, adx, smap, 3dnowprefetch; try using 'Broadwell-noTSX' CPU model總結(jié)
以上是生活随笔為你收集整理的2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cleave and spread co
- 下一篇: FCoe 对比FCIP