梁進科 陳路路 王一 張建廷
摘要:以Docker和Kubernetes為代表的容器技術為微服務運行提供了一種新的方式,簡化了微服務創建、集成、部署和運行的流程。但其復雜的命令行操作以及陡峭的學習曲線,提高了開發者的使用門檻。提出了一種基于Kubernetes容器編排引擎,前端采用Vue+jTopo框架,后端利用Spring Boot框架結合Kubernetes Java客戶端,實現可視化微服務部署編排的方法。利用這種方法屏蔽了底層復雜的命令行操作,降低了使用門檻。
關鍵詞:微服務;Docker;容器編排;Kubernetes;可視化
中圖分類號:TP393文獻標志碼:A文章編號:1008-1739(2021)23-58-3

0引言
隨著互聯網與云計算的快速發展,高并發訪問以及大數據處理的業務需求無法只依賴單體應用程序。微服務架構以其模塊化、易擴展、高可用的優勢為應用程序的開發帶來了新的設計思路[1]。以Docker為代表的容器技術為微服務提供了理想的載體,同時以Kubernetes為代表的容器編排引擎極大地簡化了容器化微服務創建、集成、部署和運維的整個流程,但Kubernetes學習曲線坡度高對人員的專業素質要求較高[2]。從易用性角度出發,本文提供了一種容器編排的可視化方法。實踐證明,利用此方法進行的微服務部署不僅為研發人員提供了友好型服務創建界面,還縮短了服務創建過程,提高了服務開發部署效率。
1容器編排可視化設計
1.1容器編排原理
Kubernetes源于Google公司內部的集群調度系統,提供了面向容器的集群部署和管理能力。Kubernetes簡化了CPU、內存、網絡和存儲的資源編排過程,使開發人員聚焦到以容器為中心的系統構建中[3]。Kubernetes具備完善的集群管理能力,包括可擴展的集群訪問控制機制、多租戶資源隔離能力[4]、基于DNS的服務注冊和發現能力、基于虛擬IP的服務負載均衡能力、健康檢查和自我恢復能力、服務滾動更新和自動彈性伸縮能力、插件化的資源調度框架及多維度的資源額度管理能力。Kubernetes架構如圖1所示[5]。
Kubernetes主要由以下8個核心組件組成:
①Etcd存儲整個集群的狀態。
②API Server是集群的資源控制門戶,默認具備基于RBAC的資源訪問控制能力,同時提供基于API注冊和發現資源擴展機制。
③Controller Manager負責集群狀態的維護,例如容器健康檢測、服務容器的彈性伸縮、服務容器的滾動更新等。
④Scheduler負責調度集群資源,按照預定的調度策略將服務實例調度到合適的集群節點中。
⑤Kubelet維護容器的生命周期,提供容器存儲接口和容器網絡接口的管理。
⑥Runtime負責容器鏡像管理以及容器運行引擎管理。
⑦Proxy負責為容器服務提供集群內部的服務發現以及負載均衡。
⑧Kubectl是面向用戶的集群管理客戶端命令行工具。

1.2可視化設計與實現
1.2.1設計
可視化軟件前端采用Vue+jTopo框架,后端采用Spring Boot框架。后端通過使用Kubernetes-client-4.1.1.jar與Kubernets的API Server組件通信,通過API Server的REST接口進行容器的編排部署操作。將圖形化界面設置的編排信息保存到MySQL數據庫中。可視化架構如圖2所示。

用戶登錄可視化工具,可以選擇已有的應用模板直接部署。部署完成后,用戶可以進入應用的監視界面查看服務的運行狀態。用戶登錄可視化工具,拖拽服務圖元到編排面板,在編排面板中進行服務配置以及服務依賴關系關聯,編排完成后可以保存為應用模板或者直接部署,用戶可以進入應用的監視界面,查看服務的運行狀態。可視化的流程如圖3所示。

1.2.2實現
可視化界面如圖4所示。左側為圖元列表,中間為編排面板,右側為服務圖元配置面板。服務類型圖元主要包括無狀態服務圖元、有狀態服務圖元、駐守服務圖元、定時任務圖元、外部服務接入圖元以及存儲資源圖元。在編排面板中可以編輯面板中的圖元,同時可以通過連線的方式排列圖元對象資源的創建順序。點擊連線可以連接2個圖元,連線代表部署的前后順序。點擊創建應用直接在Kubernetes中創建編排面板中的服務。點擊另存為可以保存為應用模板,可保存多個容器鏡像以及容器配置信息。

2實驗與評價
為了測試微服務環境下容器編排可視化的開發效率,實驗選取基于Spring Cloud的微服務組件,包括注冊中心、配置中心、服務網關、監控中心、用戶管理服務及認證服務等6個業務服務作為測試對象。從3個角度進行測試比較,依次是虛擬機環境下應用的搭建、基于Kubernetes以YAML文件方式在命令行模式下服務集的部署和基于Kubernetes以可視化方式生成服務集的部署。
2.1實驗環境
為了對開發的容器編排可視化功能進行驗證,實驗環境為6臺64位的虛擬機,操作系統為CentOS18.04,CPU為8核,內存為32 GB,Docker容器版本為v17.03,容器編排引擎為Kubernetes v1.17.0。實驗所用的Kubernetes集群設置3個master節點,6個slave節點。
2.2實驗設置
(1)基于Linux虛擬機的方式
實際應用中,微服務組件以及業務服務主要部署在Linux系統中。使用Spring Cloud框架需要在操作系統中預先安裝JDK。首先在6臺虛擬機中完成基礎配置安裝,包括JDK的安裝和配置SSH免密登陸。其次,運行服務集群,需規劃服務與虛擬機的對應關系,包括為服務程序進行IP分配以及端口分配。然后,按照規劃表將服務程序通過sftp傳輸到對應的虛擬機中。最后,在各個虛擬機中通過命令行啟動服務程序,使用ps命令簡單查看各服務的運行狀況[6]。
(2)基于YAML文件方式
在開發工具中使用Maven插件docker-maven-plugin將工程打包成鏡像,并將鏡像推送到鏡像倉庫。其次,編寫為組件以及業務服務編寫部署YAML,共需編寫10個YMAL文件。然后,根據彼此間依賴關系使用kubectl apply命令,使用YAML文件依次部署各個服務,最后通過kubeclt get pods查看生成的服務容器[7]。
(3)基于可視化界面方式
首先,在開發工具中使用Maven插件docker-maven-plugin將工程打包成鏡像,并將鏡像推送到鏡像倉庫。其次,通過圖元在編排面板通過可視化界面配置服務,需要配置10個無狀態服務圖元,根據彼此間依賴關系使用連線將圖元連接起來。然后,點擊另存模板按鈕將部署方案保存為模板,點擊部署按鈕將部署服務,最后通過監控界面查看各服務的部署情況。
2.3實驗結果與分析
實驗采用2.1節的測試環境,隨機抽取此領域多人對2.2節3種實驗的設置分別進行實驗,并記錄每次實驗所花費的時間,著重對比3種方式下所構建服務的性能指標。性能指標對比如表1所示,可以看出構建服務方式很多,但每種方式的部署過程復雜度是不同的。

3結束語
大型應用系統使用微服務架構可以明確分工,簡化開發、構建過程,但增加系統部署難度,采用容器編排引擎部署微服務系統可簡化部署難度。本文提出的基于Docker容器、Kubernetes容器編排、Vue前端開發框架以及借助Kubernetes Java客戶端實現了容器編排的可視化的方法。通過實驗分析得出相對于虛擬機的部署方式,本文提出的容器引擎部署方式,從多方面簡化繁瑣的部署運維工作。相比較于命令行式的容器引擎部署方式,提出的可視化方式具有簡潔的操作方式,可面向不具有容器編排引擎知識的普通開發者。
參考文獻
[1]浙江大學SEL實驗室.Docker容器與容器云[M].北京:人民郵電出版社,2015.
[2]徐珉.Docker環境下容器編排工具的選擇[J].集成電路應用, 2017,34(7):62-66.
[3]楊鷗,張羿,耿貞偉.微服務架構在容器云中的應用實踐[J].電腦與電信,2017(7):79-81.
[4]畢小紅,劉淵,陳飛.微服務應用平臺的網絡性能研究與優化[J].計算機工程,2018,44(5):53-59.
[5]劉琳羽,南凱.一種基于Docker的開發者服務平臺設計[J].科研信息化技術與應用,2015,6(5):65-72.
[6]張建,謝天鈞.基于Docker的平臺即服務架構研究[J].信息技術與信息化,2014(10):131-134.
[7]杜威科.基于Kubemetes的大數據流式計算Spark平臺設計與實現[D].南京:南京郵電大學,2017.