網易雲深度剖析Kubernetes優化與實踐
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
10 月 15 日,聚焦 Kubernetes 中國行業應用與技術落地的首屆中國 Kubernetes 使用者大會(KEUC)在杭州成功舉辦。本次大會吸引了來自全球各地的技術精英齊聚一堂,共同探討、分享 Kubernetes 最前沿技術和成果,對於 Kubernetes從理論到落地推廣,並走向國際化有著極為深遠的意義。
大會的Keynote環節中,網易雲基礎設施部技術總監張曉龍帶來了題為“容器及其編排技術在網易公有云的應用”的演講。
網易從2012年就開始使用LXC工具部署內部業務,2014年研究容器並基於Docker部署面向網易內部產品的訊息推送服務,2015年開始研究容器編排並基於kubernetes實現網易自身的容器編排服務,2016年將公有云基礎設施服務(雲主機、雲網絡、雲硬碟)與已有容器及其編排服務深度整合並優化,併發佈網易雲容器服務(蜂巢容器雲),目前在研發面向高效能場景的公有云裸金屬容器。
網易雲容器服務的目標是面向海量網際網路使用者提供按需使用、高效能、安全可靠的公有容器雲,為了完成這個目標,主要遇到了四大挑戰:
多租戶隔離:實現容器系統核心、網路的隔離,實現容器的安全可靠;
資源動態管理:容器的計算、網路、儲存資源按需動態分配與回收;
高可擴充套件:實現大規模容器下的高效編排管理;
高效能:提供高網路吞吐量、高IOPS的容器。
網易雲深度整合IaaS與容器及其編排服務
網易雲將基礎設施與容器編排服務做了深度整合與優化,實現了容器網路/核心的租戶隔離;基礎設施的效能優化可直接提升容器效能;實現容器執行資源按需動態管理;將資源管理和容器編排分層,降低容器叢集管理的複雜性。
此外,網易雲通過對社群原生叢集編排的一系列優化,實現了Kubernetes單叢集容器管理能力相比官方1.6版本6倍的效能提升,同時實現了多個Kubernetes叢集並行擴充套件的能力,使得我們可以面向海量網際網路業務提供大規模容器叢集的管理。
最後,網易雲結合計算、儲存、網路層面的基礎設施實現了容器的高效能:
計算層面:容器直接運行於裸機,消除KVM虛擬化/IO路徑的開銷,計算效能提升15%;
網路層面:基於DPDK/SR-IOV實現高速網路包轉發,網路包處理能力接近150W;
儲存層面:容器使用自研高效能分散式塊儲存後端,磁碟寫效能3W+ IOPS/300Mbps。
最後,張曉龍透露未來網易雲會在以下三個方面繼續深耕:研發GPU/FPGA 高效能容器,跟進開源社群最新版本並適配,加大參與社群力度並反饋社群。
在Kubernetes技術論壇中,網易雲首席解決方案架構師劉超分享了“網易雲如何基於大規模Kubernetes叢集支援高併發應用”。
網易雲首席解決方案架構師 劉超
首先,劉超以網易考拉海購為例,介紹了大規模雲原生應用的支撐痛點。考拉在拆分為微服務後,各個服務間的關聯關係是非常複雜的。為了支撐這個複雜的應用,會對Kubernetes叢集產生以下需求:首先,在入口需要有高效能負載均衡器承載外部大規模的流量,流量進來後需要高效能私有網路來支撐元件間的相互訪問;其次,要保證容器網路和虛擬機器網路互通,使得容器可以訪問PaaS平臺的服務:此外,還包括高可用、服務發現、統一的配置中心等需求。
劉超分別從架構、網路、負載均衡、服務發現等方面介紹了網易雲如何解決大規模雲原生應用的痛點,從而支撐考拉業務的。
網易雲容器服務平臺架構
上圖是網易雲容器服務平臺的架構,網易雲的容器服務部署在底層的IaaS平臺之上,需要動態依賴底層的計算資源來建立雲網絡、雲硬碟、Node節點等資源。通過網易雲自研Netease Controller元件,可以監聽事件事先準備好底層的硬體資源;
雲網絡方面,網易雲自研的CNI外掛部署在每個虛擬機器節點上,每當發現有Pod起來的時候,就會呼叫CNI外掛,從IaaS平臺上虛擬出一張網絡卡打到虛擬機器裡。
容器服務的網路模型
在IaaS平臺或虛擬機器中部署容器,通常會遇到二次虛擬的問題,即物理機到虛擬機器的一次虛擬和虛擬機器到容器的一次虛擬,對吞吐量會產生很大影響,如左圖所示。為了解決這個問題,網易雲將虛擬機器的網絡卡打到容器中(右圖),容器看到的網路和虛擬機器看到的網路是同一個二層網路,一方面的好處是隻有一層overlay,另一方面虛擬機器和容器之間可以相互訪問,使得虛擬機器和容器混合部署的應用可以無感知地遷移,並且容器也可以訪問虛擬機器上的PaaS服務。
負載均衡方面,網易雲也開發了一個Load Blancer Controller,要起一個負載均衡的時候,會呼叫Load Balancer Manager去建立一個虛擬的Load Balancer。我們的負載均衡包含2層,一層是物理的負載均衡,所有租戶共享;另外一層是虛擬機器中的HAProxy,負載均衡和虛擬機器或容器的連線通過OVS的二層網路就可以搞定。
Kubernetes預設使用用kube-proxy實現服務發現,考拉和雲音樂等大型應用更傾向於使用其做外部的服務發現,可以簡化配置;而內部的服務發現通常沿用容器化前的服務發現方案Dubbok,一方面因為Dubbok的功能更強大,另一方面避免底層平臺的繫結。
網易云為您提供容器服務,歡迎點選免費試用。
相關文章:
【推薦】 知物由學|未來安全隱患:AI的軟肋——故意欺騙神經網路