吳東起 吳國(guó)蘭
摘要:云計(jì)算技術(shù)的發(fā)展飛快:VMware 2011年9月發(fā)布vSphere 5.0、歷經(jīng)5.1、5.5、6.0、2016年11月推出vSphere 6.5,對(duì)于一款商業(yè)平臺(tái)軟件來(lái)說(shuō),算得上發(fā)展迅猛。OpenStack 2010年開(kāi)始正式發(fā)布,每半年推出一個(gè)新版本,目前已是第15個(gè)版本-Ocata(2017年2月推出);新版本相對(duì)于上一個(gè)版本完善了原有的功能,也擴(kuò)展了很多新的功能。這兩款云平臺(tái)軟件在IaaS方面的表現(xiàn)各有千秋,該文以這兩個(gè)平臺(tái)下的VM批量部署的例子進(jìn)行比較,進(jìn)而分析、總結(jié)了OpenStack和VM-ware vSphere在資源調(diào)度上的異同、優(yōu)劣。
關(guān)鍵詞:云計(jì)算;虛擬機(jī);虛擬機(jī)調(diào)度;資源分配;VMware vSphere;OpenStack
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)22-0028-04
1說(shuō)明
1)本文中的斜體字表示該部分內(nèi)容是變量,在具體操作中會(huì)有變化。
2)本文中的OpenStack指的是OpenStack 0cata版本,VM-ware vSphere指的是VMware vSphere 6.5。
3)本文中涉及兩種虛擬化平臺(tái),各自有術(shù)語(yǔ)體系,有時(shí)難免混亂,為避免誤解,做以下說(shuō)明:
VMware vSphere中的虛擬機(jī)(Virtual Machine)概念為大多數(shù)人所接受,但在OpenStack中又有兩種叫法:在dashboard(控制面板)中叫做instance(實(shí)例),在openstack命令行中則用server(可理解為“云服務(wù)器”淶表示,我用VM作為它們的統(tǒng)稱。
4)筆者是在基本相同的硬件環(huán)境下將VMware vSphere與OpenStack下部署多臺(tái)虛擬機(jī)的情況進(jìn)行測(cè)試比較的,具體為:主機(jī)都是兩臺(tái)DELL PowerEdge R920服務(wù)器、同一個(gè)網(wǎng)絡(luò)環(huán)境、本地存儲(chǔ);VMware vSphere的vCenter Server安裝在兩臺(tái)主機(jī)的其中之一上,OpenStack將其中一臺(tái)主機(jī)作為單一控制節(jié)點(diǎn)同時(shí)也是計(jì)算節(jié)點(diǎn)。
2VMware vSphere下虛擬機(jī)(Virtual Machine)的部署
筆者在VMware vSphere下完成虛擬機(jī)部署的系統(tǒng)架構(gòu)如“圖1 VMware vSphere群集架構(gòu)圖”所示:
為了實(shí)現(xiàn)我們的虛擬機(jī)部署方案,在物理機(jī)上安裝ESXi6.5后,依次做了以下工作:
1)在主機(jī)esxi-hostl上新建虛擬機(jī),安裝操作系統(tǒng)Win-dows Server 2012(10.1.28.38),在系統(tǒng)上安裝配置Windows域,安裝SQL Server 2012,安裝配置vCenter Server 6.5,在vCenterServer上建立數(shù)據(jù)中心并添加兩臺(tái)主機(jī)-esxi-hostl、esxi-host2
2)創(chuàng)建主機(jī)群集MyCluster,包括主機(jī)esxi-hostl、esxi-host2,并啟用DRS。
3)創(chuàng)建vSphere分布式交換機(jī)(vSphere Distributed Switch)
4)創(chuàng)建虛擬機(jī)模板CIRROS-TEMPLATE
5)新建一臺(tái)Windows Server虛擬機(jī),并在其上安裝Power-CLI6.5.1(接下來(lái)的腳本將在這臺(tái)虛擬機(jī)上運(yùn)行)為了與后述的OpenStack環(huán)境下的VM部署相對(duì)比,我在VMware vSphere環(huán)境下沒(méi)有使用vSphere web client圖形界面創(chuàng)建虛擬機(jī)(vSphereweb client圖形界面也不支持批量部署虛擬機(jī)),而是使用Pow-erCLI腳本來(lái)創(chuàng)建。
下面是PowerCLI批量部署虛擬機(jī)的腳本代碼,該腳本完成的主要操作是:
以administrator身份連接vCenter Server(10.1.28.38),獲取創(chuàng)建虛擬機(jī)的模板(CIRROS-TEMPLATEJ,獲取群集(MyClus-ter),設(shè)置虛擬機(jī)名稱前綴(vmname-),使用循環(huán)語(yǔ)句foreach在群集上建立15臺(tái)虛擬機(jī),建立虛擬機(jī)DRS組(vmGrp),建立主機(jī)DRS組(vmHostGrp),創(chuàng)建虛擬機(jī)一主機(jī)DRS規(guī)則(MyRule),即虛擬機(jī)“vmname-1”,“vmname-2”,“vmname-3”必須運(yùn)行在主機(jī)“esxi-hostl”之上,虛擬機(jī)“vmname-4”,“vmname-5”,……,“vm-name-15”則由DRS群集自動(dòng)調(diào)度。
該腳本的具體內(nèi)容如下:
3OpenStack下實(shí)例(Instance)的部署
筆者在OpenStack下完成實(shí)例部署的系統(tǒng)架構(gòu)如“圖2節(jié)點(diǎn)服務(wù)視圖”所示:
兩臺(tái)主機(jī)的名稱分別是Umaster50(是控制節(jié)點(diǎn),同時(shí)也是計(jì)算節(jié)點(diǎn))、Ucomputer51(計(jì)算節(jié)點(diǎn)),都是先最小化安裝操作系統(tǒng)ubuntu 16.04,然后安裝配置如“圖2節(jié)點(diǎn)服務(wù)視圖”所示的服務(wù),具體過(guò)程不是本文重點(diǎn),在此略過(guò)。
正式部署實(shí)例前,先要為OpenStack用戶建立環(huán)境,即將用戶名、密碼、項(xiàng)目名稱、域名稱、認(rèn)證URL等信息導(dǎo)出到對(duì)應(yīng)的系統(tǒng)環(huán)境變量中,為操作方便起見(jiàn),我們一般用一個(gè)腳本來(lái)實(shí)現(xiàn),比如下面的n14_openrc文件:
有了上面的客戶端腳本,如果想以域default,項(xiàng)目n14和用戶n14-1的身份運(yùn)行openstack客戶端,只需要以如下格式加載
$.n14_openrc
同樣,OpenStack管理員(admin)用戶也可以使用類似的腳本建立工作環(huán)境,文中用admin_openrc表示該腳本名稱,其具體內(nèi)容在此略過(guò),可參照n14_openrc。endprint
在創(chuàng)建實(shí)例(instance)/云服務(wù)器(sgiver)之前,一般情況下要確定的幾個(gè)要素是:實(shí)例類型(flavor)、鏡像(image)、網(wǎng)絡(luò)(net-work)、安全組(security-group)、密鑰對(duì)(key-pair)、實(shí)例名稱。
實(shí)例類型定義了實(shí)例對(duì)CPU、內(nèi)存、磁盤(pán)的需求;鏡像定義了實(shí)例的源(類似于VMware vSphere里的模板,包含了實(shí)例的操作系統(tǒng)和其他的軟件);網(wǎng)絡(luò)定義了實(shí)例所在的網(wǎng)絡(luò);安全組用來(lái)控制進(jìn)出實(shí)例的流量(相當(dāng)于實(shí)例外部一道防火墻)、密鑰對(duì)定義了公鑰和私鑰用以登錄實(shí)例。
以下命令可以登錄到任一節(jié)點(diǎn)上運(yùn)行,也可以把它們保存在shell腳本中,具體功能依次是OpenStack管理員用戶建立實(shí)例類型(名字為m1.nano)、鏡像(名字為cirros)、外部網(wǎng)絡(luò)(名字為providerl;OpenStack普通用戶n14-1建立自定義網(wǎng)絡(luò)(名字為seffl4,網(wǎng)絡(luò)id為ed8be57e-9695-411e-822d-030909b03feJ)、路由器(名字為routerl4)、安全組(名字為default)、密鑰對(duì)(名字為mykey),服務(wù)器組的(名稱為grp-1):
下面一組命令先建立具有互斥策略的服務(wù)器組,然后新建13個(gè)實(shí)例,并應(yīng)用該服務(wù)器組策略一將這些實(shí)例盡可能分散在不同的主機(jī)上f如果有13臺(tái)以上的主機(jī)可用,將在優(yōu)先級(jí)較高的13臺(tái)主機(jī)上分別建立13個(gè)實(shí)例,但在我們的實(shí)驗(yàn)環(huán)境下只有兩臺(tái)主機(jī),這一部署策略的特點(diǎn)沒(méi)有充分體現(xiàn)出來(lái)),接著獲取第一個(gè)實(shí)例的信息,最后建立的兩個(gè)實(shí)例cosvm-1、cosvm-2與第一個(gè)實(shí)例civm-1在同一主機(jī)上(假設(shè)d821cd84-6f03-4afa-98b8-cf077fde0487就是civm-1的UUID)。
上述操作在OpenStack的horizon圖形界面下也可以非常方便地完成。
4VMWARE VSPHERE、oPENSTACK在資源調(diào)度上的比較
對(duì)任何一種提供IaaS服務(wù)的云平臺(tái)來(lái)說(shuō),資源無(wú)非是CPU、內(nèi)存、電源、存儲(chǔ)器和網(wǎng)絡(luò)資源。經(jīng)過(guò)在VMware vSphere、OpenStack下部署虛擬機(jī)/實(shí)例的體會(huì),筆者認(rèn)為二者在資源調(diào)度上有以下區(qū)別:
1)從資源調(diào)度的工作方式上來(lái)說(shuō),VMware vSphere對(duì)資源分配的主要機(jī)制是通過(guò)對(duì)資源的份額、預(yù)留和限制的配置來(lái)實(shí)現(xiàn)的,在啟用DRS(vSphere Distributed Resource Scheduler-分布式資源調(diào)度)群集、數(shù)據(jù)存儲(chǔ)DRS群集、OVS…的情況下,可以在群集層次上調(diào)度資源。
OpenStack中對(duì)實(shí)例的管理是通過(guò)核心組件nova來(lái)實(shí)現(xiàn)的。nova的架構(gòu)比較復(fù)雜,包含很多組件,其中nova-scheduler實(shí)現(xiàn)實(shí)例資源調(diào)度服務(wù),也就是負(fù)責(zé)決定在哪個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行新建實(shí)例,以及如何分配資源。新建實(shí)例的調(diào)度過(guò)程分為兩步:
(1)通過(guò)過(guò)濾器(filter)選擇滿足條件的主機(jī)一計(jì)算節(jié)點(diǎn)(運(yùn)行nova-compute的節(jié)點(diǎn))
(2)通過(guò)權(quán)重計(jì)算(weighting)選擇在最優(yōu)(權(quán)重值最大)的主機(jī)上創(chuàng)建實(shí)例(Instance),即過(guò)濾器過(guò)濾出可用的主機(jī)列表后,調(diào)度器會(huì)對(duì)每個(gè)可用主機(jī)進(jìn)行加權(quán)計(jì)算,算出各主機(jī)的權(quán)重,再根據(jù)權(quán)重選中優(yōu)先級(jí)最高(權(quán)重最大)的主機(jī)為實(shí)例分配資源。加權(quán)的計(jì)算方法就普通的加權(quán)算法,假設(shè)加權(quán)指標(biāo)為w1、w2等,那么公式就是:
權(quán)重=w1加權(quán)系數(shù)。w1基準(zhǔn)值+w2加權(quán)系數(shù)*w2基準(zhǔn)值+…
w1、w2這些指標(biāo)由配置文件nova.conf中的選項(xiàng)fil-ter_scheduler.weight_classes設(shè)置,其默認(rèn)值是nova.scheduler.weights.all_weighers,即默認(rèn)表示采用以下加權(quán)指標(biāo)來(lái)計(jì)算權(quán)重:
RAMWeigher(可用內(nèi)存)、DiskWeigher(磁盤(pán)空閑空間)、MetricsWeigherf根據(jù)metrics_weight_setting設(shè)置的公式計(jì)算權(quán)重)、IoOpsWeigher(主機(jī)IO負(fù)載)、PCIWeigher(PCI設(shè)備數(shù)量)、ServerGroupSoftAffinityWeigherf運(yùn)行的屬于同一個(gè)服務(wù)器組的實(shí)例數(shù),正值)、ServerGroupSoftAntiAffinityWeigher(運(yùn)行的屬于同一個(gè)服務(wù)器組的實(shí)例數(shù),負(fù)值)。
2)從資源調(diào)度的指標(biāo)上來(lái)說(shuō),VMware vSphere對(duì)CPU、內(nèi)存以及存儲(chǔ)IO配置份額、預(yù)留和限制,具體點(diǎn)說(shuō)就是可以基于份額分配占資源提供方的總的百分比,或者分配所保證的最少資源預(yù)留量,或者設(shè)置資源使用的上限。VMware vSphere要實(shí)現(xiàn)自動(dòng)化的資源調(diào)度需定義DRS群集,即當(dāng)需要在DRS群集上新建虛擬機(jī)的時(shí)候,系統(tǒng)會(huì)根據(jù)設(shè)置采用兩種不同的處理方式:
(1)自動(dòng)選擇合適的主機(jī)、存儲(chǔ)運(yùn)行虛擬機(jī)。
(2)顯示虛擬機(jī)運(yùn)行位置、存儲(chǔ)位置的建議,用戶可以選擇接受或覆蓋。
在DRS群集上可以使用關(guān)聯(lián)性規(guī)則,控制群集內(nèi)主機(jī)上的虛擬機(jī)的放置位置??梢詣?chuàng)建兩種類型的規(guī)則:
(1)用于指定虛擬機(jī)組和主機(jī)組之間的關(guān)聯(lián)性或反關(guān)聯(lián)性。關(guān)聯(lián)性規(guī)則規(guī)定,所選虛擬機(jī)DRS組的成員可以或必須在特定的主機(jī)DRS組成員上運(yùn)行。反關(guān)聯(lián)性規(guī)則規(guī)定,所選虛擬機(jī)DRS組的成員不能在特定的主機(jī)DRS組成員上運(yùn)行。
(2)用于指定各個(gè)虛擬機(jī)之間的關(guān)聯(lián)性或反關(guān)聯(lián)性。指定關(guān)聯(lián)性的規(guī)則會(huì)使DRS嘗試將指定的虛擬機(jī)一起保留在同一臺(tái)主機(jī)上。根據(jù)反關(guān)聯(lián)性規(guī)則,DRS嘗試將指定的虛擬機(jī)分開(kāi),例如,當(dāng)一臺(tái)主機(jī)出現(xiàn)問(wèn)題時(shí),將不會(huì)同時(shí)丟失兩臺(tái)虛擬機(jī)。
OpenStack默認(rèn)在所有可用主機(jī)上調(diào)度實(shí)例,對(duì)資源調(diào)度的指標(biāo)粒度要比VMware vSphere的更精細(xì),而且可以更方便地自定義過(guò)濾指標(biāo),由于可用于過(guò)濾的具體指標(biāo)很多(參見(jiàn)Open-Stack官方手冊(cè)),并且用戶還可以自定義過(guò)濾指標(biāo),故此不可能一一說(shuō)明,下面我們列舉nova默認(rèn)調(diào)度器Filterscheduler的主要過(guò)濾指標(biāo):endprint
RetryFilter:重試過(guò)濾器,可以過(guò)濾掉在以前的調(diào)度中不成功的主機(jī)。
AvailabilityZoneFiher:為提高容災(zāi)性和提供隔離服務(wù),可以將主機(jī)劃分到不同的區(qū)域(Zone)中,在創(chuàng)建實(shí)例的時(shí)候可以指定實(shí)例創(chuàng)建在哪個(gè)可用區(qū)域中。
RamFiher:內(nèi)存過(guò)濾器,將不能滿足flavor(實(shí)例類型)內(nèi)存需求的主機(jī)過(guò)濾掉。
DiskFiher,:磁盤(pán)過(guò)濾器,將不能滿足flavor(實(shí)例類型)磁盤(pán)需求的主機(jī)過(guò)濾掉。
ComputeFilter:計(jì)算過(guò)濾器(保證只有nova-compute服務(wù)正常工作的主機(jī)—計(jì)算節(jié)點(diǎn)才能夠被nova-scheduler調(diào)度)
ComputeCapabilitiesFilter,:主機(jī)(計(jì)算節(jié)點(diǎn))特性過(guò)濾器,如主機(jī)架構(gòu)等。
ImagePropertiesFilter,:鏡像屬性過(guò)濾器,依據(jù)鏡像屬性進(jìn)行過(guò)濾,如:架構(gòu)(architecture)、虛擬機(jī)監(jiān)視器類型(hypervisortype)等。
Hosts Aggregates(主機(jī)聚合):主機(jī)聚合過(guò)濾器,根據(jù)主機(jī)聚合的CPU內(nèi)核數(shù)、內(nèi)存空間、磁盤(pán)空間、實(shí)例數(shù)、IO負(fù)載等指標(biāo)對(duì)主機(jī)聚合進(jìn)行過(guò)濾。
IoOpsFiher:并發(fā)IO操作過(guò)濾器,可以過(guò)濾掉并發(fā)IO操作超過(guò)max_io_ops_per_host的值的主機(jī)。
SameHostFiher、DifferentHostFiher:將新建實(shí)例調(diào)度到與其它實(shí)例相同或不同的主機(jī)上。
SimpleCIDRAffinityFilter:主機(jī)IP過(guò)濾器,可將實(shí)例調(diào)度到指定IP地址段的主機(jī)上。
ServerGroupAffinityFiher、ServerGroupAntiAffinityFiher:服務(wù)器組調(diào)度器,可以調(diào)度同一服務(wù)器組的實(shí)例位于相同主機(jī)上,或位于不同的主機(jī)上。
OpenStack不僅可以依據(jù)計(jì)算資源、存儲(chǔ)資源、網(wǎng)絡(luò)資源屬性對(duì)主機(jī)進(jìn)行過(guò)濾,還可以依據(jù)單元(cell)屬性對(duì)主機(jī)進(jìn)行過(guò)濾。
3)從高可用(HA)的角度,尤其是VM的高可用來(lái)看,VM-ware vSphere明顯走在前面一通過(guò)DRS群集實(shí)現(xiàn)兩個(gè)級(jí)別的高可用:vSphere HA能讓故障虛擬機(jī)快速恢復(fù)、vSphere Fault Tol-eranee能保證虛擬機(jī)的持續(xù)可用。此外DRS群集的DPM(vSphere Distributed Power Management)功能可以根據(jù)群集資源利用率來(lái)打開(kāi)和關(guān)閉主機(jī)電源,從而減少總體功耗。簡(jiǎn)單說(shuō),就是當(dāng)DMP檢測(cè)到群集中有足夠多的空閑資源的時(shí)候,會(huì)關(guān)閉一臺(tái)或多臺(tái)主機(jī)以減少能耗;反之,當(dāng)檢測(cè)到空閑資源較少的時(shí)候,會(huì)打開(kāi)處于待機(jī)狀態(tài)的主機(jī),并使用VModon將虛擬機(jī)遷移到這些主機(jī)上。而OpenStack實(shí)例的高可用還沒(méi)有統(tǒng)一的解決方案,相關(guān)工作組正在進(jìn)行這方面的工作,還處于初級(jí)階段。
4)從用戶的角度來(lái)看,OpenStack的控制節(jié)點(diǎn)管理所有資源,用戶在使用資源的時(shí)候只需要向控制節(jié)點(diǎn)提出請(qǐng)求,具體的資源分配對(duì)用戶來(lái)說(shuō)是透明的;VMware vSphere的vCenterServer雖說(shuō)管理所有資源,但作用更像是一個(gè)統(tǒng)一的頂層接口,用戶在使用資源的時(shí)候要指明計(jì)算資源、存儲(chǔ)資源的名稱、位置等信息。
5)從批量部署的角度來(lái)說(shuō),OpenStack無(wú)論是在dashboard的horizon界面中還是命令行下,都可以輕松進(jìn)行批量部署;VMware vSphere下的Web Chent每次只能創(chuàng)建一個(gè)虛擬機(jī),如果要批量部署,就要通過(guò)稍顯麻煩的腳本來(lái)實(shí)現(xiàn)。
6)從創(chuàng)建VM的效率上來(lái)說(shuō),同等條件下,OpenStack創(chuàng)建實(shí)例的效率要比VMware vSphere創(chuàng)建虛擬機(jī)的效率高出許多,可以說(shuō)不可同日而語(yǔ)。
7)從資源調(diào)度的自主性來(lái)說(shuō),OpenStack作為開(kāi)源軟件,可以自定義資源調(diào)度方案、可以選擇使用其它調(diào)度器分配資源,而VMware vSphere當(dāng)然不會(huì)允許用戶做這些自定義設(shè)置。
5結(jié)論
經(jīng)過(guò)對(duì)上述兩種平臺(tái)的學(xué)習(xí),以及本人在實(shí)際工作中使用這兩種平臺(tái)的體驗(yàn),我認(rèn)為在資源調(diào)度方面VMware vSphere仍然是傳統(tǒng)虛擬化思維方式,而OpenStaek則是開(kāi)放融合的云計(jì)算思維方式,從前文的對(duì)比中看出,除了在VM的高可用性方面OpenStaek稍遜一籌外,資源調(diào)度的其它方面OpenStack均表現(xiàn)出色。當(dāng)然VMware vSphere在文檔質(zhì)量、易用性、某些性能的穩(wěn)定性方面目前還是要強(qiáng)于OpenStaek。
使用VMware vSphere和OpenStack兩款產(chǎn)品的對(duì)比,感覺(jué)就像是網(wǎng)絡(luò)環(huán)境下使用Windows服務(wù)器和Linux服務(wù)器的對(duì)比:一商業(yè)、一開(kāi)源;一易上手、一難入門(mén);一自成體系、一組件成堆由用戶組裝;一成熟但前景不明、一青澀但潛力無(wú)限;一風(fēng)光不再、一擁者日眾……。
對(duì)IT工程人員來(lái)說(shuō),0penStaek相對(duì)于VMware vSphere的優(yōu)勢(shì)不僅體現(xiàn)在資源調(diào)度上,盡管部署一個(gè)OpenStack私有云環(huán)境要耗費(fèi)的精力遠(yuǎn)多于VMware vSphere,但從系統(tǒng)運(yùn)行效率、運(yùn)維的性價(jià)比上來(lái)說(shuō),開(kāi)始階段的付出絕對(duì)是值得的。就像當(dāng)年我們掌握了Linux服務(wù)器,就覺(jué)得不用考慮購(gòu)買(mǎi)Win-dows服務(wù)器一樣。endprint