本發(fā)明涉及云計(jì)算技術(shù)和容器領(lǐng)域,尤其涉及一種基于Kubernetes的容器云架構(gòu)及其各模塊之間的交互方法。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)的迅猛發(fā)展,網(wǎng)民人數(shù)和上網(wǎng)時(shí)長(zhǎng)急劇增長(zhǎng),網(wǎng)站的后臺(tái)架構(gòu)也在不斷的變化以應(yīng)對(duì)日益龐大的訪問需求。服務(wù)器架構(gòu)的設(shè)計(jì),從最初將Web服務(wù)和數(shù)據(jù)庫服務(wù)等所有服務(wù)署到一臺(tái)物理服務(wù)器上,到后來的數(shù)據(jù)庫服務(wù)與Web服務(wù)分離,從而提高服務(wù)器的性能與安全性,進(jìn)而到使用負(fù)載均衡技術(shù)將負(fù)載分?jǐn)偟蕉嗯_(tái)服務(wù)器上以減少單臺(tái)服務(wù)器的壓力,到最近的自動(dòng)伸縮方式,通過對(duì)現(xiàn)有服務(wù)器集群的CPU和內(nèi)存等指標(biāo)進(jìn)行監(jiān)控,根據(jù)訪問需求以及制定的伸縮策略,自動(dòng)增加和移除服務(wù)器節(jié)點(diǎn)。與傳統(tǒng)的手工增刪節(jié)點(diǎn)相比,這種方式響應(yīng)快,運(yùn)維成本小,穩(wěn)定性高。
然而,使用傳統(tǒng)服務(wù)器和云計(jì)算技術(shù)實(shí)現(xiàn)自動(dòng)伸縮架構(gòu)有很多問題,導(dǎo)致自動(dòng)伸縮方式一直沒有廣泛應(yīng)用。首先,將業(yè)務(wù)模塊部署到服務(wù)器所需時(shí)間較長(zhǎng),而移動(dòng)互聯(lián)網(wǎng)應(yīng)用要求業(yè)務(wù)模塊必須快速迭代上線,業(yè)務(wù)模塊的頻繁部署和更新會(huì)浪費(fèi)大量的人力物力。與此同時(shí),對(duì)于海量訪問請(qǐng)求,傳統(tǒng)服務(wù)器或云計(jì)算架構(gòu)無法快速啟動(dòng)新的服務(wù)節(jié)點(diǎn),導(dǎo)致訪問延遲甚至系統(tǒng)崩潰。因?yàn)閭鹘y(tǒng)云計(jì)算技術(shù)的架構(gòu)基本都采用虛擬機(jī)方式,在一些細(xì)分領(lǐng)域,其固有缺陷導(dǎo)致應(yīng)用效果不盡如人意。近年來,隨著云計(jì)算技術(shù)的流行和相關(guān)技術(shù)的快速發(fā)展,云計(jì)算技術(shù)基礎(chǔ)架構(gòu)的實(shí)現(xiàn)不僅僅局限于虛擬機(jī)一種選擇。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種基于Kubernetes的容器云架構(gòu),可以方便的應(yīng)用于需要高可用性及擴(kuò)展性的容器系統(tǒng)。
本發(fā)明的另一目的在于提供一種基于Kubernetes的容器云架構(gòu)的各模塊之間的交互方法。
本發(fā)明的目的通過以下的技術(shù)方案實(shí)現(xiàn):
一種基于Kubernetes的容器云架構(gòu),包括鏡像構(gòu)建模塊、數(shù)據(jù)倉庫模塊、負(fù)載均衡模塊、服務(wù)發(fā)現(xiàn)模塊和容器監(jiān)控模塊,還包括分別與鏡像構(gòu)建模塊、數(shù)據(jù)倉庫模塊、負(fù)載均衡模塊、服務(wù)發(fā)現(xiàn)模塊、容器監(jiān)控模塊連接的服務(wù)器模塊,其中
鏡像構(gòu)建模塊,用于提供鏡像文件制作、存儲(chǔ)和分發(fā)服務(wù);
數(shù)據(jù)倉庫模塊,用于存儲(chǔ)和處理集群中數(shù)據(jù)庫的數(shù)據(jù)信息;
負(fù)載均衡模塊,用于對(duì)Kubernetes集群中的各個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行負(fù)載均衡;
服務(wù)發(fā)現(xiàn)模塊,用于獲取Kuberntes集群中各計(jì)算節(jié)點(diǎn)動(dòng)態(tài)變化的信息;
容器監(jiān)控模塊,用于采集和顯示Kubernetes集群各計(jì)算節(jié)點(diǎn)運(yùn)行狀態(tài)的信息。
所述鏡像構(gòu)建模塊為Docker私有庫模塊,并使用Dockerfile打包技術(shù)和Kubernetes文件編排模板。
所述數(shù)據(jù)倉庫模塊采用hadoop節(jié)點(diǎn)處理Mysql和MongoDB數(shù)據(jù)。
所述負(fù)載均衡模塊采用Nginx-Plus代理工具。
所述服務(wù)發(fā)現(xiàn)模塊采用Etcd存儲(chǔ)系統(tǒng)。
所述服務(wù)器模塊采用CentOS操作系統(tǒng)。
本發(fā)明的另一目的通過以下的技術(shù)方案實(shí)現(xiàn):
一種基于Kubernetes的容器云架構(gòu)的各模塊之間的交互方法,包含以下步驟:
(1)代碼更新:開發(fā)人員將新的代碼鏡像上傳到鏡像構(gòu)建模塊中,運(yùn)維人員從鏡像構(gòu)建模塊中下載新的鏡像并加載運(yùn)行;
(2)負(fù)載均衡:請(qǐng)求端發(fā)出請(qǐng)求,負(fù)載均衡模塊將接收到的請(qǐng)求根據(jù)負(fù)載平衡策略分?jǐn)傊寥我挥?jì)算節(jié)點(diǎn);計(jì)算節(jié)點(diǎn)處理請(qǐng)求,并將結(jié)果返回至負(fù)載均衡模塊,負(fù)載均衡模塊將響應(yīng)結(jié)果返回至請(qǐng)求端;
(3)服務(wù)發(fā)現(xiàn):當(dāng)添加新的計(jì)算節(jié)點(diǎn)時(shí),會(huì)向服務(wù)發(fā)現(xiàn)模塊注冊(cè)新增計(jì)算節(jié)點(diǎn)信息;移除計(jì)算節(jié)點(diǎn)時(shí),首先通知負(fù)載均衡模塊移除該計(jì)算節(jié)點(diǎn),然后從服務(wù)發(fā)現(xiàn)模塊中移除該計(jì)算節(jié)點(diǎn)的相關(guān)信息;
(4)容器監(jiān)控:將各服務(wù)器模塊中運(yùn)行的監(jiān)控模塊作為從節(jié)點(diǎn),容器監(jiān)控模塊作為主節(jié)點(diǎn),從節(jié)點(diǎn)周期性的向主節(jié)點(diǎn)發(fā)送所在服務(wù)器模塊的指標(biāo)數(shù)據(jù),主節(jié)點(diǎn)接收各從節(jié)點(diǎn)的指標(biāo)數(shù)據(jù)并繪制成圖形,顯示在系統(tǒng)監(jiān)控模塊所在的主機(jī)瀏覽器上;
(5)數(shù)據(jù)處理:將hadoop運(yùn)行在Kubernetes集群中,處理容器應(yīng)用中獲取的海量MongoDB和Mysql數(shù)據(jù),以便達(dá)到容器系統(tǒng)的數(shù)據(jù)有效性和可分析性。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn)和有益效果:
1、LXC容器技術(shù)因其啟動(dòng)速度快、性能佳等特點(diǎn),逐漸在云計(jì)算領(lǐng)域中占有一席之地。在這之中,Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到Linux機(jī)器上。容器使用沙箱機(jī)制,相互之間不會(huì)有任何接口,可以很容易地在主機(jī)和數(shù)據(jù)中心中運(yùn)行。本發(fā)明所采用的Kubernetes作為一種管理輕量級(jí)容器Docker的引擎,可以方便快速的創(chuàng)建容器并進(jìn)行容器的全生命周期管理,使得容器技術(shù)的普及更進(jìn)一步。Kubernetes容器集群管理系統(tǒng)的主要功能包括:使用Docker對(duì)應(yīng)用程序進(jìn)行打包、實(shí)例化及運(yùn)行;以集群的方式運(yùn)行及管理跨主機(jī)的容器;解決位于不同主機(jī)之間所運(yùn)行的容器之間的通信問題等等。再進(jìn)一步,Kubernetes作為最早的基于Docker的容器調(diào)度方案之一,通過成熟的系統(tǒng)架構(gòu)和強(qiáng)大的橫向擴(kuò)容能力,有望成為最成功的容器調(diào)度方案,并服務(wù)于未來云計(jì)算領(lǐng)域。
2、本發(fā)明可以方便的應(yīng)用于需要高可用性及擴(kuò)展性的容器系統(tǒng),同時(shí)實(shí)現(xiàn)如下功能:(1)監(jiān)控CentOS服務(wù)器及其運(yùn)行Docker容器的運(yùn)行狀況;(2)根據(jù)監(jiān)控?cái)?shù)據(jù)利用Kubernetes技術(shù)動(dòng)態(tài)伸縮集群;(3)通過構(gòu)建Docker私有Registry倉庫和制定作業(yè)管理策略,實(shí)現(xiàn)Docker鏡像的持續(xù)集成,不需重啟容器便可更新業(yè)務(wù)。
附圖說明
圖1為本發(fā)明所述一種基于Kubernetes的容器云架構(gòu)的結(jié)構(gòu)示意圖。
圖2為圖1所述容器云架構(gòu)的鏡像構(gòu)建模塊的運(yùn)行過程架構(gòu)圖。
圖3為圖1所述容器云架構(gòu)的負(fù)載均衡模塊的運(yùn)行過程架構(gòu)圖。
圖4為圖1所述容器云架構(gòu)的服務(wù)發(fā)現(xiàn)模塊的運(yùn)行過程架構(gòu)圖。
圖5為圖1所述容器云架構(gòu)的容器監(jiān)控模塊的運(yùn)行過程架構(gòu)圖。
附圖中各部件的標(biāo)記如下:1-鏡像構(gòu)建模塊,2-負(fù)載均衡模塊,3-服務(wù)發(fā)現(xiàn)模塊,4-容器監(jiān)控模塊。
具體實(shí)施方式
下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。
如圖1至圖5,具體如下:
(一)鏡像自動(dòng)部署實(shí)現(xiàn)方法
所述鏡像構(gòu)建模塊1用于提供一種從開發(fā)到部署以及關(guān)于作業(yè)定義的鏡像構(gòu)建策略,主要支持鏡像與源代碼自動(dòng)化結(jié)合方法,比較適合于業(yè)務(wù)更新時(shí)對(duì)容器鏡像的及時(shí)更新。鏡像構(gòu)建的流程步驟如圖2所示,詳細(xì)步驟如下:
(1)代碼提交
開發(fā)人員將各種語言編程的代碼提交到版本管理倉庫,在本發(fā)明中,以SVN為版本管理工具,該工具適用于團(tuán)隊(duì)合作的項(xiàng)目開發(fā)流程中保證代碼的一致性。
(2)定義作業(yè)
與此同時(shí),運(yùn)維人員編寫適合項(xiàng)目的Docker鏡像打包文件Dockerfile和基于Kubernetes的yaml文件,嚴(yán)格按照Dockerfile編寫規(guī)則和yaml文件編排規(guī)則,創(chuàng)建對(duì)應(yīng)的容器運(yùn)行規(guī)則。
(3)構(gòu)建鏡像文件
根據(jù)CI/CD自動(dòng)化部署流程,以(1)中源代碼和(2)中Dockerfile文件為基礎(chǔ),創(chuàng)建容器的image鏡像文件,并推送到私有Docker鏡像倉庫。
(4)運(yùn)行鏡像文件
根據(jù)(3)中的鏡像文件和(2)中的yaml文件,在Kubernetes中以合理編排的方式運(yùn)行鏡像文件。
上述步驟提供了鏡像的存儲(chǔ)和運(yùn)行服務(wù),鏡像倉庫使用Docker推薦的私有庫安裝方式,解決了作業(yè)定義與源代碼相結(jié)合的問題。
(二)容器系統(tǒng)擴(kuò)展方法
所述負(fù)載均衡模塊2用于對(duì)動(dòng)態(tài)變化的集群中各個(gè)Kubernetes節(jié)點(diǎn)進(jìn)行負(fù)載均衡;其采用Nginx-Plus工具實(shí)現(xiàn),Nginx-Plus是Nginx公司發(fā)布的可結(jié)合在Kubernetes集群中一種可靠的負(fù)載均衡工具,特別適合一些負(fù)載較大的Web系統(tǒng)使用。配合Kubernetes,可加強(qiáng)Kubernetes的負(fù)載均衡能力,使本容器系統(tǒng)的擴(kuò)展性得以提高。負(fù)載均衡模塊如圖3所示。
所述服務(wù)發(fā)現(xiàn)模塊3用于實(shí)時(shí)存儲(chǔ)動(dòng)態(tài)變化的Kubernetes集群各節(jié)點(diǎn)的信息;其采用Etcd存儲(chǔ)系統(tǒng)存儲(chǔ)各計(jì)算節(jié)點(diǎn)信息。Etcd是一個(gè)高可用的Key/Value存儲(chǔ)系統(tǒng),主要用于分享配置和服務(wù)發(fā)現(xiàn)。通過Etcd能夠快速有效地增加和移除當(dāng)前各個(gè)Kubernetes節(jié)點(diǎn)的信息。服務(wù)發(fā)現(xiàn)模塊如圖4所示。
(三)容器監(jiān)控方法
所述容器監(jiān)控模塊4用于采集、存儲(chǔ)和顯示Kubernetes集群各節(jié)點(diǎn)的容器運(yùn)行狀態(tài)信息;CentOS是企業(yè)最常用的服務(wù)器操作系統(tǒng),基于該系統(tǒng),本發(fā)明實(shí)現(xiàn)了基于Zabbix和cAdvisor結(jié)合的容器監(jiān)控模塊。Zabbix是一個(gè)基于Web界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)解決方案;而cAdvisor是一個(gè)用于收集、聚合處理和輸出容器運(yùn)行指標(biāo)的守護(hù)進(jìn)程,通過cAdvisor能獲取Kubernetes集群中Docker各種性能數(shù)據(jù)。在Zabbix中支持Docker,使用Zabbix Docker Monitoring實(shí)現(xiàn)容器監(jiān)控。容器監(jiān)控系統(tǒng)如圖5所示,監(jiān)控步驟如下:
(1)在Kubernetes主節(jié)點(diǎn)部署Zabbix Server,監(jiān)控主節(jié)點(diǎn),并導(dǎo)入Web管理界面,分發(fā)到子節(jié)點(diǎn)。
(2)在子節(jié)點(diǎn)部署Zabbix Agent,實(shí)現(xiàn)各個(gè)子節(jié)點(diǎn)的主機(jī)監(jiān)控。
(3)在各個(gè)Kubernetes節(jié)點(diǎn)啟動(dòng)cAdvisor容器,實(shí)現(xiàn)主機(jī)容器性能的監(jiān)控。
(4)web可視化界面展示:將得到的監(jiān)控?cái)?shù)據(jù)通過HTTP和JSON接口展現(xiàn)在前端。
(四)各模塊交互方法
一種基于Kubernetes的Web服務(wù)器架構(gòu)各模塊之間的交互方法,包括以下過程:
(1)代碼更新:一臺(tái)主機(jī)作為Docker私有庫服務(wù)器,當(dāng)業(yè)務(wù)代碼更新時(shí),開發(fā)人員將新的代碼鏡像通過自動(dòng)化方式上傳到運(yùn)行私有庫模塊的主機(jī)中,每次新增Kubernetes節(jié)點(diǎn)時(shí),系統(tǒng)從私有庫模塊中拉取新的業(yè)務(wù)鏡像并加載運(yùn)行。如圖2所示。
(2)負(fù)載均衡:請(qǐng)求端發(fā)出http請(qǐng)求,負(fù)載均衡模塊將接收到的請(qǐng)求根據(jù)負(fù)載平衡策略分?jǐn)傊寥我籏ubernetes節(jié)點(diǎn);接著節(jié)點(diǎn)處理請(qǐng)求,并將結(jié)果返回至負(fù)載均衡模塊,負(fù)載均衡模塊將響應(yīng)結(jié)果返回至請(qǐng)求端。
所述負(fù)載均衡模塊定期查詢所述服務(wù)發(fā)現(xiàn)模塊(Etcd),并根據(jù)查詢結(jié)果更新并重新加載負(fù)載均衡模塊的配置文件。具體為:負(fù)載均衡模塊周期性的從服務(wù)發(fā)現(xiàn)模塊拉取最新的Kubernetes節(jié)點(diǎn)信息,如圖3所示。
(3)服務(wù)發(fā)現(xiàn):采用Etcd開源工具實(shí)現(xiàn)。當(dāng)添加新的計(jì)算節(jié)點(diǎn)時(shí),會(huì)向服務(wù)發(fā)現(xiàn)模塊(Etcd)注冊(cè)新增計(jì)算節(jié)點(diǎn)信息;移除計(jì)算節(jié)點(diǎn)時(shí),首先通知負(fù)載均衡模塊移除該計(jì)算節(jié)點(diǎn),然后從服務(wù)發(fā)現(xiàn)模塊中移除該計(jì)算節(jié)點(diǎn)的相關(guān)信息,如圖4所示。
(4)容器監(jiān)控:采用從節(jié)點(diǎn)向主節(jié)點(diǎn)匯報(bào)的“主動(dòng)”模式。將各服務(wù)器模塊中運(yùn)行的監(jiān)控模塊作為從節(jié)點(diǎn),1臺(tái)主機(jī)運(yùn)行系統(tǒng)監(jiān)控模塊作為主節(jié)點(diǎn),從節(jié)點(diǎn)周期性的向主節(jié)點(diǎn)發(fā)送所在服務(wù)器模塊的指標(biāo)數(shù)據(jù),如CPU占比和剩余內(nèi)存等,主節(jié)點(diǎn)接收各從節(jié)點(diǎn)的指標(biāo)數(shù)據(jù)并繪制成圖形,顯示在系統(tǒng)監(jiān)控模塊所在的主機(jī)瀏覽器上,如圖5所示。
(5)數(shù)據(jù)處理:將hadoop運(yùn)行在Kubernetes集群中,處理容器應(yīng)用中獲取的大量MongoDB和Mysql數(shù)據(jù),以便達(dá)到容器系統(tǒng)的數(shù)據(jù)有效性和可分析性。
(五)本發(fā)明方法部署要求
本發(fā)明至少需要四臺(tái)主機(jī):一臺(tái)主機(jī)作為服務(wù)發(fā)現(xiàn)模塊的主機(jī),一臺(tái)主機(jī)作為負(fù)載均衡模塊的主機(jī),一臺(tái)主機(jī)運(yùn)行容器監(jiān)控模塊,一臺(tái)主機(jī)作為運(yùn)行鏡像構(gòu)建模塊的服務(wù)器,其他主機(jī)作為運(yùn)行服務(wù)器模塊的節(jié)點(diǎn)。各主機(jī)運(yùn)行各自的業(yè)務(wù)邏輯,一個(gè)基于Kubernetes的高可用服務(wù)器集群便部署完成。
本發(fā)明揭示了一種基于Kubernetes的容器云架構(gòu)及各模塊之間的交互方法,可以方便的應(yīng)用于需要高可用性及擴(kuò)展性的容器系統(tǒng),同時(shí)實(shí)現(xiàn)如下功能:(1)監(jiān)控CentOS服務(wù)器及其運(yùn)行Docker容器的運(yùn)行狀況;(2)根據(jù)監(jiān)控?cái)?shù)據(jù)利用Kubernetes技術(shù)動(dòng)態(tài)伸縮集群;(3)通過構(gòu)建Docker私有Registry倉庫和制定作業(yè)管理策略,實(shí)現(xiàn)Docker鏡像的持續(xù)集成,并以不需重啟容器的方式來更新業(yè)務(wù)。通過上述功能實(shí)現(xiàn)容器系統(tǒng)的高并發(fā)性和穩(wěn)定性。
上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡(jiǎn)化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。