中國移動Kubernetes多集群統一管理實踐
背景
中國移動一級業務支撐系統是整個中國移動的集中管理和一點對外的門戶,包括網狀網、BBOSS、一級營銷、內容計費、一級客服、VGOP、電渠等多個業務支撐系統,各系統呈煙囪化建設。在小型機時代由于主機集成度高、性能穩定因此數量較少,多項目集群建設、運維尚能保持平穩。但隨著系統X86化逐步推進,多項目集群中分別管理的主機、網絡、存儲等資源數量成幾何級數增長,對項目建設、運維開發等各個流程都帶來顛覆性挑戰,現分析各類挑戰如下。
在資源層面,各個項目的資源分散散布在各個數據中心和私有云里,不能統一管理,每個項目都有獨立的資源,分布在不同的機房,特別是網狀網和內容計費分布在31個省,對跨數據中心的資源和系統統一管理難度較大。
在網絡層面,每個項目都跨多個網絡域,如核心域、DMZ域和互聯網域,之間有多層防火墻隔離,不同系統的安全等級要求不同,不同域的數據訪問對安全控制的要求也各不相同。
在技術層面,缺乏統一的技術和平臺實現業務能力的快速擴展,尤其是無法滿足互聯網業務發展帶來的劇烈業務波動業務快速上線和彈性伸縮能力差。各項目采用的技術和框架各異。有的適合容器化,有的適合直接在小機上運行。底層無法直接進行技術復用和共享,需要針對具體情況進行分析和提出解決方案。
鑒于在以上多種復雜環境下,業務支撐中心要實現對多系統、多資源、多網絡、多數據中心、多技術架構的統一管理,必須構建中國移動業務支撐云平臺來進行進一步的能力提升,實現對多項目下多集群的統一管理。
多集群管理整體技術方案
多集群統一管理是基于中國移動業務支撐云平臺的基礎上構建的,以Docker、Kubernetes、Mesos、Ansible為核心支撐技術框架來實現,中國移動業務支撐云平臺整體架構視圖如下所示。
(點擊放大圖像)
該架構方案既滿足了適用于容器化應用的服務統一管理、又滿足了不適于容器化的Hadoop等服務和基于小機類的應用服務的統一訪問和統一管理,是根據當前中國移業務支撐系統現狀量身定制,既適合當前業務支撐系統發展的實際需求,又具有支撐未來業務高速發展的技術先進性。
在中國移動業務支撐云平臺多集群管理的實踐中,我們一直在思考怎樣的多集群管理模式最適合移動總部的系統,是大一統的集中PaaS集群管理平臺還是采用松耦合的聯邦式集群管理模式。移動總部一級業務支撐系統都是大型項目,每個項目業務特點和技術構架都不一樣,都有大量主機,分布在業支機房和資源池,每個系統均跨多個網絡域包含多個集群,像網狀網和內容計費項目集群還跨31個省。既能保持各個項目的靈活性,構架不受沖擊,又能實現集中式的資源和應用管理是PaaS多集群管理平臺的設計原則。
因此我們最終采用了Cluster Federation(集群聯盟)的模式對各項目的多集群進行統一管理。采用此方式對各個項目的影響最小,系統不用做任何改動,同時可以實現資源集中管理和統一服務調度,集中的管理包含鏡像管理、應用管理、配置管理、資源管理、監控管理等。多集群統一管理架構設計如下圖所示。
(點擊放大圖像)
結合Kubernetes容器集群管理的優秀技術,通過自主研發的多集群管理軟件。實現了Mesos+Kubernetes多集群的統一管理,涵蓋以下典型應用場景。
在同一數據中心的多個項目共享資源統一管理
在kubernetets集群管理平臺中為每個項目建立獨立的租戶,安全隔離不同租戶的資源和訪問權限。通過分區和分集群的方式即保持各項目的獨立性又保持資源的共享。為大的項目建立獨立的集群,小的項目通過分區實現安全隔離。共享資源統一管理多個項目如下圖所示。
(點擊放大圖像)
在同一數據中心對含有多個網絡域項目的統一管理
對于DMZ域和互聯網域部署的一般都是Web類應用和Proxy應用,比較輕量但彈性擴展需求強,適合部署Kubernetets+Docker。
對于核心域包含大量的計算類、服務類、分析類應用,適合部署Mesos+Kubernetes+Docker。
跨多網絡域項目的多集群統一管理如下圖所示。
(點擊放大圖像)
跨IP承載網的多數據中心統一管理
中國移動業務支撐系統跨多個數據中心,可以對多數據中心實現統一的應用鏡像管理、統一的應用部署和服務的調度,以及應用的快速容災調度。跨IP承載網的多數據中心統一管理如下圖所示。
(點擊放大圖像)
多集群管理中的重點和難點
對于一個多集群的PaaS管理平臺,我們從以下方面進行了詳細的方案分析和設計實現。
(點擊放大圖像)
主要包含安全集中控制、資源統一管理、鏡像統一管理、應用統一管理、配置統一管理和統一的監控管理。在多集群的模式下,每一個功能都會變得非常復雜。下面就每個功能實現做詳細的描述。
安全集中控制
聯合多集群模式下安全管控是要考慮的一個非常復雜的因素,需要考慮平臺管理員,集群管理員,普通用戶等多個角色。權限分配也很復雜。
- 怎么定義租戶,怎么控制租戶和集群資源的關系,怎么映射租戶和項目的關系。
- 每一個租戶對于自己的集群資源怎么進一步劃分分區,分配權限給開發,部署和運維人員。
- 每個用戶怎么管理自己的應用和監控應用的健康情況。
考慮以上問題,我們在多集群PaaS管理平臺中,通過租戶、集群、用戶三級安全管理,實現統一PaaS平臺多集群管理的安全集中管控,如下圖所示。
(點擊放大圖像)
- 首先要控制對集群的安全訪問,每個集群都采用安全模式啟動,采用證書方式訪問,沒有證書不允許訪問任何一個集群。
- 在多集群管理中,租戶為一個虛擬的單位概念,每個項目可定義為一個租戶,如網狀網項目即為一個租戶,每個租戶下可建立多個集群,租戶擁有一個或者多個集群的訪問證書,租戶實現對自己名下的資源的管理和分配。
- 租戶再通過用戶組綁定不同集群和分區資源,用戶屬于該用戶組就可以獲得對資源的訪問權限。
- 用戶本身只能部署和監控自己的應用,用戶并不能查看互相的應用,保證應用的獨立性和安全性。
資源統一納管
對于統一PaaS平臺來說,最主要的功能就是對資源的統一的管控,包含有多少個集群,每個集群多少臺機器,都分布在哪個機房,機器配置情況如何,目前的可用率怎么樣,怎么去集群間調配資源。因此,統一PaaS資源管理平臺實現了以下的資源統一管理功能。
- 經過證書認證之后,通過Kubernetes API Server對集群進行托管,把集群的節點數量、配置等信息導入,同時補充機房、機架等信息。
- 將納入集群和租戶進行綁定,把集群分配給指定租戶。
- 租戶可以繼續對集群資源進行分區,比如分成Web區、DB區等,便于部署不同的應用,并且可以實現不同配置的主機的共存。
設計方案和系統實現如下圖所示。
(點擊放大圖像)
鏡像統一管理
鏡像的統一管理是多集群模式下的一個非常重要的功能。統一PaaS平臺需要對鏡像做集中的管控,但是又要考慮鏡像部署的效率。因此,在統一PaaS平臺中采用了兩級鏡像的構架。
- 在總部實現鏡像的統一生命周期的管理,鏡像的入庫,出庫和版本更新都在總部統一鏡像庫集中管理。這樣未來可以和DevOps整合在一起,進行統一的開發,運營管理。
- 每個集群都有一個子庫或者幾個集群共享一個子庫。子庫可以設定同步規則,只同步一部分鏡像到子庫,并實現鏡像的跨地域、跨IP承載網同步和更新,支持全量同步和增量同步。這樣每個項目可以只同步自己的鏡像到自己的集群中,提高集群應用部署的效率。
設計方案和系統實現如下圖所示。
(點擊放大圖像)
應用統一部署
多集群情況下的應用部署需要考慮的情況會比較復雜。
- 應用需要能支持跨廣域網,跨集群統一部署。
- 應用需要能支持部署到不同集群的不同的分區上。
- 應用需要能支持跨集群灰度發布和滾動升級。
針對這些要求,統一PaaS平臺對應用部署功能進行了改進。
用戶定義完應用之后,點擊部署,這時候會出現一個用戶具有權限的集群和分區的列表,用戶可以選擇在哪個集群的哪個分區上部署應用。這樣用戶就能一鍵式的把應用同步部署到多個集群上。
對于應用的在線灰度發布和升級是企業應用必備的功能。大型的應用都會部署在多個集群或者分區,提高應用的高可用性,并且在升級的時候用戶可以選擇按集群和分區進行滾動升級。保證上線業務系統不中斷,提高用戶滿意度。
設計方案和系統實現如下圖所示。
(點擊放大圖像)
配置統一管理
對于支撐多系統多應用共存的PaaS平臺。必須實現配置和應用程序分離,因為每個應用的配置數據格式和需求都不一樣,但是如果要求應用只是因為配置問題就修改程序結構,那么PaaS平臺適應性太差,無法滿足大規模的應用的部署。
Kubernetes ConfigMap的功能正好能滿足多應用的復雜的環境下的配置管理,在統一PaaS管理平臺中,我們進行了配置管理的封裝。
- 用戶可以事先上傳或者直接拷貝多個任意格式的配置文件(XML、PROPERTIES、TXT等)到不同的集群中創建配置庫,形成一個綁定在不同的集群中的統一名字的配置庫。
- 用戶在應用部署的時候,選擇該名字的配置庫,就可以實現應用在不同集群部署的時候,自動綁定自己集群的配置數據,實現不同環境,不同集群的統一的應用和配置數據的綁定。
設計方案和系統實現如下圖所示。
(點擊放大圖像)
統一監控
在多集群多租戶模式下,每個租戶會關心自己的資源和服務的運行情況。因此統一PaaS平臺通過統一監控管理實現對所有租戶、集群、資源、應用的集中數據采集和展示,又能分租戶展示不同的集群和服務的運行情況。并能在發生故障時及時獲取告警信息,快速進行故障恢復和隔離。
設計方案和系統實現如下圖所示。
(點擊放大圖像)
應用效果
通過Kubernetes多集群統一管理,實現了對一級業務支撐系統中多項目集群、跨多個網絡域、跨多個數據中心的復雜集群環境下進行集中資源管理,應用和配置數據的多集群統一部署和管理,提高了業務支撐中心對各分散系統的管理和監控力度。
目前試點的三個項目,共有35個集群,約5000個容器分布在全國多個機房。提供了針對多個集群的資源統一管理和調度、鏡像集中管理、應用集中部署、配置統一管理和容器統一監控,同時可以定義在每個集群部署服務的容器實例的比例。
在未采用多集群管理之前,如:網狀網系統上線一個新的版本,包含總部集群、容災集群和31個省集群,需要至少5個人部署一天;使用Kubenetes多集群統一管理平臺之后,通過多集群統一部署,只需要一個人10分鐘即可完成33個集群的版本升級。
通過使用Kubernetes多集群統一管理中的“克隆”功能、能夠非常快速地實現服務的發布。極大提高大規模應用快速部署的靈活性和系統快捷的水平擴展能力。
通過使用Kubernetes多集群統一管理,可以方便靈活地從業務視圖、集群視圖、租戶視圖等全方位監控各集群的資源整體利用率,實現動態監控和動態快速調整業務的容器數量。
下一步計劃
統一PaaS平臺經過三個系統的集群的試點,目前運行穩定,逐步積累了很多的運維和管理經驗,在此基礎上計劃做進一步的研究和推廣。
- 推廣到更多的項目,形成容器話應用的開發設計規范,鏡像打包規范,PaaS平臺運維規范等多個規范性文件,為未來的推廣提供標準化和規范化支持。
- 與Mesos的集成。目前已經實現了Kubernetes和Mesos的深度集成,Kubernetes可以作為一個Framework運行在Mesos之上。下一步準備遷移Hadoop/Spark到Mesos,并且實現Kubernetes和Hadoop/Spark應用的資源共享。
- 與DevOps工具集的集成。目前我們正在實現針對PaaS平臺的DevOps理念的實現。包含工具,流程和監控。未來實現整個從開發->代碼質量分析->打包鏡像->測試->部署的自動化支撐,并且通面板展現每個項目,每個微服務的所有環節的狀態,從而提高移動對于整個開發測試過程的管理力度。
作者簡介
中國移動業務支撐系統部業務支撐中心 謝軍 初瑞 夏敬侃