NO IMAGE

本文轉載自:虛擬化,看這篇文章就夠了

虛擬化使用軟體的方法重新定義劃分IT資源,可以實現IT資源的動態分配、靈活排程、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務於各行各業中靈活多變的應用需求。

作者:朱國立|2017-03-30 22:41
目錄

虛擬化,你造嗎?

一、什麼是虛擬化?

虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時執行多個邏輯計算機,每個邏輯計算機可執行不同的作業系統,並且應用程式都可以在相互獨立的空間內執行而互不影響,從而顯著提高計算機的工作效率。

虛擬化使用軟體的方法重新定義劃分IT資源,可以實現IT資源的動態分配、靈活排程、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務於各行各業中靈活多變的應用需求。

二、Hypervisor是什麼?

Hypervisor一種執行在基礎物理伺服器和作業系統之間的中間軟體層,可允許多個作業系統和應用共享硬體。也可叫做VMM( virtual machine monitor ),即虛擬機器監視器。

Hypervisor是一種在虛擬環境中的“元”作業系統。他們可以訪問伺服器上包括磁碟和記憶體在內的所有物理裝置。Hypervisor不但協調著這些硬體資源的訪問,也同時在各個虛擬機器之間施加防護。當伺服器啟動並執行Hypervisor時,它會載入所有虛擬機器客戶端的作業系統同時會分配給每一臺虛擬機器適量的記憶體,CPU,網路和磁碟。

三、虛擬化有哪些分類?

1. 完全虛擬化

最流行的虛擬化方法,使用Hypervisor這種中間層軟體,在虛擬伺服器和底層硬體之間建立一個抽象層。

Hypervisor可以捕獲CPU指令,為指令訪問硬體控制器和外設充當中介。因而,完全虛擬化技術幾乎能讓任何一款作業系統不用改動就能安裝到虛擬伺服器上,而它們不知道自己執行在虛擬化環境下。主要缺點是,效能方面不如裸機,因為Hypervisor需要佔用一些資源,給處理器帶來開銷。

在完全虛擬化的環境下,Hypervisor執行在裸硬體上,充當主機作業系統,而由Hypervisor管理的虛擬伺服器執行客戶端作業系統(Guest OS)。

完全虛擬化

2. 準虛擬化

完全虛擬化是處理器密集型技術,因為它要求Hypervisor管理各個虛擬伺服器,並讓它們彼此獨立。減輕這種負擔的一種方法就是,改動客戶作業系統,讓它以為自己執行在虛擬環境下,能夠與Hypervisor協同工作,這種方法就叫準虛擬化。

準虛擬化技術的優點是效能高。經過準虛擬化處理的伺服器可與Hypervisor協同工作,其響應能力幾乎不亞於未經過虛擬化處理的伺服器。它的客戶作業系統(Guest OS)整合了虛擬化方面的程式碼。該方法無需重新編譯或引起陷阱,因為作業系統自身能夠與虛擬程序進行很好的協作。

準虛擬化

3. 作業系統層虛擬化

實現虛擬化還有一個方法,那就是在作業系統層面增添虛擬伺服器功能。就作業系統層的虛擬化而言,沒有獨立的Hypervisor層。相反主機作業系統本身就負責在多個虛擬伺服器之間分配硬體資源,並且讓這些伺服器彼此獨立。一個明顯的區別是,如果使用作業系統層虛擬化,所有虛擬伺服器必須執行同一作業系統。

雖然作業系統層虛擬化的靈活性比較差,但本機速度效能比較高。此外,由於架構在所有虛擬伺服器上使用單一、標準的作業系統,管理起來比異構環境要容易。

4. 桌面虛擬

伺服器虛擬化主要針對伺服器而言,而虛擬化最接近使用者的還是要算的上桌面虛擬化了,桌面虛擬化主要功能是將分散的桌面環境集中儲存並管理起來,包括桌面環境的集中下發,集中更新,集中管理。桌面虛擬化使得桌面管理變得簡單,不用每臺終端單獨進行維護,每臺終端進行更新。終端資料可以集中儲存在中心機房裡,安全性相對傳統桌面應用要高很多。桌面虛擬化可以使得一個人擁有多個桌面環境,也可以把一個桌面環境供多人使用,節省了license。另外,桌面虛擬化依託於伺服器虛擬化。沒有伺服器虛擬化,這個桌面虛擬化的優勢將完全沒有了。不僅如此,還浪費了許多管理資本。

5. 硬體虛擬化

英特爾虛擬化技術(IVT,Intel Virtualization Technology)是由英特爾開發的一種虛擬化技術,利用IVT可以對在系統上的客作業系統,通過虛擬機器檢視器(VMM,Virtual Machine Monitor)來虛擬一套硬體裝置,以供客作業系統使用。這些技術以往在VMware與Virtual PC上都通過軟體實現,而通過IVT的硬體支援可以加速此類軟體的進行。

AMD虛擬化(AMD Virtualization),縮寫為“AMD-V”,是AMD為64位的x86架構提供的虛擬化擴充套件的名稱,但有時仍然會用“Pacifica”(AMD開發這項擴充套件時的內部專案程式碼)來指代它。

四、有哪些虛擬化技術?

虛擬化技術指的是軟體層面的實現虛擬化的技術,整體上分為開源虛擬化和商業虛擬化兩大陣營。典型的代表有:Xen,KVM,WMware,Hyper-V、Docker容器等。

Xen和KVM,是開源免費的虛擬化軟體;WMware是付費的虛擬化軟體;Hyper-V微軟的收費虛擬化技術;Docker是一種容器技術,屬於一種輕量級虛擬化技術。

虛擬化軟體產品有很多,無論是開源還是商業的,上面只是列舉了很少的幾款,每款軟體產品有其優缺點以及應用場景,需要根據業務場景選擇,下面簡單介紹一下KVM和Xen。

1. KVM(Kernel-based Virtual Machine)基於核心的虛擬

KVM是整合到Linux核心的Hypervisor,是X86架構且硬體支援虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模組,利用Linux做大量的事,如任務排程、記憶體管理與硬體裝置互動等。

KVM(Kernel-based Virtual Machine)基於核心的虛擬

2. Xen

Xen是第一類執行在裸機上的虛擬化管理程式(Hypervisor)。它支援全虛擬化和準虛擬化,Xen支援hypervisor和虛擬機器互相通訊,而且提供在所有Linux版本上的免費產品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。

Xen最重要的優勢在於準虛擬化,此外未經修改的作業系統也可以直接在Xen上執行(如Windows),能讓虛擬機器有效執行而不需要模擬,因此虛擬機器能感知到Hypervisor,而不需要模擬虛擬硬體,從而能實現高效能。

Xen

五、還是不明白嗎?

講了那麼多,你可能有點暈,因為概念比較接近,容易混淆。下面重點解釋一下幾個關鍵概念。

1. 虛擬化型別

虛擬化型別,比如完全虛擬化、準虛擬化等指的是設計層面的實現虛擬化的方案和思想,而不涉及具體的虛擬化技術。

2. 虛擬化技術

虛擬化技術指的是軟體層面的實現虛擬化的技術,整體上分為開源虛擬化和商業虛擬化兩大陣營。部分商業虛擬化的技術也是在開源技術的基礎之上發展而來的。

3. 虛擬機器軟體

基於虛擬化技術的單機版虛擬機器管理軟體,如:

  • KVM: Linux的虛擬機器基於KVM虛擬技術的單機版虛擬機器管理軟體。
  • VirtualBox:oracle公司的直接基於Intel VT及AMD-V的虛擬機器管理軟體。
  • VMware Workstation:Wmware公司的基於Wmware虛擬技術的虛擬機器管理軟體。

4. 雲端計算

雲端計算中的虛擬化指的是IaaS層虛擬化解決方案,而不是虛擬機器技術。IaaS層虛擬化解決方案,要符合IaaS層的基礎特點,除了最基礎的虛擬化軟體之外,還包括,共享儲存服務,映象服務,身份認證服務,統一監控服務,以及收費管理等其他配套的服務。當然,既然是IaaS服務,必須支援對外API介面開放,支援定製開發。一般來說不是一個軟體,而是一組軟體組成的整理解決方案。

VMware vSphere是基於VMware虛擬化技術的虛擬化管理軟體,目前在行業內來說算是最成熟,生產環境應用度最廣的IaaS層虛擬化技術的解決方案。目前對整個叢集的虛擬機器監控管理也是最好的。(vSphere本身收費,而且監控軟體還需要單獨收費)。

Openstack是基於linux的IaaS層解決方案(支援多種虛擬化技術,比如KVM),是目前使用者最多,影響最大的開源解決方案,得到了HP,IBM等知名廠商的大力支援,國內的虛擬化解決方案也大部分是基於Openstack開發定製。主要執行在cent os和ubuntu server作業系統上。

CloudStack是使用 java開發的基於linux的IaaS層解決方案(支援多種虛擬化技術,比如KVM),目前發展潛力非常不錯,也得到了很多知名廠商的認可,不過相對起步比較晚,在國內的推廣度也不如Openstack。

對比一下Openstack與VMware Workstation,我們可以看出雲端計算與虛擬機器軟體之間的不同。

Openstack與VMware Workstation

5. Docker等Container技術

Q1:Container技術和伺服器虛擬化是一樣的技術嗎?

A:不是。兩者雖然都屬於虛擬化的技術,目標都是為了將一套應用程式所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬體中移動,但兩者的運作思維截然不同。簡單來說,常見的傳統虛擬化技術如vSphere或Hyper-V是以作業系統為中心,而Container技術則是一種以應用程式為中心的虛擬化技術。

傳統虛擬化技術從作業系統層下手,目標是建立一個可以用來執行整套作業系統的沙盒獨立執行環境,習慣以虛擬機器(Virtual Machine)來稱呼。而Container技術則是直接將一個應用程式所需的相關程式程式碼、函式庫、環境配置檔案都打包起來建立沙盒執行環境,為了和傳統虛擬化技術產生的虛擬機器區分,Container技術產生的環境就稱為Container。

Q2:一般常見的虛擬機器和Container有何不同?

A:最明顯的差別是,虛擬機器需要安裝作業系統(安裝Guest OS)才能執行應用程式,而Container內不需要安裝作業系統就能執行應用程式。Container技術不是在OS外來建立虛擬環境,而是在OS內的核心繫統層來打造虛擬執行環境,透過共享Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。

Q3:為何Container是輕量級虛擬化技術?

A:因為Container技術採取共享Host OS的作法,而不需在每一個Container內執行Guest OS,因此建立Container不需要等待作業系統開機時間,不用1分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機器來的快。

Q4:Container技術是全新的技術嗎?

A:不是,早在1982年,Unix系統內建的chroot機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬於在作業系統內建立孤立虛擬執行環境的作法,都可稱為是Container的技術。

直到2013年,dotCloud這家PaaS服務公司開源釋出了一套將Container標準化的平臺Docker,大受歡迎,所以,dotCloud決定以Docker為名成立新公司力推。