諶杰
(武漢郵電科學研究院 通信與信息系統(tǒng)系,湖北武漢430000)
由于企業(yè)對云平臺的興趣越來越濃厚,云平臺的部署規(guī)模也越來越大,向大型機房和數據中心的規(guī)模發(fā)展[1],手動部署龐大的云平臺系統(tǒng)已經變得非常不現實,不但效率低下,還浪費大量的人力物力,與云計算“提高資源利用率”的初衷相違背[2]。而自動化部署能夠減少人為的操作錯誤,增強系統(tǒng)的穩(wěn)定性和可靠性,簡化部署的操作從而實現業(yè)務的一鍵化部署[3],減輕部署人員和運維人員的負擔,減少部署時間,提高部署效率。因此云平臺的自動化部署需求已經越來越迫切。
云平臺的部署過程分為安裝服務器系統(tǒng)和平臺組件安裝配置兩個部分。因此,云平臺自動化部署系統(tǒng)需要包含云平臺部署管理子系統(tǒng)、云平臺PXE管理子系統(tǒng)以及云平臺組件安裝子系統(tǒng),另外還需要自動化測試子系統(tǒng)對平臺進行簡單檢查。
1)云平臺部署管理子系統(tǒng)作為云平臺部署管理系統(tǒng)的底層基礎,云平臺部署管理子系統(tǒng)主要負責在物理服務器上安裝ubuntu操作系統(tǒng)以及完成openstack云平臺環(huán)境的部署。
2)云平臺PXE管理子系統(tǒng)負責控制在物理服務器上部署固定的模型中操作系統(tǒng)節(jié)點的流程,同時處理一些安裝過程中不能或者不方便處理的一些數據或信息。
3)云平臺組件安裝子系統(tǒng)云平臺組件安裝子系統(tǒng)負責執(zhí)行安裝操作,完成完整云平臺的部署。
4)自動化測試子系統(tǒng)主要用于云平臺安裝完成后的功能檢查,查看各個服務狀態(tài)是否符合要求。
如圖1所示,是本次設計的云平臺基本架構。雙控制節(jié)點使用主備模式,當一個節(jié)點掛掉以后,啟用另一個節(jié)點的資源,從而使業(yè)務不會因為節(jié)點的開關機或其他原因的故障而受到影響,最大限度的提高系統(tǒng)的穩(wěn)定性。

圖1 平臺架構
計算節(jié)點可以采用單節(jié)點,也可以采用多節(jié)點,或者可以通過后期擴容的方式增加計算節(jié)點。計算節(jié)點主要使用服務器的cpu資源進行通信和計算,是openstack平臺的核心組件。計算節(jié)點提供nova相關的很多服務,例如 nova-api、nova-schedule、nova-compute等系列服務,通過和rabbitmq和數據庫進行信息交互完成計算功能,提供包括keystone、galnce、nova、cinder等在內的各種 openstack平臺的服務。
存儲節(jié)點可以單獨使用節(jié)點進行安裝,也可以和計算節(jié)點使用相同的服務器進行安裝。存儲節(jié)點可以采用單節(jié)點模式,亦可采用多節(jié)點的集群模式進行安裝。存儲節(jié)點主要是使用服務器的存儲資源,因此可以和compute安裝在同一臺機器上。Ceph主要用于創(chuàng)建虛擬機時創(chuàng)建云硬盤使用,目前horizon等功能都是基于ceph的,所以ceph節(jié)點是不可或缺的一個核心節(jié)點。
網絡節(jié)點安裝有vlan和vxlan兩個模式可以選擇,安裝模式也不盡相同。網絡節(jié)點主要建立網絡,包括外部網絡和內部網絡。外部網絡用于使虛擬機能夠與外網進行通信,內部網絡用于虛擬機之間進行交互通信。網絡節(jié)點提供了網絡相關的服務,使虛擬機能夠與其他虛擬機、與外部網絡通信,從而虛擬機能像實體機一樣實現相同功能。
數據庫節(jié)點需要3個節(jié)點進行安裝,主要提供數據庫相關的服務。安裝3個節(jié)點是為了組件數據庫集群,集群采用主備模式,當其中一個節(jié)點掛掉的時候,數據會跑到其他數據庫節(jié)點上進行處理,因此可以在不影響服務的情況下進行單個節(jié)點的重啟,有效的避免了因故障或其他原因引起的服務器掛掉或重啟等異常狀況。數據庫節(jié)點上會安裝mariadb、rabbitmq以及mongodb等服務,這3個服務都會在3臺服務器上組成相應的集群,都采用主備模式實現異常狀況的避免,提升系統(tǒng)的穩(wěn)定性。
Haproxy節(jié)點[3]是提供平臺高可用性的節(jié)點,提供負載均衡的功能。Haproxy需要安裝兩個節(jié)點實現負載均衡,提升平臺穩(wěn)定性和安全性。
云平臺部署管理子系統(tǒng)由幾個配置文件和執(zhí)行腳本文件組成。如圖2所示是云平臺部署管理子系統(tǒng)結構示意圖。

圖2 云平臺部署管理子系統(tǒng)結構示意圖
配置文件中的信息分為主機信息配置和openstack組件相關的配置項配置。配置文件達到的目的是獲取安裝部署所涉及的所有主機節(jié)點信息以及配置參數信息,通過執(zhí)行腳本文件,將所獲取的信息傳遞給組件安裝子系統(tǒng),再由組件安裝子系統(tǒng)處理這些配置信息[4]。
執(zhí)行腳本文件起到一個接口的作用,通過執(zhí)行相應的命令可以使配置文件中的值能夠順利的傳送到組件安裝子系統(tǒng)中去[5]。除此之外,還能通過命令調用到組件安裝子系統(tǒng)中的執(zhí)行文件,執(zhí)行對應的部署安裝或者配置操作。
在安裝系統(tǒng)時,需要在安裝系統(tǒng)之前對服務器磁盤做raid[6];安裝系統(tǒng)時,需要預先選擇需要安裝的系統(tǒng);安裝完系統(tǒng)后,需要給服務器定義主機名和對應的ip以及相關的ipmi等信息[7]。為了實現這些操作,在服務器安裝系統(tǒng)的時候,默認給服務器安裝一個最小化的系統(tǒng)minidep,同時安裝那個接受并反饋新的腳本來接受和反饋信息。當用戶設定好需要安裝的系統(tǒng)版本、需要設置的主機名稱以及ip等信息以后,PXE服務器通過服務器服務編號找到對應的服務器,并將用戶設定好的信息傳遞給安裝在服務器上的腳本程序接收,程序接收到安裝的系統(tǒng)版本后,向PXE服務器反饋運行狀態(tài)[8],并設置服務器安裝對應版本的系統(tǒng),然后重啟當前的服務器。當服務器重啟之后,系統(tǒng)會自動從網絡啟動,即從PXE服務器上下載對應的設置好的版本的鏡像,并自動安裝[9]。當系統(tǒng)安裝好并重啟完成之后,腳本程序會反饋安裝好后的服務器的信息,例如dhcp分配的ip等信息,給PXE服務器,PXE服務器會把用戶設置好的用戶名和ip等信息發(fā)送給腳本程序,腳本程序將收到的用戶名及ip等信息更新到服務器上,然后將服務器重啟以應用這些配置。當服務器再次重啟后,系統(tǒng)將會被配置成用戶所設置的主機名和ip。此時,腳本程序又會根據當前的服務器信息將信息反饋會PXE服務器,于是用戶可以在系統(tǒng)安裝的網頁界面上看到所安裝好的服務器的機器信息,從而可以輕易地從界面看到機器系統(tǒng)安裝過程的運行狀況。
代碼由hosts、vars、roles、lib 4個重要的部分組成[10]。其中,hosts目錄下的文件都是包含主機ip、ssh登錄使用的用戶、密碼的文件。這里的hosts文件就對應到部署管理子系統(tǒng)中的配置文件中的ip信息部分,這里讀取的是deploy.cfg和ceph.cfg中的ip信息。vars目錄下的文件是根據需求填寫的一些變量,這些都可以根據實際需求變更的。roles目錄下的文件都是ansible需要執(zhí)行的操作,可以把所有的操作按順序列舉出來,讓ansible通過ssh登錄到各個機器上,同時對這些機器進行相應的操作,從而到達大規(guī)模大量部署平臺內的服務器的目的。lib文件下有一個template目錄用來存放配置文件模板。配置文件模板里會有一些變量,ansible運行時,會將這些配置文件模板文件拷貝到對應的機器上,這些文件里的變量在ansible運行的時候會直接從vars目錄下的文件夾中讀取數據,然后寫到對應的文件中,對配置文件進行修改,從而達到修改配置的目的。
自動化測試腳本用于檢測部署好的openstack平臺是否實現了應有的功能,是否能夠正常運行。當opentsack平臺部署完成之后,需要在控制節(jié)點上導入環(huán)境變量,并輸入命令查看服務,通過輸出判斷服務是否運行正常。一般來說,對于openstack平臺,需要檢查比較重要的服務有計算、存儲、網絡、消息隊列以及數據庫等[11]。
自動化測試腳本需要完成執(zhí)行命令并檢查對應需要檢查的關鍵項目,通過檢查關鍵項的輸出值是否為正常值來判斷部署完成的系統(tǒng)中的服務是否運行正常。比如對于nova的檢查來說,需要先編寫環(huán)境變量文件,根據用戶輸入的信息填寫環(huán)境變量文件中的參數,再通過ssh登錄到控制節(jié)點的服務器上導入環(huán)境變量,然后在控制節(jié)點機器上輸入nova service-list查看nova相關的服務是否運行正常,待結果輸出以后,再查看結果中是否出現down的字樣以此判斷nova的服務是否都開啟并且運行正常。其他服務的檢查過程也與此相類似。
以nova的檢查為例,如圖3所示,需要先執(zhí)行source admin-openrc.sh導入環(huán)境變量[12]。導入環(huán)境變量后,執(zhí)行nova service-list檢查nova的狀態(tài)是否正確,如果正確,則輸出結果正確;如果不正確,則提示nova狀態(tài)不正常,并且提取出報錯信息以便檢查。

圖3 nova測試流程圖
自動化測試代碼使用shell腳本編寫,將命令按順序寫入腳本,通過判斷對比檢驗服務是否運行正常,由此輸出判斷結果,從而給用戶提供輸出結果。
代碼主要使用shell腳本編寫,通過shell腳本,可以輕松地處理執(zhí)行命令等相關的操作[13],達到完成自動化測試的目的。
云平臺自動化部署系統(tǒng)在實現上由云平臺部署管理子系統(tǒng)、云平臺PXE管理子系統(tǒng)和云平臺組件安裝子系統(tǒng)以及自動化測試子系統(tǒng)組成。云平臺自動化部署系統(tǒng)的目錄構成如圖4所示。
如圖4,fitpxe是云平臺PXE管理子系統(tǒng),該目錄下是自動化系統(tǒng)安裝的配置文件以及執(zhí)行代碼。openstack-deploy目錄是云平臺自動化部署部分,分為云平臺部署管理子系統(tǒng)和云平臺組件安裝子系統(tǒng)兩個部分,其中api子目錄為云平臺部署管理子系統(tǒng),playbooks子目錄是云平臺組件安裝子系統(tǒng)。playbooks下面的vars目錄是變量參數目錄,其中包含所有的變量參數,hosts目錄是主機節(jié)點信息目錄。test目錄是自動化測試子系統(tǒng)。

圖4 云平臺自動化部署系統(tǒng)目錄結構
配置文件的實現是cfg格式的配置文件,實質上,配置文件等同于列表。例如,圖5所示是ceph.cfg的配置文件,該配置文件包含ceph的配置項信息。例如ceph_hosts表示安裝ceph節(jié)點的機器ip信息,除此之外還包含ceph相關的配置信息,如public_network項表示ceph_public網絡的網段,這項配置會寫入ceph的配置文件中去。

圖5 ceph配置文件
執(zhí)行文件實際上是以py結尾的python文件,由python所編寫。執(zhí)行文件使用python編寫函數獲取cfg配置文件中的信息,并將這些信息寫入到云平臺組件安裝子系統(tǒng)中的相應位置,比如將ip信息寫入hosts文件之中,將配置信息寫入到變量文件之中去。除此之外,執(zhí)行文件還完成了調用云平臺組件安裝子系統(tǒng)的命令的功能。在python代碼中設置命令參數,使得命令參數與云平臺組件安裝子系統(tǒng)中的命令一一對應,即可以以輸入python命令的形式,達到云平臺組件安裝子系統(tǒng)中安裝部署操作的目的。
云平臺PXE管理子系統(tǒng)采用python與shell相結合的方式。利用shell能夠較好地執(zhí)行系統(tǒng)層面的命令進行raid制作等操作[14]。利用python可以函數編寫和調用的功能,編寫配置信息修改部分代碼。如圖6所示是hostname信息修改部分的代碼。通過讀取主機id、角色等信息,判斷是否符合要求,然后做出信息變更操作。

圖6 hostname修改代碼
組件安裝部分使用ansible的playbook模塊進行部署。主要代碼結構包含 hosts、vars、roles、lib 四個部分。除此之外,還有執(zhí)行調用功能的yml文件[15]。例如,ntp的調用安裝文件如圖7所示。

圖7 安裝ntp代碼
這個文件的前一段調用了hosts目錄下的ntp_server文件中的hosts信息,結合vars目錄下的ntp.yml配置文件,在執(zhí)行roles目錄下ntp_server子目錄中文件定義的操作,就可以完成ntp的服務器端的安裝。相似的,文件后半段調用了hosts目錄下的ntp_client文件中的hosts信息,結合vars目錄下的ntp.yml配置文件,在執(zhí)行roles目錄下ntp_server子目錄中文件定義的操作,就可以完成ntp的客戶端的安裝。
自動化測試子系統(tǒng)主要使用shell腳本編寫。通過在shell腳本中執(zhí)行所需要的系統(tǒng)操作命令,實現檢測的目的。如圖8所示是自動化測試的配置文件。

圖8 自動化測試配置文件
分別填寫 controller的 ip,ceph的 ip,datapool的ip,test文件的路徑,dbcluster的節(jié)點數,就可以把這些參數導入,然后就能執(zhí)行相應命令查看測試結果了。其中,bash test.sh help可以查看幫助信息。

圖9 測試幫助項
如圖9所示,要運行對應的測試項目,只需輸入對應選項即可。
測試需要由測試人員搭建自動化部署系統(tǒng)。首先創(chuàng)建一臺用于安裝自動化部署系統(tǒng)的虛擬機,并在這臺機器上面安裝好自動化部署系統(tǒng)。然后使用PXE管理子系統(tǒng)給物理服務器安裝好系統(tǒng)[16],并檢查系統(tǒng)是否安裝無誤。然后再修改系統(tǒng)配置參數,并重啟服務器。此后,還需要通過自動化安裝子系統(tǒng)進行云平臺的安裝和部署。待部署完成后使用自動化測試子系統(tǒng)進行簡單的平臺基本功能測試[17]。結果如圖10所示。

圖10 基礎測試結果
除此之外,還需要對平臺功能進行驗證,即驗證廳是否能夠創(chuàng)建虛擬機。如圖11所示。

圖11 創(chuàng)建虛擬機結果
經過測試,以前需要一周甚至更長時間的部署過程,由于自動化部署,大大減少了部署的時長,自動化部署可以在兩天之內完成全部的部署工作。
本文重點研究了openstack相關組件架構設計、各個子系統(tǒng)的設計,結合自動化配置管理框架ansible的模塊化設計思想,并且基于ansible、使用python和shell語言設計和實現了大規(guī)模Openstack平臺的自動化部署。這套部署工具既可以作為部署openstack云平臺的部署管理工具,也可以向運維人員提供部署管理系統(tǒng),面向大規(guī)模的openstack平臺部署表現出良好的適應性和優(yōu)秀的性能。本文的主要研究工作如下所示:
1)分析和設計了云平臺自動化部署系統(tǒng)。重點研究了openstack平臺的自動化部署,分別對云平臺部署管理子系統(tǒng)、云平臺PXE管理子系統(tǒng)、云平臺組件安裝子系統(tǒng)以及自動化測試子系統(tǒng)進行了分析和設計。
2)講解了如何實現云平臺自動化部署系統(tǒng)。通過整體的代碼結構和各個部分的代碼,對云平臺自動化部署系統(tǒng)的實現進行了詳細說明。
3)分析了測試結果。云平臺自動化部署系統(tǒng)能夠實現云平臺的自動化部署任務,大大降低了部署的工作量,節(jié)省了部署的時間。
參考文獻:
[1]周章海.基于云計算理念的職業(yè)教育園區(qū)資源共享研究[D].大連:大連海事大學,2014.
[2]劉世民,劉阜陽,樊銳,等.試論電力企業(yè)基于云計算技術應用的研究與探討[J].信息系統(tǒng)工程,2014(11):79-80.
[3]李興,羅華永,陳星.基于OpenStack架構上的高可用實現[J].電腦編程技巧與維護,2016(21):38-40.
[4]汪源.云化業(yè)務平臺中業(yè)務自動部署的設計與實現[D].北京:北京郵電大學,2015.
[5]黃偉斌.基于模糊測試技術的網絡協(xié)議安全性測試[D].廣州:中山大學,2013.
[6]胡軍.云計算環(huán)境下計費系統(tǒng)的設計與實現[D].北京:北京郵電大學,2013.
[7]柴寶強,劉光明,李葆光,等.基于Ubuntu操作系統(tǒng)OpenStack虛擬化環(huán)境的部署[J].甘肅科技,2015,31(23):13-17.
[8]夏德好.利用PXE技術優(yōu)化網絡克隆安裝系統(tǒng)[J].中國現代教育裝備,2013(2):73-75.
[9]黃靜.利用PXE批量克隆機器的一些方法[J].新課程:教育學術,2013(5):104-105.
[10]黃文俊.Ceph在OpenStack中的應用研究[D].杭州:浙江大學,2014.
[11]郭緒晶.服務器集群系統(tǒng)高可用模塊設計與實現[D].北京:北京郵電大學,2013.
[12]鄒仁明,彭雋,李軍.OpenStack開源云平臺高可用架構的設計與實現[C]//中國計算機用戶協(xié)會網絡應用分會2014年網絡新技術與應用年會,2014.
[13]闞曉初.高可用負載均衡高職院校就業(yè)網站集群實現[J].科技視界,2014(32):90.
[14]華龍.基于Linux遠程控制shell方式的原理與實現[J].裝備制造技術,2012(5):250-252.
[15]李爽.操作系統(tǒng)自動化部署探究[D].廣州:華南理工大學,2014.
[16]王茜,葛新,梁小江,等.一種云計算數據中心自動化部署軟件架構設計N104113430A[P].2014.
[17]魯程.基于云平臺的移動互聯網自動化測試系統(tǒng)的研究與實現[D].北京:北京交通大學,2015.