国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Docker的Open Stack云平臺(tái)卷存儲(chǔ)模塊的設(shè)計(jì)

2015-05-11 05:40吳哲夫鄔新東WuZhefuWuXindongZhangTong
互聯(lián)網(wǎng)天地 2015年11期
關(guān)鍵詞:配置文件實(shí)例容器

吳哲夫,鄔新東,張 彤/Wu Zhefu,Wu Xindong,Zhang Tong

(浙江工業(yè)大學(xué)信息工程學(xué)院 杭州310023)

1 引言

近年來(lái),隨著科技的快速發(fā)展,尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,云計(jì)算逐漸從概念變?yōu)楝F(xiàn)實(shí)。目前有4種主流的開(kāi)源云平臺(tái)管理軟件[1]:OpenStack[2]、OpenNebula[3]、Eucalyptus[4]和 CloudStack[5]。 其 中 ,OpenStack憑借松耦合的系統(tǒng)架構(gòu)、免費(fèi)的商業(yè)模式及活躍的社區(qū)贏得了眾多廠商的大力支持。在Havana版本中,OpenStack提供了對(duì)Docker[6]的支持。通過(guò)使用Nova-Docker項(xiàng)目,將OpenStack中用于構(gòu)建虛擬機(jī)的Nova-Compute組件中的Hypervisor替換為Docker,以提供更輕量級(jí)、更高效的服務(wù)。但是Docker構(gòu)建的容器并不支持OpenStack中的Cinder組件,基于此,本文設(shè)計(jì)了一個(gè)卷存儲(chǔ)模塊vol-manager,增加本地文件系統(tǒng)和Docker容器的映射功能,使本地卷存儲(chǔ)能夠直接掛載到容器中,以實(shí)現(xiàn)持久性存儲(chǔ)。

2 基于Docker的OpenStack云平臺(tái)的構(gòu)建

2.1 OpenStack云平臺(tái)整體部署架構(gòu)

OpenStack采用模塊化設(shè)計(jì),松耦合的系統(tǒng)框架能集成老、舊、第三方的技術(shù),從而滿足業(yè)務(wù)需要,也使得開(kāi)發(fā)者能夠更容易地對(duì)OpenStack進(jìn)行二次開(kāi)發(fā)[7]。本文所要構(gòu)建的云平臺(tái)只需要使用以下幾個(gè)組件。

認(rèn)證服務(wù):Keystone。Keystone為整個(gè)云平臺(tái)提供統(tǒng)一的、完整的身份認(rèn)證、服務(wù)目錄、令牌、訪問(wèn)策略服務(wù)。

鏡像服務(wù):Glance。Glance為虛擬磁盤鏡像提供目錄和資源庫(kù),并保存鏡像文件的元數(shù)據(jù)。

計(jì)算服務(wù):Nova。Nova是整個(gè)OpenStack中最核心的組件,提供按需創(chuàng)建虛擬機(jī)的服務(wù)。

網(wǎng)絡(luò)管理服務(wù):Neutron。Neutron為Nova創(chuàng)建的各個(gè)虛擬機(jī)實(shí)例提供網(wǎng)絡(luò)功能。

可視化組件:Horizon。Horizon為 OpenStack中的實(shí)例、服務(wù)提供圖形化的界面。

其他組件:如Cinder、Swift等并不需要部署,詳細(xì)信息可參見(jiàn)官方文檔[8]。

具體的架構(gòu)如圖1所示。

2.2 Nova-Docker項(xiàng)目的部署

OpenStack云平臺(tái)的默認(rèn)虛擬化方案是KVM。在OpenStack Havana版本中,Nova-Docker作為插件被引入,以提供更輕量級(jí)的服務(wù)。之后為了加快整個(gè)項(xiàng)目的迭代開(kāi)發(fā),又將Nova-Docker作為孵化項(xiàng)目移出。在github上,適用于OpenStack Juno版本的Nova-Docker[9]已經(jīng)相對(duì)成熟,可以提供較穩(wěn)定的服務(wù)。Nova-Docker的架構(gòu)如圖2所示。

在整個(gè)云平臺(tái)中,Docker作為一種新的Hypervisor,將取代默認(rèn)的KVM。Docker創(chuàng)建的容器實(shí)例就是輕量級(jí)的虛擬機(jī)實(shí)例。Docker鏡像通過(guò)Docker Save保存成TAR包,放置在Glance上管理。創(chuàng)建容器時(shí),從Glance上下載容器鏡像,利用Docker Load加載并啟動(dòng)容器鏡像。

3 OpenStack構(gòu)建虛擬機(jī)的流程

vol-manager模塊依托于虛擬機(jī)實(shí)例的創(chuàng)建,掌握OpenStack構(gòu)建虛擬機(jī)的整個(gè)流程對(duì)于模塊的編寫具有重要意義。在2.1節(jié)所介紹的組件中,Nova主要負(fù)責(zé)這一部分,它也是整個(gè)OpenStack中最核心的組件。從根本上來(lái)說(shuō),OpenStack中的其他組件都是為Nova服務(wù)。Nova由眾多子服務(wù)組成,在構(gòu)建虛擬機(jī)實(shí)例過(guò)程中,比較重要的是以下3個(gè)服務(wù),見(jiàn)表1。創(chuàng)建虛擬機(jī)請(qǐng)求的處理流程如圖3所示。

表1 Nova相關(guān)子服務(wù)

4 vol-manager模塊的設(shè)計(jì)

4.1 整體架構(gòu)設(shè)計(jì)

由于Docker并不支持Cinder共享存儲(chǔ),因此,Nova-Docker源代碼中并沒(méi)有在創(chuàng)建虛擬機(jī)的函數(shù)中增加存儲(chǔ)功能。vol-manager的核心思想是通過(guò)配置文件中定義的相關(guān)參數(shù),選擇是否開(kāi)啟該模塊,并在本地文件系統(tǒng)中創(chuàng)建目錄,將該目錄映射到Docker容器中,整體的架構(gòu)如圖4所示。

在spawn函數(shù)中,讀取nova.conf配置文件中相關(guān)選項(xiàng),判斷是否開(kāi)啟卷模塊,配置文件設(shè)置格式說(shuō)明在4.2節(jié)。當(dāng)確定模塊開(kāi)啟時(shí),調(diào)用_start_storage_container函數(shù);當(dāng)確定模塊未開(kāi)啟時(shí),調(diào)用_start_container函數(shù)。核心函數(shù)_start_storage_container的設(shè)計(jì)方案在4.3節(jié)。最后調(diào)用Docker本身的start方法創(chuàng)建容器實(shí)例。

4.2 配置文件的設(shè)定

由于OpenStack的配置文件采用分節(jié)的形式,本方案將vol-manager模塊的配置單獨(dú)作為一節(jié)添加到nova.conf中。

[vol-manager]

volume=true

container_dir=/data

local_dir=/mnt/docker_volume

volume選項(xiàng)決定是否開(kāi)啟卷服務(wù):true為開(kāi)啟,false為關(guān)閉。local_dir為本地文件系統(tǒng)中卷目錄地址,container_dir為映射到容器中的地址。

4.3 模塊核心函數(shù)的設(shè)計(jì)

整個(gè)模塊的核心函數(shù)為_(kāi)start_storage_container函數(shù),圖5為該函數(shù)的設(shè)計(jì)流程。

函數(shù)首先要獲取container_id,在編寫代碼過(guò)程中發(fā)現(xiàn),在最新版本的Nova-Docker中,container_id可以作為一個(gè)參數(shù)直接傳遞給函數(shù);在低版本的Nova-Docker中,需要調(diào)用_find_container_by_name函數(shù)來(lái)獲取container_id。之后通過(guò)調(diào)用OpenStack的oslo.config庫(kù)來(lái)讀取nova.conf配置文件,來(lái)得到container_dir和local_dir,創(chuàng)建不存在的目錄,并將兩個(gè)參數(shù)綁定。傳遞給Docker類的start函數(shù),等到容器創(chuàng)建完成,再為容器創(chuàng)建網(wǎng)絡(luò),并將網(wǎng)絡(luò)附加到容器上。

在編寫整個(gè)函數(shù)的過(guò)程中,要將相關(guān)步驟輸出到日志中,這樣有利于程序的編寫及后期的調(diào)試。同時(shí),需要對(duì)異常進(jìn)行捕獲,增強(qiáng)程序的頑健性。

以下為該核心函數(shù)中的關(guān)鍵源代碼。

LOG.warning('_container_id__:%s'%container_id)

local_dir=self.get_localdir()

local_dir+=container_id.get('id','rand')

self.create_local_dir()

docker_dir=self.get_container_dir()

dir_param={local_dir:docker_dir}

self.docker.start(container_id,binds=dir_param)

if notnetwork_info:

return

try:

self.plug_vifs(instance,network_info)

self._attach_vifs(instance,network_info)

except Exception as e:

LOG.warning(('Cannot setup network:%s'),e,instance=instance,exc_info=True)

msg=_('Cannot setup network:{0}')

self.docker.kill(container_id)

self.docker.remove_container(container_id,force=True)

5 模塊測(cè)試效果

由于OpenStack的版本更新速度較快,且每個(gè)版本之間可能會(huì)有較大的差異,因此,模塊的設(shè)計(jì)在不同版本中可能會(huì)有所不同。本文所構(gòu)建的云平臺(tái)基于OpenStack Juno版本,具體主機(jī)配置見(jiàn)表2。

表2 主機(jī)配置

構(gòu)建Ubunutu實(shí)例,分配浮動(dòng)IP,如圖6所示,其中的test4實(shí)例就是這次需要測(cè)試的實(shí)例。

進(jìn)行功能性驗(yàn)證,具體的驗(yàn)證步驟如圖7所示,圖7為正向驗(yàn)證步驟,還可以反向驗(yàn)證,即在宿主機(jī)中創(chuàng)建文件,在test4實(shí)例中驗(yàn)證該文件是否存在。

實(shí)驗(yàn)結(jié)果表明:vol-manager模塊能夠有效解決容器實(shí)例中部分?jǐn)?shù)據(jù)的持久性存儲(chǔ)問(wèn)題。同時(shí),在容器與宿主機(jī)之間構(gòu)建了通道,在宿主機(jī)上修改文件,能夠?qū)崟r(shí)映射到容器中。利用這種特性,將容器中部分軟件的配置目錄放在/data中,那么,在宿主機(jī)上就可以直接修改其中的文件,來(lái)改變?nèi)萜髦邢嚓P(guān)服務(wù)的特性。

以在test4實(shí)例中構(gòu)建HTTP服務(wù)為例,說(shuō)明vol-manager模塊的作用。整個(gè)過(guò)程如圖8所示。

在test4中,HTTP服務(wù)將/data目錄作為網(wǎng)站的根目錄。由于vol-manager模塊將/data與宿主機(jī)中的local_dir關(guān)聯(lián)在一起,因此,在宿主機(jī)的目錄中建立網(wǎng)頁(yè)文件,通過(guò)HTTP服務(wù)能夠?qū)崟r(shí)地訪問(wèn)。vol-manager模塊不僅使容器中有關(guān)數(shù)據(jù)可以持久性存儲(chǔ),還為改變?nèi)萜髦心承┓?wù)屬性提供了途徑。

6 結(jié)束語(yǔ)

本文設(shè)計(jì)的vol-manager模塊通過(guò)增加配置文件選項(xiàng)、修改驅(qū)動(dòng)源代碼實(shí)現(xiàn)了本地文件系統(tǒng)到Docker容器的映射,使容器中的數(shù)據(jù)能夠保存到本地文件系統(tǒng)中。由于Nova-Docker項(xiàng)目正處于開(kāi)發(fā)階段,OpenStack對(duì)于Docker的支持并不完善,例如,不支持容器的遷移,這些都是未來(lái)的研究方向。

[1] 楊紹光,張?jiān)朴?,陳清金?基于OpenStack的云計(jì)算IaaS管理平臺(tái)研究[J].互聯(lián)網(wǎng)天地,2013,(3).

[2]SEFRAOUI O,AISSAOU M,ELEULDJ M.OpenStack:toward an open-source solution for cloud computing[J].International Journal of Computer Applications,2012,55(3):38-42.

[3]MILOJICIC D,LLORENTE I M,MONTERO R S.Opennebula:a cloud management tool[J].IEEE Internet Computing,2011,(2):11-14.

[4]NURMID,WOLSKIR,GRZEGORCZYK C,et al.The eucalyptus open-sourcecloud-computingsystem[A].9th IEEE,ACM International Symposium on Cluster Computing and the Grid[C].2009.

[5]KUMARR,JAINK,MAHARWALH,etal.Apache CloudStack:open source infrastructure as a service cloud computing platform[A].International Journal of Advancement in Engineering Technology,Management and Applied Science[C].2014.

[6]FINK J.Docker:a software as a service,operating system-level virtualization framework[J].Code4Lib Journal,2014,(25).

[7] 李小寧,李磊,金連文等.基于Open Stack構(gòu)建私有云計(jì)算平臺(tái)[J].電信科學(xué),2012,28(9):1-8.

[8]OpenStack document[EB/OL].http://docs.openstack.org,2015.

[9]Nova-Docker[EB/OL].https://github.com/stackforge/nova-docker/tree/stable/juno,2015.

猜你喜歡
配置文件實(shí)例容器
基于Docker的實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)配置文件管理軟件的設(shè)計(jì)與實(shí)現(xiàn)
從Windows 10中刪除所有網(wǎng)絡(luò)配置文件
用軟件處理Windows沙盒配置文件
難以置信的事情
互不干涉混用Chromium Edge
液體對(duì)容器底及容器對(duì)桌面的壓力和壓強(qiáng)
取米
完形填空Ⅱ
完形填空Ⅰ
广饶县| 星子县| 松潘县| 南江县| 建瓯市| 德清县| 永善县| 广州市| 巴楚县| 扎兰屯市| 定日县| 洮南市| 常州市| 抚顺市| 南城县| 永德县| 贡嘎县| 奇台县| 西畴县| 阳谷县| 依安县| 沙湾县| 安远县| 明星| 长岛县| 清苑县| 当涂县| 博客| 淮阳县| 新河县| 武城县| 新绛县| 珲春市| 谷城县| 咸阳市| 襄垣县| 台州市| 铜陵市| 二连浩特市| 安阳县| 武定县|