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