梁進(jìn)科 陳路路 王一 張建廷
摘要:以Docker和Kubernetes為代表的容器技術(shù)為微服務(wù)運(yùn)行提供了一種新的方式,簡化了微服務(wù)創(chuàng)建、集成、部署和運(yùn)行的流程。但其復(fù)雜的命令行操作以及陡峭的學(xué)習(xí)曲線,提高了開發(fā)者的使用門檻。提出了一種基于Kubernetes容器編排引擎,前端采用Vue+jTopo框架,后端利用Spring Boot框架結(jié)合Kubernetes Java客戶端,實(shí)現(xiàn)可視化微服務(wù)部署編排的方法。利用這種方法屏蔽了底層復(fù)雜的命令行操作,降低了使用門檻。
關(guān)鍵詞:微服務(wù);Docker;容器編排;Kubernetes;可視化
中圖分類號:TP393文獻(xiàn)標(biāo)志碼:A文章編號:1008-1739(2021)23-58-3
0引言
隨著互聯(lián)網(wǎng)與云計(jì)算的快速發(fā)展,高并發(fā)訪問以及大數(shù)據(jù)處理的業(yè)務(wù)需求無法只依賴單體應(yīng)用程序。微服務(wù)架構(gòu)以其模塊化、易擴(kuò)展、高可用的優(yōu)勢為應(yīng)用程序的開發(fā)帶來了新的設(shè)計(jì)思路[1]。以Docker為代表的容器技術(shù)為微服務(wù)提供了理想的載體,同時(shí)以Kubernetes為代表的容器編排引擎極大地簡化了容器化微服務(wù)創(chuàng)建、集成、部署和運(yùn)維的整個流程,但Kubernetes學(xué)習(xí)曲線坡度高對人員的專業(yè)素質(zhì)要求較高[2]。從易用性角度出發(fā),本文提供了一種容器編排的可視化方法。實(shí)踐證明,利用此方法進(jìn)行的微服務(wù)部署不僅為研發(fā)人員提供了友好型服務(wù)創(chuàng)建界面,還縮短了服務(wù)創(chuàng)建過程,提高了服務(wù)開發(fā)部署效率。
1容器編排可視化設(shè)計(jì)
1.1容器編排原理
Kubernetes源于Google公司內(nèi)部的集群調(diào)度系統(tǒng),提供了面向容器的集群部署和管理能力。Kubernetes簡化了CPU、內(nèi)存、網(wǎng)絡(luò)和存儲的資源編排過程,使開發(fā)人員聚焦到以容器為中心的系統(tǒng)構(gòu)建中[3]。Kubernetes具備完善的集群管理能力,包括可擴(kuò)展的集群訪問控制機(jī)制、多租戶資源隔離能力[4]、基于DNS的服務(wù)注冊和發(fā)現(xiàn)能力、基于虛擬IP的服務(wù)負(fù)載均衡能力、健康檢查和自我恢復(fù)能力、服務(wù)滾動更新和自動彈性伸縮能力、插件化的資源調(diào)度框架及多維度的資源額度管理能力。Kubernetes架構(gòu)如圖1所示[5]。
Kubernetes主要由以下8個核心組件組成:
①Etcd存儲整個集群的狀態(tài)。
②API Server是集群的資源控制門戶,默認(rèn)具備基于RBAC的資源訪問控制能力,同時(shí)提供基于API注冊和發(fā)現(xiàn)資源擴(kuò)展機(jī)制。
③Controller Manager負(fù)責(zé)集群狀態(tài)的維護(hù),例如容器健康檢測、服務(wù)容器的彈性伸縮、服務(wù)容器的滾動更新等。
④Scheduler負(fù)責(zé)調(diào)度集群資源,按照預(yù)定的調(diào)度策略將服務(wù)實(shí)例調(diào)度到合適的集群節(jié)點(diǎn)中。
⑤Kubelet維護(hù)容器的生命周期,提供容器存儲接口和容器網(wǎng)絡(luò)接口的管理。
⑥Runtime負(fù)責(zé)容器鏡像管理以及容器運(yùn)行引擎管理。
⑦Proxy負(fù)責(zé)為容器服務(wù)提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)以及負(fù)載均衡。
⑧Kubectl是面向用戶的集群管理客戶端命令行工具。
1.2可視化設(shè)計(jì)與實(shí)現(xiàn)
1.2.1設(shè)計(jì)
可視化軟件前端采用Vue+jTopo框架,后端采用Spring Boot框架。后端通過使用Kubernetes-client-4.1.1.jar與Kubernets的API Server組件通信,通過API Server的REST接口進(jìn)行容器的編排部署操作。將圖形化界面設(shè)置的編排信息保存到MySQL數(shù)據(jù)庫中??梢暬軜?gòu)如圖2所示。
用戶登錄可視化工具,可以選擇已有的應(yīng)用模板直接部署。部署完成后,用戶可以進(jìn)入應(yīng)用的監(jiān)視界面查看服務(wù)的運(yùn)行狀態(tài)。用戶登錄可視化工具,拖拽服務(wù)圖元到編排面板,在編排面板中進(jìn)行服務(wù)配置以及服務(wù)依賴關(guān)系關(guān)聯(lián),編排完成后可以保存為應(yīng)用模板或者直接部署,用戶可以進(jìn)入應(yīng)用的監(jiān)視界面,查看服務(wù)的運(yùn)行狀態(tài)。可視化的流程如圖3所示。
1.2.2實(shí)現(xiàn)
可視化界面如圖4所示。左側(cè)為圖元列表,中間為編排面板,右側(cè)為服務(wù)圖元配置面板。服務(wù)類型圖元主要包括無狀態(tài)服務(wù)圖元、有狀態(tài)服務(wù)圖元、駐守服務(wù)圖元、定時(shí)任務(wù)圖元、外部服務(wù)接入圖元以及存儲資源圖元。在編排面板中可以編輯面板中的圖元,同時(shí)可以通過連線的方式排列圖元對象資源的創(chuàng)建順序。點(diǎn)擊連線可以連接2個圖元,連線代表部署的前后順序。點(diǎn)擊創(chuàng)建應(yīng)用直接在Kubernetes中創(chuàng)建編排面板中的服務(wù)。點(diǎn)擊另存為可以保存為應(yīng)用模板,可保存多個容器鏡像以及容器配置信息。
2實(shí)驗(yàn)與評價(jià)
為了測試微服務(wù)環(huán)境下容器編排可視化的開發(fā)效率,實(shí)驗(yàn)選取基于Spring Cloud的微服務(wù)組件,包括注冊中心、配置中心、服務(wù)網(wǎng)關(guān)、監(jiān)控中心、用戶管理服務(wù)及認(rèn)證服務(wù)等6個業(yè)務(wù)服務(wù)作為測試對象。從3個角度進(jìn)行測試比較,依次是虛擬機(jī)環(huán)境下應(yīng)用的搭建、基于Kubernetes以YAML文件方式在命令行模式下服務(wù)集的部署和基于Kubernetes以可視化方式生成服務(wù)集的部署。
2.1實(shí)驗(yàn)環(huán)境
為了對開發(fā)的容器編排可視化功能進(jìn)行驗(yàn)證,實(shí)驗(yàn)環(huán)境為6臺64位的虛擬機(jī),操作系統(tǒng)為CentOS18.04,CPU為8核,內(nèi)存為32 GB,Docker容器版本為v17.03,容器編排引擎為Kubernetes v1.17.0。實(shí)驗(yàn)所用的Kubernetes集群設(shè)置3個master節(jié)點(diǎn),6個slave節(jié)點(diǎn)。
2.2實(shí)驗(yàn)設(shè)置
(1)基于Linux虛擬機(jī)的方式
實(shí)際應(yīng)用中,微服務(wù)組件以及業(yè)務(wù)服務(wù)主要部署在Linux系統(tǒng)中。使用Spring Cloud框架需要在操作系統(tǒng)中預(yù)先安裝JDK。首先在6臺虛擬機(jī)中完成基礎(chǔ)配置安裝,包括JDK的安裝和配置SSH免密登陸。其次,運(yùn)行服務(wù)集群,需規(guī)劃服務(wù)與虛擬機(jī)的對應(yīng)關(guān)系,包括為服務(wù)程序進(jìn)行IP分配以及端口分配。然后,按照規(guī)劃表將服務(wù)程序通過sftp傳輸?shù)綄?yīng)的虛擬機(jī)中。最后,在各個虛擬機(jī)中通過命令行啟動服務(wù)程序,使用ps命令簡單查看各服務(wù)的運(yùn)行狀況[6]。
(2)基于YAML文件方式
在開發(fā)工具中使用Maven插件docker-maven-plugin將工程打包成鏡像,并將鏡像推送到鏡像倉庫。其次,編寫為組件以及業(yè)務(wù)服務(wù)編寫部署YAML,共需編寫10個YMAL文件。然后,根據(jù)彼此間依賴關(guān)系使用kubectl apply命令,使用YAML文件依次部署各個服務(wù),最后通過kubeclt get pods查看生成的服務(wù)容器[7]。
(3)基于可視化界面方式
首先,在開發(fā)工具中使用Maven插件docker-maven-plugin將工程打包成鏡像,并將鏡像推送到鏡像倉庫。其次,通過圖元在編排面板通過可視化界面配置服務(wù),需要配置10個無狀態(tài)服務(wù)圖元,根據(jù)彼此間依賴關(guān)系使用連線將圖元連接起來。然后,點(diǎn)擊另存模板按鈕將部署方案保存為模板,點(diǎn)擊部署按鈕將部署服務(wù),最后通過監(jiān)控界面查看各服務(wù)的部署情況。
2.3實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)采用2.1節(jié)的測試環(huán)境,隨機(jī)抽取此領(lǐng)域多人對2.2節(jié)3種實(shí)驗(yàn)的設(shè)置分別進(jìn)行實(shí)驗(yàn),并記錄每次實(shí)驗(yàn)所花費(fèi)的時(shí)間,著重對比3種方式下所構(gòu)建服務(wù)的性能指標(biāo)。性能指標(biāo)對比如表1所示,可以看出構(gòu)建服務(wù)方式很多,但每種方式的部署過程復(fù)雜度是不同的。
3結(jié)束語
大型應(yīng)用系統(tǒng)使用微服務(wù)架構(gòu)可以明確分工,簡化開發(fā)、構(gòu)建過程,但增加系統(tǒng)部署難度,采用容器編排引擎部署微服務(wù)系統(tǒng)可簡化部署難度。本文提出的基于Docker容器、Kubernetes容器編排、Vue前端開發(fā)框架以及借助Kubernetes Java客戶端實(shí)現(xiàn)了容器編排的可視化的方法。通過實(shí)驗(yàn)分析得出相對于虛擬機(jī)的部署方式,本文提出的容器引擎部署方式,從多方面簡化繁瑣的部署運(yùn)維工作。相比較于命令行式的容器引擎部署方式,提出的可視化方式具有簡潔的操作方式,可面向不具有容器編排引擎知識的普通開發(fā)者。
參考文獻(xiàn)
[1]浙江大學(xué)SEL實(shí)驗(yàn)室.Docker容器與容器云[M].北京:人民郵電出版社,2015.
[2]徐珉.Docker環(huán)境下容器編排工具的選擇[J].集成電路應(yīng)用, 2017,34(7):62-66.
[3]楊鷗,張羿,耿貞偉.微服務(wù)架構(gòu)在容器云中的應(yīng)用實(shí)踐[J].電腦與電信,2017(7):79-81.
[4]畢小紅,劉淵,陳飛.微服務(wù)應(yīng)用平臺的網(wǎng)絡(luò)性能研究與優(yōu)化[J].計(jì)算機(jī)工程,2018,44(5):53-59.
[5]劉琳羽,南凱.一種基于Docker的開發(fā)者服務(wù)平臺設(shè)計(jì)[J].科研信息化技術(shù)與應(yīng)用,2015,6(5):65-72.
[6]張建,謝天鈞.基于Docker的平臺即服務(wù)架構(gòu)研究[J].信息技術(shù)與信息化,2014(10):131-134.
[7]杜威科.基于Kubemetes的大數(shù)據(jù)流式計(jì)算Spark平臺設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京郵電大學(xué),2017.