中國電信股份有限公司湖南分公司|劉印 林鴻雁
為了滿足新業務創新與交付的敏捷性需求,運營商一直在探索IT技術轉型,這種轉型有多個維度,應用轉型是其中之一。容器技術最早出現在2000年左右,但直到2013年才開始成為熱點技術,近兩年有了飛速發展。由于運營商行業中有很多高并發應用,對IT性能和彈性都有較高要求,分布式架構可以很好地滿足這類應用的需求,是應用轉型的一個主要方向。因而,容器技術與分布式架構相得益彰,未來會發展成為新型應用平臺的核心。
目前,以Docker為代表的新一代容器技術有幾個主要特點:第一個是共享底層操作系統,并提供了一定的隔離與資源訪問控制能力,相對于虛擬化技術,可以更少地占用資源,更快地加載應用;第二個是新的應用封裝技術,極大地簡化了應用的交付與運維管理,提高了應用的可移植性和兼容性,但代價是需要重新打包應用,甚至重構應用,才能充分利用容器技術的優勢;第三個是開放性,容器及相關技術的飛速發展得益于開源社區的大力支持,在容器運行時和容器編排等核心技術組件上標準化程度非常高,有利于運營商基于開源或商業產品來打造自己的解決方案,選型自由度高。
在生產環境中大規模部署容器應用時,必須選擇好容器編排工具進行自動化管理,容器編排工具的基本功能有4個。
●編排和調度。根據策略自動化部署容器應用,智能選擇部署位置,并對容器化應用提供全生命周期管理。
●自動擴展與升級。自動實現應用的副本管理,根據負載實現應用的彈性伸縮,滾動升級以實現不中斷業務的應用程序更新。
●服務可用性管理。監測應用和服務的可用性,出現故障時可以自動修復,避免人工操作,這在大規模部署場景下尤為重要。
●與其它組件的集成。編排工具是核心但不是全部,需提供完善的管理接口,特別是API接口,以對接容器平臺上的其它功能組件。
最近兩年,主流的容器編排與調度工具主要有Kubernetes、Mesos(DC/OS)和Swarm三種,三種工具特色鮮明,下表是三者的對比分析。
由表項分析得出以下結論:Swarm與Docker容器引擎等組件結合緊密,優點是使用簡便,缺點是僅支持容器應用的管理,擴展能力相對較弱,適用于中小規模場景;Mesos曾經是最受追捧的編排工具,對常見的工作負載均有較好支持,并且最先支持大規模容器部署環境,Mesos的弱項是跨平臺能力和可管理性;Kubernetes源自Google的Brog項目,社區活躍度高,發展速度最快,目前已經發展成為最受歡迎的編排工具,K8s對微服務框架有非常好的支持,也有較強的跨平臺能力,技術先進性明顯。Google將K8s項目移交給CNCF管理之后,生態系統變得更加完善,CNCF于 2017年發布的調查報告顯示,已經有77%的容器用戶采用K8s作為編排工具。K8s已經發展成為事實上的標準。

表 主流容器編排工具特性比較
容器鏡像管理解決方案主要分為SaaS和本地部署兩類,出于性能、可靠性和安全性的考慮,企業環境下應用容器時,都傾向于在本地部署容器鏡像倉庫,例如Docker官方的公共鏡像倉庫可以作為基礎鏡像的來源使用,但不適合用來存儲企業自身的容器鏡像,也不適合作為生產環境的鏡像源來使用。因此,運營商需要建立自己的企業級容器鏡像倉庫。一個功能完善的鏡像倉庫應該具備下述三大功能。

圖1 容器網絡與安全配置示例
●支持多用戶的驗證與授權機制。鏡像倉庫是一種共享服務,必然要支持多用戶場景,因此集成的驗證、授權與審計功能非常重要,還要支持不同用戶之間的協作,方便鏡像共享。
●鏡像安全服務。鏡像安全是容器安全中的重要一環,比較關鍵的技術手段是鏡像內容的掃描和鏡像的發布控制。企業需要定期對鏡像包內部的文件進行安全性掃描,以發現脆弱性和安全風險;也要對鏡像進行審核,只發布那些簽合安全與質量控制規范的鏡像供用戶下載使用。
●鏡像的遠程同步與分發。企業通常需要在多個場點上部署容器應用,最佳策略是在每個場點部署本地鏡像倉庫,同時實現這些鏡像存儲服務節點之間的智能復制,以提供鏡像分發和鏡像同步等服務。
相對于其它的管理任務,容器的網絡與安全管理最具挑戰性。計算和存儲資源相對獨立,可以基于集群來進行管理。而網絡和安全則不同,地址與路由的管理以及訪問控制策略的管理都必須是全局統一的。根據調研,發現目前可服務于容器的網絡與安全解決方案主要分為兩大類:基于物理網絡的解決方案和基于虛擬網絡的解決方案。
基于物理網絡的解決方案采用Underlay的方式來轉發數據包。以目前應用最廣范的Calico為例,它采用純3層模式,通過管理iptables規則來實現跨主機的路由,不需要像Overlay方案一樣多次封包解包,這樣轉發效率可以得到保障。但最大的缺陷是功能受限,只能提供,基于iptables的路由和訪問控制功能,可管理性差,與現有的網絡解決方案也不兼容。
基于虛擬網絡的解決方案特點是功能不受限于物理網絡,有更好的兼容性和擴展性,但是和我們現有的網絡解決方案都不相容,功能也不夠完善,特別是監控和分析能力和我們的需求有較大差距。這些項目中目前影響力最大的是Flannel,它也是Kubernetes缺省采用的容器網絡解決方案。
上述容器網絡解決方案的功能都不夠完整,企業可以考慮將現有虛擬化和云平臺中使用的SDN解決方案延伸到容器環境,這樣做可以帶來諸多好處。一是實現基于圖形化界面的統一管理能力,可以在一個管理平臺上統一管理物理機、虛擬機和容器的網絡和安全服務;二是層疊技術解耦了物理網絡,有非常好的兼容性,未來可以對接各種異構網絡環境;三是功能全面,集成了南北向和東西向的路由及訪問控制,負載均衡等功能,實現全面的策略驅動網絡;四是缺省提供租戶間隔離功能,安全性較高。
圖1展示的是一個容器網絡與安全實現的參考范例,整體架構是在現有的二/三層物理網絡基礎上構建一個虛擬網絡,這個虛擬網絡通過邊界虛擬路由器集群與外界相連,實現南北向流量的轉發。內部則利用多個虛擬交換機建立獨立的二層網絡,各網絡之間相互隔離。容器管理平臺PKS和網絡管理平臺NSX-T的管理資源采用獨立的網絡來部署,與虛擬化平臺等管理節點歸屬于現有的管理網絡,以保證管理平臺的性能和安全性。
此外,每個K8s集群,以及每個集群內部的租戶分區命名空間都采用一套相互獨立的網絡,每個獨立網絡采用單獨的地址段,當容器啟動時自動分配IP地址。上述能力的實現得益于PKS與NSX-T的集成,當我們在K8s集群中創建新的命名空間時,NSX會自動創建與之對應的網絡,這樣可以降低管理負擔,并有效提升安全性。
當前業界以容器技術為核心的解決方案主要有以下幾種場景,分別對應新應用改造的不同階段。
基礎容器平臺類。包括容器運行時服務、容器集群服務等。這一類解決方案主要用來提供容器類應用的運行環境,因為其涵蓋的組件相對較少,技術門檻低,通常在導入容器技術的第一階段采用,技術關鍵點是應用封裝與鏡像管理、容器應用的編排與調度,容器平臺資源服務實現、服務的可管理性與安全性。
以容器技術為核心的應用服務平臺類。即新一代PaaS平臺,與傳統PaaS相比,有輕量化、非結構化的特點,包括基礎容器平臺類服務,以及相關的各種應用開發與管理組件,復雜度較高,需要同時考慮應用開發與平臺運維部門的需求,以建立一個貫穿應用全生命周期的平臺,技術關鍵點是與IDE環境的集成,自動化應用交付與運維,應用擴展性、可用性以及應用的更新與升級。
PaaS平臺建設的第一階段是在生產環境中建設容器云平臺,主要服務內容為容器集群及容器應用的部署和運維;第二階段是擴展以容器為核心的新一代應用平臺,完善容器集群服務,利用現有的開源或商業產品構造具有特色的、自主可控的非結構化PaaS平臺;第三階段是PaaS平臺的深入應用,利用PaaS平臺的服務能力,加快應用開發并加強基礎組件的共享,減少重復建設并提升應用的運維服務水平,實現新應用在生產環境中高度智能化和自動化運維。
目前運營商對容器的應用尚處在探索階段,部分省級運營商已經成功地將一些新應用部署到了容器平臺之上,積累了很多相關的經驗。但是結合實際情況,本文總結了容器云平臺建設的難點與挑戰。
●有大量不適配容器平臺的應用。運營商行業信息化建設較早,經過多年的發展,積累了很多應用,這些應用多是采用集中式架構的有狀態應用,雖然可以將這些應用打包成容器鏡像,但簡單地重新打包并不能充分發揮容器平臺的彈性優勢,需要同時管理物理機、虛擬機和容器環境,這會增加運維管理的復雜性。而創新型應用,如一些面向互聯網、物聯網的新業務,適于優先部署到容器平臺。
●新技術帶來的學習成本與選擇成本較高。相對于虛擬化技術,容器平臺的門檻更高,需要掌握大量的新知識、新技能。容器生態環境中充斥著大量的開源組件,這些開源組件功能良莠不齊,發展路線與前景各有不同,路線選擇錯誤可能導致不斷變換跑道的麻煩。如果全面擁抱容器開源體系,企業需要投入大量人力跟蹤前沿技術發展方向,解決開源組件的未知缺陷。
●如何保障容器平臺的可靠性與安全性。要在生產環境中采用容器技術,必須有一套經過驗證的、成熟的技術平臺。相對于虛擬化,以容器技術為核心的應用平臺還處在發展階段,相關的工具和解決方案有待完善,原有的管理方法可能不適用于容器平臺,確保容器平臺安全可靠地運行,是一項不可忽視的任務。
●如何構建適應容器應用運行的運維體系。容器化改造之后,一臺宿主機上運行的容器可以成百上千,如何對這些容器的故障進行維護,需要對原有的運維流程、團隊與技術工具進行更新升級以適應新的業務情況。現在主流的容器技術廠商可以提供包括K8S、多資源池管理、容器網絡管理和容器資源自動化運維的整體解決方案,可以幫助我們快速建設容器云并提供相關的容器運維知識轉移,保障運營生產的安全和穩定。
在計劃建設容器云的時候,中國電信選擇建設一個支撐容器應用部署和運維的容器云。該容器云可以支持微服務化的應用和各種云原生應用(如圖2所示)。

圖2 容器云平臺總體架構
首先確定K8S技術平臺的選型。將容器平臺定位于新應用的運行平臺,幫助解決傳統上應用發布慢、彈性差、資源利用率低三個問題,更加適應新興云原生類應用微服務化、分布式的開發與部署架構。運營商等可以先試點后推廣,積累云原生類應用容器平臺建設與運行經驗,再逐步推進舊應用改造,遷移到容器平臺上來。
選擇主流的支持K8S容器技術方案,在麓谷與荷花園兩個數據中心之上構建跨數據中心多活的K8S容器平臺。跨數據中心的架構讓應用在兩個數據中心容器中平衡部署,利用容器調度平臺讓應用節點在兩個數據中心平滑移動,同時保證了高可用及容災場景。
在容器網絡與安全方面,可以采用SDN的技術方案,替代開源的容器網絡組件,提高全網容器的安全隔離及網絡流量可視化的能力。
利用可視化自動化與智能化手段,實現新舊應用、虛擬機與容器、傳統部署架構與微服務架構等混合異構環境統一監控統一運維。
將容器平臺能力包裝成自動化服務,與現有IaaS服務平臺及ITIL運維平臺整合。形成完整的基礎架構即代碼(Infrastructure as a code)能力,為DevOps的推進奠定堅實的基礎。
容器平臺建設初步實現了敏態穩態雙模業務一體化運維,有利地支撐了開發運維一體化進程。后續我們將進一步圍繞容器平臺推動跨平臺一體化融合、智能化運維提升以及新技術業務賦能等工作,加快網絡智能化、業務生態化、運營智慧化步伐。