1. 程式人生 > >中國移動一級業務支撐系統多Kubernetes叢集PaaS平臺實踐經驗分享

中國移動一級業務支撐系統多Kubernetes叢集PaaS平臺實踐經驗分享

背景

中國移動一級業務支撐系統是整個中國移動的集中管理和一點對外的門戶,包括網狀網、BBOSS、一級營銷、內容計費、一級客服、VGOP、電渠等多個業務支撐系統,各系統呈煙囪化建設。在小型機時代由於主機整合度高、效能穩定因此數量較少,多專案叢集建設、運維尚能保持平穩。但隨著系統X86化逐步推進,多專案叢集中分別管理的主機、網路、儲存等資源數量成幾何級數增長,對專案建設、運維開發等各個流程都帶來顛覆性挑戰,現分析各類挑戰如下:
  • 在資源層面,各個專案的資源分散散佈在各個資料中心和私有云裡,不能統一管理,每個專案都有獨立的資源,分佈在不同的機房,特別是網狀網和內容計費分佈在31個省,對跨資料中心的資源和系統統一管理難度較大。
  • 在網路層面,每個專案都跨多個網路域,如核心域、DMZ域和網際網路域,之間有多層防火牆隔離,不同系統的安全等級要求不同,不同域的資料訪問對安全控制的要求也各不相同。
  • 在技術層面,缺乏統一的技術和平臺實現業務能力的快速擴充套件,尤其是無法滿足網際網路業務發展帶來的劇烈業務波動業務快速上線和彈性伸縮能力差。各專案採用的技術和框架各異。有的適合容器化,有的適合直接在小機上執行。底層無法直接進行技術複用和共享,需要針對具體情況進行分析和提出解決方案。

鑑於在以上多種複雜環境下,業務支撐中心要實現對多系統、多資源、多網路、多資料中心、多技術架構的統一管理,必須構建中國移動業務支撐雲平臺來進行進一步的能力提升,實現對多專案下多叢集的統一管理。

多叢集管理整體技術方案

多叢集統一管理是基於中國移動業務支撐雲平臺的基礎上構建的,以Docker、Kubernetes、Mesos、Ansible為核心支撐技術框架來實現,中國移動業務支撐雲平臺整體架構檢視如下所示:
01.png
該架構方案既滿足了適用於容器化應用的服務統一管理、又滿足了不適於容器化的Hadoop等服務和基於小機類的應用服務的統一訪問和統一管理,是根據當前中國移業務支撐系統現狀量身定製,既適合當前業務支撐系統發展的實際需求,又具有支撐未來業務高速發展的技術先進性。

在中國移動業務支撐雲平臺多叢集管理的實踐中,我們一直在思考怎樣的多叢集管理模式最適合移動總部的系統,是大一統的集中PaaS叢集管理平臺還是採用鬆耦合的聯邦式叢集管理模式。移動總部一級業務支撐系統都是大型專案,每個專案業務特點和技術構架都不一樣,都有大量主機,分佈在業支機房和資源池,每個系統均跨多個網路域包含多個叢集,像網狀網和內容計費專案叢集還跨31個省。既能保持各個專案的靈活性,構架不受衝擊,又能實現集中式的資源和應用管理是PaaS多叢集管理平臺的設計原則。

因此我們最終採用了Cluster Federation(叢集聯盟)的模式對各專案的多叢集進行統一管理。採用此方式對各個專案的影響最小,系統不用做任何改動,同時可以實現資源集中管理和統一服務排程,集中的管理包含映象管理、應用管理、配置管理、資源管理、監控管理等。多叢集統一管理架構設計如下圖所示:
02.png

結合Kubernetes容器叢集管理的優秀技術,通過自主研發的多叢集管理軟體。實現了Mesos+Kubernetes多叢集的統一管理,涵蓋以下典型應用場景:

在同一資料中心的多個專案共享資源統一管理

在kubernetets叢集管理平臺中為每個專案建立獨立的租戶,安全隔離不同租戶的資源和訪問許可權。通過分割槽和分叢集的方式即保持各專案的獨立性又保持資源的共享。為大的專案建立獨立的clutser,小的專案通過分割槽實現安全隔離。共享資源統一管理多個專案如下圖所示:
03.png

在同一資料中心對含有多個網路域專案的統一管理

對於DMZ域和網際網路域部署的一般都是WEB類應用和Proxy應用,比較輕量但彈性擴充套件需求強,適合部署Kubernetets+Docker。

對於核心域包含大量的計算類、服務類、分析類應用,適合部署Mesos+Kubernetes+Docker。

跨多網路域專案的多叢集統一管理如下圖所示:
04.png

跨IP承載網的多資料中心統一管理

中國移動業務支撐系統跨多個數據中心,可以對多資料中心實現統一的應用映象管理、統一的應用部署和服務的排程,以及應用的快速容災排程。跨IP承載網的多資料中心統一管理如下圖所示:
05.png

多叢集管理中的重點和難點

對於一個多叢集的PaaS管理平臺,我們從以下方面進行了詳細的方案分析和設計實現。
06.png
主要包含安全集中控制、資源統一管理、映象統一管理、應用統一管理、配置統一管理和統一的監控管理。在多叢集的模式下,每一個功能都會變得非常複雜。下面就每個功能實現做詳細的描述。

安全集中控制

聯合多叢集模式下安全管控是要考慮的一個非常複雜的因素,需要考慮平臺管理員,叢集管理員,普通使用者等多個角色。許可權分配也很複雜:
  1. 怎麼定義租戶,怎麼控制租戶和叢集資源的關係,怎麼對映租戶和專案的關係。
  2. 每一個租戶對於自己的叢集資源怎麼進一步劃分分割槽,分配許可權給開發,部署和運維人員。
  3. 每個使用者怎麼管理自己的應用和監控應用的健康情況。

考慮以上問題,我們在多叢集PaaS管理平臺中,通過租戶、叢集、使用者三級安全管理,實現統一PaaS平臺多叢集管理的安全集中管控。如下圖所示:
07.png
  1. 首先要控制對叢集的安全訪問,每個叢集都採用安全模式啟動,採用證書方式訪問,沒有證書不允許訪問任何一個叢集。
  2. 在多叢集管理中,租戶為一個虛擬的單位概念,每個專案可定義為一個租戶,如網狀網專案即為一個租戶,每個租戶下可建立多個叢集,租戶擁有一個或者多個叢集的訪問證書,租戶實現對自己名下的資源的管理和分配。
  3. 租戶再通過使用者組繫結不同叢集和分割槽資源,使用者屬於該使用者組就可以獲得對資源的訪問許可權。
  4. 使用者本身只能部署和監控自己的應用,使用者並不能檢視互相的應用,保證應用的獨立性和安全性。

資源統一納管

對於統一PaaS平臺來說,最主要的功能就是對資源的統一的管控,包含有多少個叢集,每個叢集多少臺機器,都分佈在哪個機房,機器配置情況如何,目前的可用率怎麼樣,怎麼去叢集間調配資源。因此,統一PaaS資源管理平臺實現了以下的資源統一管理功能:
  1. 經過證書認證之後,通過Kubernetes API Server對叢集進行那管,把叢集的Node的數量,配置等資訊匯入,同時補充機房,機架等資訊。
  2. 將納入叢集和租戶進行繫結,把叢集分配給指定租戶。
  3. 租戶可以繼續對叢集資源進行分割槽,比如分成WEB區、DB區等,便於部署不同的應用,並且可以實現不同配置的主機的共存。設計方案和系統實現如下圖所示:
    08.png

映象統一管理

映象的統一管理是多叢集模式下的一個非常重要的功能。統一PaaS平臺需要對映象做集中的管控,但是又要考慮映象部署的效率。因此,在統一PaaS平臺中採用了兩級映象的構架:
  1. 在總部實現映象的統一生命週期的管理,映象的入庫,出庫和版本更新都在總部統一映象庫集中管理。這樣未來可以和DevOps整合在一起,進行統一的開發,運營管理。
  2. 每個叢集都有一個子庫或者幾個叢集共享一個子庫。子庫可以設定同步規則,只同步一部分映象到子庫,並實現映象的跨地域、跨IP承載網同步和更新,支援全量同步和增量同步。這樣每個專案可以只同步自己的映象到自己的叢集中,提高叢集應用部署的效率。

設計方案和系統實現如下圖所示:
09.png

應用統一部署

多叢集情況下的應用部署需要考慮的情況會比較複雜:
  1. 應用需要能支援跨廣域網,跨叢集統一部署;
  2. 應用需要能支援部署到不同叢集的不同的分割槽上;
  3. 應用需要能支援跨叢集灰度釋出和滾動升級。

針對這些要求,統一PaaS平臺對應用部署功能進行了改進:
  1. 使用者定義完應用之後,點選部署,這時候會出現一個使用者具有許可權的叢集和分割槽的列表,使用者可以選擇在哪個叢集的哪個分割槽上部署應用。這樣使用者就能一鍵式的把應用同步部署到多個叢集上。
  2. 對於應用的線上灰度釋出和升級是企業應用必備的功能。大型的應用都會部署在多個叢集或者分割槽,提高應用的高可用性,並且在升級的時候使用者可以選擇按叢集和分割槽進行滾動升級。保證上線業務系統不中斷,提高使用者滿意度。設計方案和系統實現如下圖所示: 10.png

配置統一管理

對於支撐多系統多應用共存的PaaS平臺。必須實現配置和應用程式分離,因為每個應用的配置資料格式和需求都不一樣,但是如果要求應用只是因為配置問題就修改程式結構,那麼PaaS平臺適應性太差,無法滿足大規模的應用的部署。

Kubernetes ConfigMap的功能正好能滿足多應用的複雜的環境下的配置管理,在統一PAAS管理平臺中,我們進行了配置管理的封裝:
  1. 使用者可以事先上傳或者直接拷貝多個任意格式的配置檔案(XML、Properties、TXT等)到不同的叢集中建立配置庫,形成一個繫結在不同的叢集中的統一名字的配置庫。
  2. 使用者在應用部署的時候,選擇該名字的配置庫,就可以實現應用在不同叢集部署的時候,自動繫結自己叢集的配置資料,實現不同環境,不同叢集的統一的應用和配置資料的繫結。

設計方案和系統實現如下圖所示:
11.png

統一監控

在多叢集多租戶模式下,每個租戶會關心自己的資源和服務的執行情況。因此統一PaaS平臺通過統一監控管理實現對所有租戶、叢集、資源、應用的集中資料採集和展示,又能分租戶展示不同的叢集和Service的執行情況。並能在發生故障時及時獲取告警資訊,快速進行故障恢復和隔離。

設計方案和系統實現如下圖所示:
12.png

應用效果

  • 通過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理念的實現。包含工具,流程和監控。未來實現整個從開發 -> 程式碼質量分析 -> 打包映象 -> 測試 -> 部署的自動化支撐,並且通過Dashboard展現每個專案,每個微服務的所有環節的狀態,從而提高移動對於整個開發測試過程的管理力度。

作者:中國移動業務支撐系統部業務支撐中心 謝軍、初瑞、夏敬侃