時間:2017-06-14 14:16:58 作者:琪琪 瀏覽量:42

云最成熟的架構(gòu)是IaaS(Infrastructure as a Service),其中用到的技術(shù)有xen,kvm,lxd等,VMware虛擬化技術(shù)也是其中的一種。
為什么要虛擬化技術(shù)呢?目前在眾多大規(guī)模互聯(lián)網(wǎng)公司和游戲公司大都采用xen,kvm等虛擬化技術(shù),使用這些虛擬化技術(shù)的好處是當服務器宕機時,運維人員在做維護時只需要將在虛擬機上運行的服務切換到另一臺物理機上。而如果不使用虛擬化技術(shù),運維人員就必須在服務離線前再找一臺物理機配置服務,以實現(xiàn)切換。因此,虛擬化技術(shù)可以實現(xiàn)服務實時切換、遷移。另外,在運維上,特別是自動化運維以及實現(xiàn)彈性運算等高級功能只能通過虛擬機的運行方式來實現(xiàn),而物理機的運行方式是運行不了的。
IBM和Intel公司在硬件制造生產(chǎn)上也不斷地為提供更好地、更便捷地實現(xiàn)虛擬化技術(shù)開發(fā)出CPU的新特性。
那么,創(chuàng)建虛擬機的工作原理又是怎樣的呢?創(chuàng)建虛擬機又是一個怎樣的過程?簡單地說,創(chuàng)建虛擬機就是在一臺電腦上虛擬出多臺電腦,并且虛擬機之間彼此獨立,看起來就像獨立的電腦一樣。我們知道,一臺主機最核心的硬件部件是CPU(Central Processing Unit),Memory,I/O設備,它們通過主板連接起來。因此嚴格來說,創(chuàng)建虛擬機是通過軟件方式虛擬出各個具有獨立的CPU、Memory、I/O設備的平臺。我們把宿主機稱為Host,把各個虛擬機稱為Guest。
問題來了,假設我們的電腦CPU只有一個,所以底層能實現(xiàn)運算的只有一個CPU,那么軟件如何保證各個虛擬機擁有獨立的CPU?對于Memory和I/O來說又是怎么實現(xiàn)的?
對于CPU來說,因為CPU的工作方式是分時的(Time-sharing),它能把運行時間分為多個時間段,并將這些時間段分配給各個虛擬機,是這樣來實現(xiàn)的。
對于Memory來說,首先要明白讀取內(nèi)存數(shù)據(jù)的方式。內(nèi)存是編址的存儲單元,讀取方式是CPU通過尋址后定位到內(nèi)存某一個cell存儲空間上獲取數(shù)據(jù)的。因此,虛擬內(nèi)存是通過人為地在邏輯上把內(nèi)存切成多段,分別分配給各個虛擬機,每個虛擬機只能使用自己地址范圍內(nèi)的內(nèi)存,剩下的內(nèi)存則分配給宿主機。
I/O的虛擬化是比較難的。例如輸入設備鍵盤是不可能同時為多個虛擬機以及宿主機占用的,因此也只能類似“分時”地使用,鍵盤或者鼠標的控制權(quán)在各個虛擬機和宿主機間的切換是通過“捕獲”來實現(xiàn)的。
此外,網(wǎng)卡的虛擬化是通過軟件的方式,為各個虛擬機虛擬出網(wǎng)卡,這些網(wǎng)卡最終都要對應到物理網(wǎng)卡上。
OK,創(chuàng)建虛擬機的原理大概講完了,那么創(chuàng)建虛擬機的步驟究竟怎么樣呢?主要有兩大步驟,一是虛擬出一個物理機,二是為這個物理機安裝OS。
虛擬出一個物理機是指虛擬出硬件部件的意思,根據(jù)上面提到的,主要是虛擬出CPU、Memory、I/O(Disk,Ethercard等)。例如指定有多少個CPU,CPU有幾個核,有多少內(nèi)存,有多少個硬盤,這些硬盤是什么格式的,有多少個網(wǎng)卡,這些網(wǎng)卡又是什么格式的......做完這一步驟之后,物理機就虛擬出來了,但是我們知道,如果沒有軟件在這些硬件上面運行,那么這些硬件就相當于一堆廢鐵,所以我們還要為這個物理機安裝上操作系統(tǒng)。
再拓展一點,上面創(chuàng)建虛擬機的過程中,硬盤的虛擬化或磁盤的虛擬化是通過磁盤映像文件來實現(xiàn)的(disk image file),即將一個或多個文件當做硬盤或磁盤來使用。那么問題來了,怎么把文件當成磁盤來使用的?這就是這個用來做虛擬化的軟件(例如VMware Workstation)的意義了。這個軟件能夠通過某個接口虛擬出硬盤控制器,這個控制器就能把文件當做磁盤來使用了,而且不僅能指定這個硬盤文件的大小,還能支持稀疏格式(sparse)。什么是稀疏格式呢?例如我們在創(chuàng)建虛擬機時,指定這個虛擬機的硬盤為20G,但實際上在我們的電腦上看到的這個硬盤文件只是顯示20k,由此導致的虛擬機的硬盤大小與其在宿主機上占用空間的大小不一致,這就是稀疏格式(sparse)。并且,這個20k會隨著我們的需求以及我們在虛擬機上的操作不斷增加,例如從20k增加到4G,再到10G等等。