天天看點

Docker + Rally 做Openstack 自動化測試OpenStackDockerDocker-Rally持續傳遞系統

随着我國計算機技術的蓬勃發展,特别是近幾年網際網路+行業的興起,人們對計算、存儲、網絡的要求也越來越高,面對越來越複雜多變的需求,傳統的實體機-應用伺服器方式越來越難于招架,私有雲平台作為一個嶄新的模式應運而生,并為IT 業的發展指明了方向。私有雲平台具有高擴充性、高融合性、高靈活性、低成本等特點。如今,越來越多的主流企業已經采用OpenStack 雲平台作為私有雲的第一解決方案。

OpenStack是一個美國國家航空航天局和Rackspace合作研發的,以Apache許可證授權,并且是一個自由軟體和開放源代碼項目。 OpenStack是IaaS(基礎設施即服務)元件,讓任何人都可以自行建立和提供雲端運算服務。作為一個大型的開源項目,其項目重點在于對各種不同元件的廣泛支援和對各種功能的擴充完善上,但這在生産環境下,特别是在某些極端條件下的性能表現就存在着一定的缺陷,需要我們後期去完善補全。

如果你對OpenStack較為熟悉,你就會知道OpenStack其實是一個非常龐大的系統,非常多的互相配合的服務(service)運作其中。是以,利用通用性能測試軟體(Loadrunner,Jmeter等)進行性能測試發壓,腳本編寫量巨大,實施複雜度高。而OpenStack社群推出的rally測試引擎,具有更高的針對性和可用性。

Rally 是一個基準測試工具,可以幫助我們判斷出OpenStack表現如何,特别是在有負載的場景中。你可以使用Rally的各種場景測試腳本來對你的OpenStack環境進行性能測試,基準測試,功能驗證。

<a href="http://s5.51cto.com/wyfs02/M00/88/FE/wKiom1gENjqiC2fLAAGWRypUWbs100.png-wh_500x0-wm_3-wmp_4-s_3165661608.png" target="_blank"></a>

Deploy engine:可以與流行的部署器如DevStack、Fuel等結合使用,完成OpenStack測試環境部署或者獨立完成已有測試環境注冊的插件。

Verification:使用Tempset(OpenStack社群的接口自動化測試工具)來驗證已部署的OpenStack雲環境的功能性。

Benchmark engine:允許在雲環境中制造并發負載,并進行基準測試。

Generate report:報表生成器,負責讀取rally的測試結果(存儲于資料庫),生成報表。

<a href="http://s4.51cto.com/wyfs02/M02/88/FB/wKioL1gENjvQcWGxAAHWj150j9o605.png-wh_500x0-wm_3-wmp_4-s_163284466.png" target="_blank"></a>

工作中的實際使用場景

研發人員:針對新代碼通過rally發壓,驗證新代碼對整個系統帶來的性能影響;

測試人員:針對新版本通過rally發壓,評估新版本是否達到性能預期,進而産生調優需求;

運維人員:針對新搭建的客戶生産環境,通過rally發壓,擷取生産環境的性能閥值;

銷售人員:針對客戶示範環境,通過rally發壓,展示系統的性能表現;

在公司實際使用中,研發、測試、運維、銷售都需要經常使用rally來擷取性能參數,這就存在着以下幾個問題急需解決:

重複安裝:Rally安裝雖然簡單,但是需要讓研發、測試、營運、銷售等相關人員都熟練掌握,并繁瑣而重複的使用,存在成本大效率低的缺點;

Rally代碼本地化:Rally安裝雖然非常簡單,但是在國内環境中,需要修改其報表調用的Google元件(具體方式在網絡上已經有很多檔案介紹),否則其報表無法正常顯示;

Rally代碼定制:為了滿足公司實際工作需要,對代碼進行的進一步完善或者配置;如:加入公司LOGO、增加新的報表内容、測試場景的定制等;

環境沖突:由于rally對主機性能消耗比較小,經常需要和别的應用共享一台實體伺服器,這就容易産生環境沖突,如:主控端需要A包的1.0版本,而rally需要A包的2.0版本,進而産生依賴沖突,造成主控端上多個程式不能共存;

針對以上問題,我們經過市場調研,确定Docker技術可以全面滿足我們的需求。

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何機器上。

特點:

允許執行個體簡單、快速地擴充

建立應用鏡像并進行複制

建立容易分發的即啟即用的應用

隔離應用依賴

應用場景:

标準化應用釋出,docker容器包含了運作環境和可執行程式,可以跨平台和主機使用;

快速部署和啟動,docker容器啟動是秒級;

節約成本, docker容器對磁盤的使用可以減少到MB級;

友善持續內建,通過與代碼進行關聯使持續內建非常友善;

可以看出docker可以全面滿足我們的需求,但是同樣也帶來了新的問題:

Docker image制作繁瑣;

對于研發、測試、運維、銷售人員,學習docker的使用同樣需要花費時間、精力;

針對不同環境,安裝docker,下載下傳image,運作docker container等操作,同樣複雜而繁瑣;

那麼針對以上問題,有沒有一種簡化方式,可以讓使用者不用關心docker指令,不再執行重複的指令呢?答案是肯定的,這就是被我們稱為docker持續傳遞系統的一套實作方法。

此系統主要包括2個方面:

Docker Image傳遞子產品:此腳本為傳遞給使用者使用的腳本,使用者使用此腳本隻需要了解基本的指令,就可以自動化的完成Docker環境的搭建,Rally環境的搭建、注冊設定等操作;

Docker Image制作子產品:此操作需要對Docker、Rally(應用系統)等熟悉的操作者,一般為應用服務的開發者或維護者;

此子產品主要實作自動搭建rally環境,封裝docker指令實作Docker透明化和環境解除安裝幾個子子產品。

自動搭建Rally環境

子產品判斷系統是否安裝docker,如果沒有安裝則自動安裝docker,則自動安裝;核心代碼:

自動登入指定的docker賬号,下載下傳最新版本的rally-image到本地環境;核心代碼:

建立容器,映射端口22到host的33333端口,用于ssh服務;把host的/home/rally_json和/home/rally_result檔案夾挂載到容器中,用于存放配置檔案及測試結果;核心代碼:

把預存的rally配置資訊拷貝到/home/rally_json中。

提供rally注冊功能,通過讀取OpenStack環境配置檔案,把已有的OpenStack環境注冊到rally系統中;

提供rally備份功能,對rally的資料庫進行備份;

封裝Docker指令

此操作是簡化使用者操作的重點,通過對docker指令的封裝,使使用者感覺不到docker容器的存在,進而直接在主控端上執行容器内的rally指令,完成docker的透明化。建立rally.sh檔案,用于在主控端中操作docker中的rally程式。核心代碼:

建立的rally.sh會通過軟連接配接(ln -s)為rally,這樣在主控端執行rally指令,實際上是調用rally.sh腳本,通過rally.sh腳本完成了指令從主控端到Docker Container的穿透。使使用者忽略了docker的存在,做到“就像是在本機運作rally一樣”。

環境解除安裝

此子子產品實作了rally環境的解除安裝,包括:備份rally資料庫、删除Docker Container、删除Docker image、删除rally.sh腳本等

子產品主要實作自動安裝docker環境、自動拉取最新代碼、自動生成Docker Image,并把制作的image上傳到Docker Hub中。代碼核心:

從git伺服器拉取rally代碼;核心指令:

運作rally代碼中的Dockerfile生成docker image;核心指令:

其實,以上整個流程,不僅僅是Rally性能測試應用程式的傳遞系統,也同樣是Docker實際應用的經典場景的自動化實作。我們可以按照此設計思路稍加修改,就可以實作接口自動化測試的自動傳遞系統、存儲系統的性能測試自動傳遞系統、示範環境的自動傳遞系統等等。

通過對Docker指令的封裝,使使用者既享受到Docker帶來的便利,又可以忽略Docker操作上的不便,使Docker透明化。

本文轉自    OpenStack2015 部落格,原文連結:  http://blog.51cto.com/andyliu/1862552      如需轉載請自行聯系原作者