vivo 雲原生容器探索和落地實踐

2022-12-19 12:00:41

作者:vivo 網際網路容器團隊- Pan Liangbiao

本文根據潘良彪老師在「2022 vivo開發者大會"現場演講內容整理而成。公眾號回覆【2022 VDC】獲取網際網路技術分會場議題相關資料。

2018年起,vivo以容器作為基礎底座,打造了一站式雲原生機器學習平臺。向上支撐了演演算法中臺,為演演算法工程師提供資料管理、模型訓練、模型管理、模型部署等能力,為廣告、推薦和搜尋等業務賦能,成功為演演算法實現了降本、提效,讓雲原生和容器價值初露鋒芒。基於機器學習平臺的試點成果,經過演演算法場景的試點實踐和價值分析,對內部戰略做了升級。確定基於雲原生理念去構建行業一流的容器生態,實現規模化的降本提效目標。

本文會詳細介紹vivo在容器叢集高可用建設中的具體實踐,包括在容器叢集高可用建設、容器叢集自動化運維、容器平臺架構升級、容器平臺能力增強、容器生態打通等層面的打磨和建設。目前,vivo容器產品能力矩陣逐漸趨於完善,並將圍繞全面容器化、擁抱雲原生和在離線混部三個方向繼續發力。

雲原生和容器,是當下比較火熱的話題,其中 Kubernetes更是成為容器編排領域的事實標準。

國內外各企業在內部落地雲原生和容器的過程中,基於自己的業務場景和發展階段,會遇到各種問題和挑戰,本文是vivo在雲原生容器領域的探索和落地實踐,希望能對讀者有一些借鑑和幫助。

一、容器技術和雲原生理念

首先是容器技術和雲原生理念的介紹。

1.1 容器技術簡介

圖片

容器技術不是一個新技術,從1979年unix系統的chroot誕生到現在,歷經40多年的發展,共經過了四個階段,分別是:技術萌芽期、技術迸發期、商用探索期和商用拓展期

每個階段,解決了不同的技術問題,分別是:環境隔離、軟體分發和編排、商用服務形態、規模化和場景拓展。

相比於虛擬機器器,容器技術少了一層虛擬作業系統的損耗,因此它比虛擬機器器具有更好的效能表現。另外容器在系統資源、啟動時間、叢集規模、高可用策略等方面,也有非常明顯的優勢。

2020年CNCF中國雲原生調查報告顯示,接受調查的中國企業,有68%已經在生產環境使用容器技術。

從行業發展看,不管是雲廠商還是各大科技公司,都在基於容器技術構建自己的新一代基礎架構,推動企業數位創新。容器技術已經得到廣泛的認可和普及。

1.2 雲原生理念介紹

圖片

 容器技術催生了雲原生思潮,雲原生生態推動了容器技術的發展。那麼雲原生的準確定義和含義是什麼呢?

雲原生其實沒有標準定義,如果非要給他一個定義,行業有兩種觀點:

  • 一個定義來自Pivotal 這家公司,它是雲原生應用的提出者,是雲原生的先驅者、探路者。Pivotal最新的官網對雲原生的介紹有四個要點,分別是:DevOps、持續交付、微服務和容器

  • 另外一個定義來自CNCF,CNCF建立於2015年,它是一個開源組織,其存在的目的,是支援開源社群開發關鍵的雲原生元件,包括 Kubernetes、Prometheus監控等。

它把雲原生分為3種核心技術2個核心理念

  • 3種核心技術:分別是容器、微服務、服務網格

  • 2個核心理念:分別指不可變基礎設施和宣告式API

 但是,不管是那一種定義,容器都是其基礎,是雲原生落地的核心技術手段。

1.3 雲原生價值分析

圖片

任何技術和理念,都必須有實際的業務價值。從效率、成本、質量三個維度,來分析雲原生和容器的技術價值,可總結如下:

  • 效率:可實現持續交付部署快、映象封裝可移植、彈性計算秒擴容。

  • 成本:可實現按需分配不浪費、統一排程高填充、混合部署少碎片。

  • 質量:可實現執行狀態可觀測、故障發生可自愈、叢集管理可運維。

二、vivo 容器技術探索與實踐

新技術的引入帶來新的價值,也必然會引入新的問題,接下來介紹vivo在容器技術上的探索和實踐。

2.1 試點探索

圖片

在vivo的演演算法場景中,機器學習平臺負責演演算法模型迭代,是網際網路演演算法業務中核心的一環,早期的平臺基於傳統的架構,在效率、成本、效能和體驗上均有一定的不足,無法滿足演演算法業務快速增長的訴求。基於此,我們首先在演演算法場景進行容器的試點探索。從2018年開始,我們以容器作為基礎底座,打造了vivo的一站式雲原生機器學習平臺,向上支撐了公司的演演算法中臺,為演演算法工程師提供資料管理、模型訓練、模型管理、模型部署等能力,為廣告、推薦和搜尋等業務賦能。

vivo的雲原生機器學習平臺具備如下5大優勢:

  • 場景全:業務端到端,覆蓋推薦、廣告、搜尋多場景。

  • 體驗好:排隊時間短,使用者體驗優,任務P99排隊時長小於45分鐘。

  • 成本低:排程能力好,資源利用率高,CPU利用率均值大於45%。

  • 效率高:網路規模大,訓練跑得快,訓練速度8.3億樣本每小時。

  • 結果優:演演算法迭代穩定,訓練成功率高,訓練成功率大於95%。

vivo雲原生機器學習平臺,成功為演演算法實現了降本、提效,讓雲原生和容器價值初露鋒芒。

2.2 價值挖掘

圖片

基於前面機器學習平臺的試點成果,我們深入分析和挖掘容器和雲原生的價值,結合vivo的情況,我們發現容器和雲原生是企業大規模降本和提效的最佳方案。

1)在降本方面

當前我們內部伺服器資源的利用率較低,以CPU利用率為例,當前vivo伺服器整體利用率均值在25%左右,相比行業一流水平的40%~50%,還有不少的提升空間。

容器在資源隔離、統一排程和在離線混部等方面的優勢,均是提升資源ROI的有效技術手段。

2)在提效方面

當前我們在中介軟體版本升級、機器遷移、測試環境管理、突發流量應對和全球化部署的環境一致性等方面均有業務痛點。

容器的快速交付、彈性自運維、微服務、服務網格等雲原生技術和架構,則是提效的有力措施。

2.3 戰略升級

圖片

經過演演算法場景的試點實踐和價值分析,我們對內部戰略做了升級, 確定基於雲原生理念去構建行業一流的容器生態,實現規模化的降本提效目標。

為了更好匹配戰略落地,擁抱雲原生,我們還對內部技術架構重新規劃和升級,新增引入統一流量接入平臺、容器運維管理平臺、統一名字服務、容器監控等平臺和能力,支撐容器生態在公司內部的全面建設和推廣。

2.4 面臨挑戰

2.4.1 叢集挑戰

圖片

 要提供大規模的生產可用的容器服務,容器叢集的可用性首先會面臨諸多挑戰。下面介紹vivo容器化,在生產叢集建設過程中遇到的4個比較大的挑戰。

  • 叢集規模快速增長:vivo叢集伺服器規模上萬個宿主機節點,管理的叢集數十個,單叢集規模2千+,範例數10萬+,對叢集效能和機器管理挑戰極大。

  • 叢集運維、運營和標準化:由於早期叢集管理不規範,黑畫面化操作和人為誤操作等問題層出不窮,叢集運維人員每天因為各種救火忙得焦頭爛額。

  • 叢集容器監控架構和可觀測性:隨著叢集規模快速增長,容器的監控元件面臨極大壓力,對容器監控的採集、儲存和展示,提出更高的要求。

  • 線上K8s版本升級迭代:面對Kubernetes版本的快速迭代,需要實現給飛行的飛機換引擎。 

針對挑戰,我們的應對方案分別是:高可用、可觀測、標準化和自動化。其中容器監控和k8s版本無失真升級的挑戰,vivo公眾號有詳細技術方案的介紹,本文側重介紹叢集高可用和運維自動化兩部分。

2.4.2 平臺挑戰

圖片

除了叢集穩定性的挑戰,平臺也將面臨各種挑戰,由於容器平臺和周邊生態能力不完善,對業務存在較高的適配和遷移成本。總結起來我們遇到的挑戰主要有4點:

  • 容器IP的變化:k8s早期把業務都設計成無狀態的,其原生實現是每次釋出容器的IP都會變化,這對部分依賴固定IP的傳統業務不太友好,業務改造成本較高。

  • 周邊生態的適配和相容:包括髮布系統、中介軟體微服務平臺、內部開發框架和流量接入層等

  • 使用者使用習慣:vivo有比較成熟的釋出平臺,使用者習慣按機房釋出,習慣資源分配和釋出分開操作。

  • 價值輸出:運維研發效率的提升不好量化,容器成本優勢短期不好衡量。

上面這些挑戰,推動我們要進行容器周邊生態打通,同時通過增強容器平臺產品能力,來適配各種業務場景,降低使用者的遷移成本。

2.5 最佳實踐

2.5.1 容器叢集高可用建設 

接下來,介紹vivo在容器叢集高可用建設中的最佳實踐,我們是從故障預防、故障發現和故障恢復,3個維度來構建容器叢集可用性保障體系的。

圖片

1、在故障預防上,我們分別從流程工具、容災能力和基礎架構3個方面來進行建設:

  • 流程工具:主要包含故障預案和故障演練,以及通過建設運維管理平臺,來實現運維標準化、白屏化和自動化。

  • 容災能力:主要是構建業務跨故障域容災能力,保障叢集故障時,服務和業務流量能跨叢集排程和快速一鍵遷移等。

  • 基礎架構:主要是通過遮蔽使用者對底層叢集的感知,一個機房多套叢集,一個業務同時部署在多個叢集上,避免單叢集故障對業務造成影響。

2、在故障發現上,我們主要是通過,自建的監控大盤、日常叢集巡檢、核心元件監控、叢集外撥測等措施,對故障及時發現和處理,降低對業務影響。

3、在故障恢復上,主要是基於前面的故障預案,快速恢復,及時止損,並做好故障的覆盤,不斷改進我們的故障預防和發現機制,沉澱寶貴經驗。

另外,叢集的可觀測性是可用性保障的一個重要依據,我們通過建設自己的SLO面板,對叢集狀態實時地進行監控,只有對運營狀況瞭如指掌,才能做到穩如泰山,沉著應對一切變化。

2.5.2 容器叢集自動化運維

除了容器叢集自身穩定性建設,在運維自動化方面,我們建設了容器多叢集管理平臺,實現叢集設定標準化,核心運維場景白屏化,來提升運維效率。

圖片

我們的容器叢集管理平臺,是以雲原生的方式來管理雲原生,簡單來說,就是基於k8s的operator機制,實現k8s on k8s。 

當前,我們的平臺已經能夠實現多叢集的統一納管,叢集部署也是自動化、標準化的,還實現了底層IAAS層打通,叢集節點能全流程化、視覺化的一鍵擴縮容,而叢集巡檢功能,可以幫助我們及時發現叢集的問題和隱患。 

通過平臺進行日常運維和操作,不僅能提升效率,也具備審計能力,有操作和變更紀錄檔可追溯,便於問題定位。

2.5.3 容器平臺架構升級

為適應業務容器化在內部的快速普及和推廣,我們升級了vivo的容器平臺架構。

圖片

新的架構分為4層,容器+k8s則作為基礎的統一底座,向下對接公司IAAS層的基礎設施,向上提供容器產品和平臺能力,並通過開放API供上層呼叫和客製化自己的上層邏輯。

API之上是容器支援的各種服務型別,包括線上服務、中介軟體服務、巨量資料計算、演演算法訓練、實時計算等,最上面是為vivo網際網路各個業務進行賦能。

基於這套容器平臺架構,業務能實現資源隔離部署、快速交付和按需使用,同時也具備更好的彈性伸縮能力。對平臺,我們可以統一資源的排程,實現資源的分時複用、在離線混部等,來提升資源的利用率。

2.5.4 容器平臺能力增強

vivo內部容器化場景比較多樣化,為了讓業務能夠安心、低成本的接入和使用容器的能力,在推廣過程中,我們基於開源+自研做了容器的適配和原生能力的增強。

圖片

下面對6個產品能力增強進行簡單的分享:

  • 雲原生工作負載增強:基於開源的openkruise,對原生deployment、statefulset等workload進行了增強,實現諸如原地升級、釋出暫停、流式和設定優先順序等擴充套件能力。

  • 服務無失真釋出增強:基於內部框架和平臺自主研發,實現HTTP、RPC等協定框架的流量無失真釋出。

  • 容器映象安全:基於開源的Harbor客製化開發,實現容器映象安全掃描和卡控能力。

  • 容器映象加速:基於開源dragonfly2客製化擴充套件,讓大規模叢集映象的分發效能提升80%以上。

  • IP固定能力增強:基於有狀態服務和CNI進行自研,支撐黑白名單、有狀態服務場景訴求,降低業務接入改造成本。

  • 多叢集管理能力增強:基於開源Karmada進行功能優化和擴充套件,提升業務容災能力,支撐單叢集橫向擴充套件能力。

當然,在充分享受開源紅利的同時,我們也持續地參與開源協同,回饋社群。在使用和自研的過程中,我們也把自己生產實踐過程中發現的問題和積累的經驗提交到社群,例如Dragonfly2、Karmada等。

2.5.5 容器CICD一體化

除了平臺能力的增強,容器平臺作為一個PaaS平臺,需要和周邊的生態打通,才能讓業務更好的遷移和使用,其中最重要的就是釋出系統的打通,也就是CICD平臺。

幾乎每個科技公司都會有自己的CICD,它是一個DevOps自動化的工具,可進行業務構建和編排部署的流水線。

圖片

vivo的CICD平臺底層架構是基於JenKins+Spinnaker實現的,整個容器構建和部署流程如下:

  • 首先,使用者在CICD平臺上建立好釋出過程的流水線設定並儲存。

  • 其次,CI環節可實現和內部GitLab對接,拉取程式碼,基於jenkins進行程式碼編譯和映象構建,構建好的映象經過安全掃描後,推播到開發環境的映象倉庫。

  • 最後,在CD環節,CICD平臺會呼叫容器平臺提供的API,進行開發、測試、預發和生產環境的部署操作。

2.5.6 統一流量接入

接下來,介紹容器生態裡,最重要的業務流量接入層的打通。

圖片

早期,vivo內部是基於Nginx,來實現的南北流量和東西流量的轉發。在虛擬機器器和物理機場景能比較好的支撐,隨著容器在內部全面的推廣,傳統的Nginx架構已不能適配。

主要體現在,容器場景業務範例數量,相比原來虛擬機器器和物理機成倍數增長,容器釋出過程IP的頻發變化和狀態同步,都會對Nginx叢集造成非常大的壓力,在業務請求量非常大的情況下,接入層的組態檔重新整理和載入,會造成業務的抖動,這是我們不能接受的。

基於這個背景,我們基於APISIX構建了雲原生流量接入層,來適應全面容器化的需求。經過一年多的建設,當前我們的統一流量接入平臺已經能夠很好的支撐容器化的接入,同時具備更好的擴充套件能力。

2.6 實踐成果

2.6.1 產品能力矩陣完善

圖片

經過多年的打磨和建設,vivo容器產品能力矩陣趨於完善,整個產品能力矩陣,分為4層:

  • 基礎服務層:包含3類服務,映象管理、叢集運維和叢集監控。

  • 能力層:包含6個核心能力,分別是叢集排程、CAAS-API、容器設定、容器業務監控告警、容器紀錄檔和平臺擴充套件能力。

  • 平臺層:包含2大平臺能力,分別是CI和CD。

  • 業務層:當前覆蓋了vivo網際網路所有業務場景。

2.6.2 業務接入成果凸顯

接下來,會具體介紹下vivo容器推廣情況。

圖片

目前容器在vivo內部主要覆蓋4大場景,分別是:網際網路線上業務演演算法線上巨量資料計算AI演演算法訓練等。接下來,會從接入規模和價值來簡單介紹。

  • 網際網路線上服務:內部各個業務線均有大量服務執行在容器上,例如vivo商城、賬號、瀏覽器、快應用、天氣等,已經接入服務600+。

  • 演演算法線上服務:當前接入500+服務,3000+伺服器,涉及推廣搜的各個業務線。

  • 巨量資料計算服務:包含離線計算如Spark,實時計算如Flink、Olap等場景,當前接入叢集20+。

  • AI演演算法訓練:主要是提供GPU、CPU異構計算,業務場景如Tensorflow、mpi等場景,算力十幾萬核,以及若干GPU卡。

業務容器化後,給業務在降本提效上帶來的效果非常明顯,包括但不限於擴縮容效率、彈性伸縮能力、業務自愈能力、資源成本等方面。

2.7 實踐總結

圖片

基於我們的探索和實踐,可總結為技術價值、推廣策略、平臺建設和雲原生突破4個維度的思考。

  • 找價值:關注新技術,但不執著於技術本身,必須結合業務痛點和價值。

  • 定策略:自下而上小範圍試點探索,產生實際的業務價值,影響自上而下的戰略調整。

  • 建平臺:當已經有比較完善的平臺和能力時,要找到容器的切入點,進行融合共建,切忌推到重來;對於需要從0到1建設的新能力,需要果斷的孵化創新。

  • 求突破:在業務容器化過程中,為了快速容器化,我們做了許多的相容和適配。為了更好的降本提效,未來,我們希望引導使用者,實現從使用雲原生,到用好雲原生的突破。

總的來說,技術服務於業務,企業應基於自身現狀,尋找合適的解決方案,併為業務創造價值。

三、vivo對雲原生的未來展望

3.1 vivo基礎架構發展

圖片

從過去看未來發展,回顧過去10年曆程,vivo基礎架構的發展經歷了3個階段:

  • 階段一:傳統研發運維階段,從2011到2018年,從早期的do分離研發模式,到基於openstack+kvm的虛擬化方案落地。

  • 階段二:應用架構網際網路化階段,從2018到2020年,容器化開始在vivo內部興起。

  • 階段三:雲原生基礎架構演進階段,從2021年到現在,雲原生和容器將會在vivo內部有更多場景的應用和推廣,如在離線混部等。

3.2 vivo雲原生未來展望

圖片

迴歸事物本源思考,做正確的事,並把事情做正確。不盲從,有定力,基於價值,客觀看待新技術發展,大膽假設、小心驗證、實踐出真知。

vivo雲原生的未來,將會朝著3個方向發展,分別是全面容器化、擁抱雲原生和在離線混部。

  • 我們的願景是:一次開發到處執行,通過自動運維實現極致效率和成本最優!

  • 對開發人員:我們希望大家成為那隻遨遊海上的藍色鯨魚,馱著我們的業務應用,一次構建到處分發,靈活排程和運維。

  • 對管理者:我們希望追求效率的同時,能夠實現成本最優。