凌云
摘要:我國信息產(chǎn)業(yè)正處于飛速發(fā)展之中,各類型的應(yīng)用軟件與信息系統(tǒng)的生存周期也日益縮減。因此,針對(duì)用戶群的實(shí)際需求,及時(shí)研發(fā)對(duì)應(yīng)的軟件系統(tǒng)并將其快速部署,已經(jīng)成為了IT企業(yè)競爭的主要目標(biāo)。DevOps作為一種新興方法,能夠顯著提高開發(fā)與運(yùn)維工作之間的協(xié)同程度,從而減輕了系統(tǒng)運(yùn)行之后的運(yùn)維壓力。該文提出將開源平臺(tái)Docker引入到DevOps系統(tǒng)的管理工作當(dāng)中,利用其鏡像共享工程環(huán)境等功能,進(jìn)一步改進(jìn)了DevOps系統(tǒng)的可靠性與穩(wěn)定性。
關(guān)鍵詞:信息系統(tǒng);快速部署;系統(tǒng)運(yùn)維;DevOps;Docker
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)26-0209-03
1 概述
我國目前已經(jīng)進(jìn)入到了信息化時(shí)代,其最大的特征就是各類信息化應(yīng)用服務(wù)技術(shù)呈現(xiàn)出爆炸式發(fā)展趨勢,這些功能各異,類型多樣的服務(wù)軟件同樣也導(dǎo)致了IT企業(yè)在運(yùn)維工作方面的巨大壓力。IT企業(yè)迫切希望得到一款通用性能好、可靠性強(qiáng)且能夠統(tǒng)一支持開發(fā)與運(yùn)維管理工作的平臺(tái),從而實(shí)現(xiàn)對(duì)各種軟件系統(tǒng)的一站式集成與交付,自動(dòng)化配置與部署、實(shí)時(shí)的監(jiān)測與管控、自動(dòng)化伸縮及恢復(fù)功能,并最終顯著的優(yōu)化了整個(gè)運(yùn)維工作的效率與成本。在這一需求背景下,DevOps系統(tǒng)應(yīng)運(yùn)而生,并得到了快速的推廣。
2 Docker與DevOps技術(shù)概述
2.1 Docker技術(shù)特征
Docker是一個(gè)分布式應(yīng)用構(gòu)建、遷移和運(yùn)行的開放平臺(tái),由于其操作的便捷性和快速部署的高效性,一經(jīng)推出就受到了廣泛的好評(píng),并在系統(tǒng)發(fā)布和運(yùn)維領(lǐng)域得到了有力的推廣。從技術(shù)方面分析,Docker容器引擎支持應(yīng)用軟件的開發(fā)團(tuán)隊(duì)將該應(yīng)用與相關(guān)的依賴包打包成一個(gè)統(tǒng)一體,并將其置于一個(gè)可移植的容器中,隨后就可以方便的將該容器中的內(nèi)容發(fā)布至網(wǎng)絡(luò)中的任何一臺(tái)Linux機(jī)器中。另一方面,Docker還提供了注冊(cè)服務(wù)器功能,使得用戶可在該服務(wù)器上創(chuàng)建自己的鏡像庫來存儲(chǔ)、管理和分享鏡像,這也極大地提高了各類軟件部署和運(yùn)維工作的便捷程度。
在發(fā)布和管理應(yīng)用服務(wù)的流程中,首先就需要將所有應(yīng)用需首先部署至容器,通過編寫相應(yīng)的Dockerfile并執(zhí)行其指令從而構(gòu)建一個(gè)虛擬容器,實(shí)現(xiàn)快速部署。本文在構(gòu)建綜合性DevOps軟件項(xiàng)目發(fā)布運(yùn)維系統(tǒng)的過程中,選擇在Jenkins平臺(tái)上來實(shí)現(xiàn)軟件項(xiàng)目的持續(xù)集成,并采用GitHub來完成對(duì)代碼資源的統(tǒng)一托管。
2.2 DevOps簡介
DevOps是一種全新的工作模式,圍繞軟件項(xiàng)目的開發(fā)、部署、測試與維護(hù)等一系列環(huán)節(jié)進(jìn)行優(yōu)化,有效地精簡了軟件運(yùn)維工作的重復(fù)內(nèi)容,并極大地提高了IT企業(yè)內(nèi)各個(gè)部門之間的協(xié)同程度,實(shí)現(xiàn)了一站式的統(tǒng)一管理。目前,DevOps模式被廣泛應(yīng)用與各種應(yīng)用服務(wù)的運(yùn)維管理工作當(dāng)中,其主要特點(diǎn)如下:
(1) 提高了運(yùn)維工作對(duì)日益增多且微型化的系統(tǒng)調(diào)整需求的敏感性。
(2) 將開發(fā)人員與實(shí)際運(yùn)行該軟件項(xiàng)目的生產(chǎn)場合有機(jī)結(jié)合,提高了軟件的可控性。
(3) 系統(tǒng)運(yùn)維工作的重心從各個(gè)節(jié)點(diǎn)設(shè)施轉(zhuǎn)移到了應(yīng)用程序本身,提高了管理效率。
(4) 顯著精簡了軟件研發(fā)部署工作的流程,控制了運(yùn)維成本。
(5) 研發(fā)及部署流程實(shí)現(xiàn)了全部的自動(dòng)化執(zhí)行目標(biāo),減少了運(yùn)維工作量。
2.3 Docker在DevOps系統(tǒng)中的作用
如上節(jié)所述,Docker最大的特點(diǎn)就是具有快速部署功能,以及可以通過鏡像來共享工程環(huán)境,從而將軟件項(xiàng)目的開發(fā)、測試和運(yùn)維工作整合為一體,其在DevOps系統(tǒng)中起到的主要作用如下:
(1) 通過鏡像在各個(gè)工作環(huán)節(jié)的復(fù)用,提高了軟件項(xiàng)目從研發(fā)到運(yùn)維工作的標(biāo)準(zhǔn)化程度,也提高了系統(tǒng)管理的穩(wěn)定性與統(tǒng)一性。
(2) 可靠的解決了底層基礎(chǔ)環(huán)境的異構(gòu)問題。通過Docker的部署容器與創(chuàng)建鏡像等方法,可以有效的兼容底層各種異構(gòu)的基礎(chǔ)環(huán)境。無論是何種節(jié)點(diǎn)設(shè)施或是云計(jì)算平臺(tái),均可通過采用Docker平臺(tái)提供的各種方法來實(shí)現(xiàn)統(tǒng)一的調(diào)度與管理。
(3) 提高了鏡像部署的靈活性。通過Dockerfile中的各類方法(包括分層機(jī)制)來構(gòu)建標(biāo)準(zhǔn)化的鏡像,不僅提高了鏡像的可重用性,同時(shí)使得容器倉庫可方便的將鏡像遷移至任意環(huán)境,在部署時(shí)只需將鏡像的只讀屬性轉(zhuǎn)變?yōu)榭蛇\(yùn)行即可。
(4) 多種工具的集成部署與快速調(diào)用。可將多種工具軟件封裝進(jìn)Docker容器并構(gòu)建鏡像,隨后即可通過鏡像的復(fù)用實(shí)現(xiàn)多種工具在任意環(huán)境下的集成部署。
通過以上分析可以看出,Docker提供了一套完整的虛擬化方式來快速構(gòu)建開發(fā)環(huán)境,并以發(fā)送鏡像的方式快速靈活的部署在各種開發(fā)、測試與運(yùn)維場合,有效的精簡了軟件運(yùn)營過程的中間環(huán)節(jié),同時(shí)基于容器的封裝及移植模式也很好的解決了不同平臺(tái)之間的兼容性問題,提高了應(yīng)用環(huán)境在各個(gè)階段的統(tǒng)一性。
3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
3.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
本文設(shè)計(jì)的系統(tǒng)主要部件如圖1所示,首先設(shè)計(jì)了使用便捷,親和度高的操作管理界面,將原本需要手動(dòng)輸入Dockerfile的大量指令通過標(biāo)準(zhǔn)化的界面按鍵來自動(dòng)寫入;其次采用了etcd數(shù)據(jù)庫集群、Docker Registry、Kubernetes集群等部件,既實(shí)現(xiàn)了對(duì)鏡像的集群調(diào)度、存儲(chǔ)與管理,又滿足了對(duì)節(jié)點(diǎn)鏡像的快速恢復(fù)和靈活的遷移等需求;Ngnix組件負(fù)責(zé)負(fù)載均衡的任務(wù),可確保操作界面中各項(xiàng)功能的高效性與可靠性;Docker容器中集成的Flannel插件可滿足不同節(jié)點(diǎn)上容器之間的通信需求,而這一過程也得到了網(wǎng)絡(luò)與DNS組件的有力支持;Jekins主要監(jiān)控軟件項(xiàng)目的持續(xù)集成與測試過程;托管平臺(tái)Github則負(fù)責(zé)對(duì)Git代碼的托管與配置。
本設(shè)計(jì)中各個(gè)核心模塊承擔(dān)的具體功能如下:
(1) Web操作管理界面提供了可視化的管理方案,簡化了操作流程,同時(shí)也極大的降低了本系統(tǒng)的技術(shù)使用門檻。
(2) Ngnix組件提供了可靠的負(fù)載均衡服務(wù),既可根據(jù)不同應(yīng)用對(duì)應(yīng)的數(shù)據(jù)格式進(jìn)行分離,并針對(duì)性的分配給不同的節(jié)點(diǎn)予以處理,也可根據(jù)IP_Hash結(jié)果為各個(gè)用戶主機(jī)分配固定的節(jié)點(diǎn)提供服務(wù)。
(3) Kubernetes集群:本部件分為兩組子部件,分別為主節(jié)點(diǎn)master和子節(jié)點(diǎn)node以及對(duì)應(yīng)的Docker構(gòu)成。前者為控制節(jié)點(diǎn),負(fù)責(zé)對(duì)各個(gè)容器進(jìn)行監(jiān)控與管理,后者為運(yùn)行節(jié)點(diǎn),負(fù)責(zé)各個(gè)容易的正常運(yùn)行。主節(jié)點(diǎn)中通過Kube-Conntroller-Manager發(fā)送空盒子指令,子節(jié)點(diǎn)則根據(jù)指令從Docker Registry中調(diào)取相應(yīng)的鏡像并加以執(zhí)行。
(4) 核心鏡像:包括Jenkins鏡像和Github鏡像兩類,前者啟用Jenkins服務(wù)來構(gòu)建源代碼的編譯環(huán)境,后者則啟動(dòng)Github組件實(shí)現(xiàn)對(duì)Git代碼的可靠托管;除此之外,容器中還封裝了所有服務(wù)所必須使用到的各種依賴資源,顯著提高了鏡像的構(gòu)建速度。
(5) etcd數(shù)據(jù)庫集群:用來向系統(tǒng)提供穩(wěn)定快捷的分布式存儲(chǔ)服務(wù),其主要管理的內(nèi)容分為兩部分,其一為Kubernetes集群中的大量信息,其二為網(wǎng)絡(luò)插件Flannel的配置信息。
(6) Docker Registry:該倉庫用來存放系統(tǒng)構(gòu)建的各個(gè)鏡像,并根據(jù)用戶提供的調(diào)取信息從倉庫內(nèi)選定符合要求的鏡像提交系統(tǒng)。
(7) 網(wǎng)絡(luò)與DNS管理:針對(duì)網(wǎng)絡(luò)管理需求,本系統(tǒng)提出采用Flannel插件來簡化配置與管理任務(wù)的設(shè)計(jì)思路,同時(shí)也很好的實(shí)現(xiàn)了不同容器之間的網(wǎng)絡(luò)橋接目標(biāo),在運(yùn)行過程中,所有安裝了鏡像的主機(jī)均會(huì)創(chuàng)建一個(gè)虛擬網(wǎng)卡,同時(shí)啟動(dòng)Flanneld服務(wù),按照互聯(lián)網(wǎng)TCP協(xié)議來建立不容主機(jī)之間的可靠連接,并完成報(bào)文段的封裝與轉(zhuǎn)發(fā)任務(wù),從而以各個(gè)容器為節(jié)點(diǎn),建立了有效的通信網(wǎng)絡(luò),在此網(wǎng)絡(luò)中,任意一臺(tái)節(jié)點(diǎn)主機(jī)中的Docker均被分配了全網(wǎng)唯一的虛擬IP地址;針對(duì)DNS解析需求,本系統(tǒng)采用Kube2sky插件對(duì)Kubernetes集群中的各個(gè)子節(jié)點(diǎn)以及其正在執(zhí)行中的service進(jìn)行監(jiān)控,并將得到的信息寫入etcd數(shù)據(jù)庫,而SkyDNS則負(fù)責(zé)從etcd數(shù)據(jù)庫讀取這些記錄并加以解析,最終得到不同IP地址所對(duì)應(yīng)的域名。
3.2 系統(tǒng)運(yùn)作流程分析
DevOps極大的提高了IT企業(yè)在系統(tǒng)及軟件項(xiàng)目運(yùn)維方面的工作效率,本文基于Docker技術(shù)設(shè)計(jì)得DevOps運(yùn)行過程如圖2所示。
本系統(tǒng)具體的運(yùn)作流程包括以下幾個(gè)主要環(huán)節(jié):
(1) 項(xiàng)目研發(fā)團(tuán)隊(duì)將需要托管的源代碼以Git的文件格式提交給Github服務(wù)器;
(2) Github通過Webhook將代碼庫中新增加的源代碼信息通知給Jenkins;
(3) Jenkins根據(jù)這些信息,可根據(jù)需求從Github調(diào)取某個(gè)項(xiàng)目的最新代碼,以及對(duì)應(yīng)的Dockerfile和相關(guān)的其他資源文件;
(4) Jenkins將得到的文件集中存儲(chǔ)于云鏡象服務(wù)中的Docker容器中,并根據(jù)Dockerfile中的指令集在子節(jié)點(diǎn)上構(gòu)建鏡像;
(5) 子節(jié)點(diǎn)將容器鏡像實(shí)例化,同時(shí)啟動(dòng)系統(tǒng)測試功能對(duì)代碼進(jìn)行調(diào)試;
(6) 若代碼運(yùn)行正常,則Jekins將此鏡像保存至Kocker Regaitry;
(7) 通過Kubernetes集群的持續(xù)發(fā)布功能,將軟件項(xiàng)目發(fā)布至各種生產(chǎn)、測試環(huán)境。
圖3給出了一個(gè)典型的使用Java語言開發(fā),并以MySQL和Oracle為數(shù)據(jù)庫構(gòu)建軟件項(xiàng)目的傳統(tǒng)集成過程。
根據(jù)上圖可以看出,在傳統(tǒng)的軟件項(xiàng)目集成過程中,由于開發(fā)環(huán)境、測試環(huán)境和運(yùn)行環(huán)境之間存在多種類型的差異,使得項(xiàng)目在集成過程中需要被反復(fù)的說明和調(diào)整,出現(xiàn)了大量的重復(fù)勞動(dòng),而在本文提出的基于Docker的DevOps系統(tǒng)中,這一問題得到了很好的改善和優(yōu)化,極大的提高了軟件項(xiàng)目運(yùn)維的工作效率,其流程如圖4所示。
4 結(jié)束語
目前在IT運(yùn)維領(lǐng)域,對(duì)用戶需求的敏感性要求越來越高,對(duì)于項(xiàng)目的持續(xù)集成與快捷部署的要求也日益增強(qiáng),在這一背景下,DevOps系統(tǒng)的執(zhí)行效率也得到了越來越多企業(yè)的認(rèn)可。本文通過將Docker容器技術(shù)、Kubernetes持續(xù)集成技術(shù)和Jenkins云鏡像技術(shù)等前沿技術(shù)的有機(jī)結(jié)合,設(shè)計(jì)實(shí)現(xiàn)了一款新型的DevOps系統(tǒng),顯著提高了軟件項(xiàng)目的持續(xù)集成與發(fā)布能力。相信隨著數(shù)據(jù)挖掘技術(shù)、人工智能技術(shù)和信息通信技術(shù)的不斷改進(jìn),該類系統(tǒng)對(duì)大規(guī)模數(shù)據(jù)信息的處理能力將會(huì)不斷,勢必會(huì)引領(lǐng)下一場云計(jì)算技術(shù)發(fā)展的浪潮。
參考文獻(xiàn):
[1] Garber L.News briefs[J].IEEE Security and Privacy,2011,9(6):9-11.
[2] GERDIS R.DevOps:collaboration is guarantee of success[J].Software and Integrated Circuit,2016(6):16-17.
[3] 汪愷,張功萱,周秀敏.基于容器虛擬化技術(shù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2015,25(8):138-141.
[4] 余雙波,江泓,陳宇雷.綜合網(wǎng)絡(luò)管理系統(tǒng)性能管理功能的CIM 建模[J].信息安全與通信保密,2009(1):84-88.
[通聯(lián)編輯:代影]