作者:vivo 網際網路容器團隊- Pan Liangbiao
本文根據潘良彪老師在「2022 vivo開發者大會"現場演講內容整理而成。公眾號回覆【2022 VDC】獲取網際網路技術分會場議題相關資料。
2018年起,vivo以容器作為基礎底座,打造了一站式雲原生機器學習平臺。向上支撐了演演算法中臺,為演演算法工程師提供資料管理、模型訓練、模型管理、模型部署等能力,為廣告、推薦和搜尋等業務賦能,成功為演演算法實現了降本、提效,讓雲原生和容器價值初露鋒芒。基於機器學習平臺的試點成果,經過演演算法場景的試點實踐和價值分析,對內部戰略做了升級。確定基於雲原生理念去構建行業一流的容器生態,實現規模化的降本提效目標。
本文會詳細介紹vivo在容器叢集高可用建設中的具體實踐,包括在容器叢集高可用建設、容器叢集自動化運維、容器平臺架構升級、容器平臺能力增強、容器生態打通等層面的打磨和建設。目前,vivo容器產品能力矩陣逐漸趨於完善,並將圍繞全面容器化、擁抱雲原生和在離線混部三個方向繼續發力。
雲原生和容器,是當下比較火熱的話題,其中 Kubernetes更是成為容器編排領域的事實標準。
國內外各企業在內部落地雲原生和容器的過程中,基於自己的業務場景和發展階段,會遇到各種問題和挑戰,本文是vivo在雲原生容器領域的探索和落地實踐,希望能對讀者有一些借鑑和幫助。
首先是容器技術和雲原生理念的介紹。
容器技術不是一個新技術,從1979年unix系統的chroot誕生到現在,歷經40多年的發展,共經過了四個階段,分別是:技術萌芽期、技術迸發期、商用探索期和商用拓展期。
每個階段,解決了不同的技術問題,分別是:環境隔離、軟體分發和編排、商用服務形態、規模化和場景拓展。
相比於虛擬機器器,容器技術少了一層虛擬作業系統的損耗,因此它比虛擬機器器具有更好的效能表現。另外容器在系統資源、啟動時間、叢集規模、高可用策略等方面,也有非常明顯的優勢。
2020年CNCF中國雲原生調查報告顯示,接受調查的中國企業,有68%已經在生產環境使用容器技術。
從行業發展看,不管是雲廠商還是各大科技公司,都在基於容器技術構建自己的新一代基礎架構,推動企業數位創新。容器技術已經得到廣泛的認可和普及。
容器技術催生了雲原生思潮,雲原生生態推動了容器技術的發展。那麼雲原生的準確定義和含義是什麼呢?
雲原生其實沒有標準定義,如果非要給他一個定義,行業有兩種觀點:
一個定義來自Pivotal 這家公司,它是雲原生應用的提出者,是雲原生的先驅者、探路者。Pivotal最新的官網對雲原生的介紹有四個要點,分別是:DevOps、持續交付、微服務和容器。
另外一個定義來自CNCF,CNCF建立於2015年,它是一個開源組織,其存在的目的,是支援開源社群開發關鍵的雲原生元件,包括 Kubernetes、Prometheus監控等。
它把雲原生分為3種核心技術和2個核心理念:
3種核心技術:分別是容器、微服務、服務網格。
2個核心理念:分別指不可變基礎設施和宣告式API。
但是,不管是那一種定義,容器都是其基礎,是雲原生落地的核心技術手段。
任何技術和理念,都必須有實際的業務價值。從效率、成本、質量三個維度,來分析雲原生和容器的技術價值,可總結如下:
效率:可實現持續交付部署快、映象封裝可移植、彈性計算秒擴容。
成本:可實現按需分配不浪費、統一排程高填充、混合部署少碎片。
質量:可實現執行狀態可觀測、故障發生可自愈、叢集管理可運維。
新技術的引入帶來新的價值,也必然會引入新的問題,接下來介紹vivo在容器技術上的探索和實踐。
在vivo的演演算法場景中,機器學習平臺負責演演算法模型迭代,是網際網路演演算法業務中核心的一環,早期的平臺基於傳統的架構,在效率、成本、效能和體驗上均有一定的不足,無法滿足演演算法業務快速增長的訴求。基於此,我們首先在演演算法場景進行容器的試點探索。從2018年開始,我們以容器作為基礎底座,打造了vivo的一站式雲原生機器學習平臺,向上支撐了公司的演演算法中臺,為演演算法工程師提供資料管理、模型訓練、模型管理、模型部署等能力,為廣告、推薦和搜尋等業務賦能。
vivo的雲原生機器學習平臺具備如下5大優勢:
場景全:業務端到端,覆蓋推薦、廣告、搜尋多場景。
體驗好:排隊時間短,使用者體驗優,任務P99排隊時長小於45分鐘。
成本低:排程能力好,資源利用率高,CPU利用率均值大於45%。
效率高:網路規模大,訓練跑得快,訓練速度8.3億樣本每小時。
結果優:演演算法迭代穩定,訓練成功率高,訓練成功率大於95%。
vivo雲原生機器學習平臺,成功為演演算法實現了降本、提效,讓雲原生和容器價值初露鋒芒。
基於前面機器學習平臺的試點成果,我們深入分析和挖掘容器和雲原生的價值,結合vivo的情況,我們發現容器和雲原生是企業大規模降本和提效的最佳方案。
1)在降本方面
當前我們內部伺服器資源的利用率較低,以CPU利用率為例,當前vivo伺服器整體利用率均值在25%左右,相比行業一流水平的40%~50%,還有不少的提升空間。
容器在資源隔離、統一排程和在離線混部等方面的優勢,均是提升資源ROI的有效技術手段。
2)在提效方面
當前我們在中介軟體版本升級、機器遷移、測試環境管理、突發流量應對和全球化部署的環境一致性等方面均有業務痛點。
容器的快速交付、彈性自運維、微服務、服務網格等雲原生技術和架構,則是提效的有力措施。
經過演演算法場景的試點實踐和價值分析,我們對內部戰略做了升級, 確定基於雲原生理念去構建行業一流的容器生態,實現規模化的降本提效目標。
為了更好匹配戰略落地,擁抱雲原生,我們還對內部技術架構重新規劃和升級,新增引入統一流量接入平臺、容器運維管理平臺、統一名字服務、容器監控等平臺和能力,支撐容器生態在公司內部的全面建設和推廣。
要提供大規模的生產可用的容器服務,容器叢集的可用性首先會面臨諸多挑戰。下面介紹vivo容器化,在生產叢集建設過程中遇到的4個比較大的挑戰。
叢集規模快速增長:vivo叢集伺服器規模上萬個宿主機節點,管理的叢集數十個,單叢集規模2千+,範例數10萬+,對叢集效能和機器管理挑戰極大。
叢集運維、運營和標準化:由於早期叢集管理不規範,黑畫面化操作和人為誤操作等問題層出不窮,叢集運維人員每天因為各種救火忙得焦頭爛額。
叢集容器監控架構和可觀測性:隨著叢集規模快速增長,容器的監控元件面臨極大壓力,對容器監控的採集、儲存和展示,提出更高的要求。
線上K8s版本升級迭代:面對Kubernetes版本的快速迭代,需要實現給飛行的飛機換引擎。
針對挑戰,我們的應對方案分別是:高可用、可觀測、標準化和自動化。其中容器監控和k8s版本無失真升級的挑戰,vivo公眾號有詳細技術方案的介紹,本文側重介紹叢集高可用和運維自動化兩部分。
除了叢集穩定性的挑戰,平臺也將面臨各種挑戰,由於容器平臺和周邊生態能力不完善,對業務存在較高的適配和遷移成本。總結起來我們遇到的挑戰主要有4點:
容器IP的變化:k8s早期把業務都設計成無狀態的,其原生實現是每次釋出容器的IP都會變化,這對部分依賴固定IP的傳統業務不太友好,業務改造成本較高。
周邊生態的適配和相容:包括髮布系統、中介軟體微服務平臺、內部開發框架和流量接入層等
使用者使用習慣:vivo有比較成熟的釋出平臺,使用者習慣按機房釋出,習慣資源分配和釋出分開操作。
價值輸出:運維研發效率的提升不好量化,容器成本優勢短期不好衡量。
上面這些挑戰,推動我們要進行容器周邊生態打通,同時通過增強容器平臺產品能力,來適配各種業務場景,降低使用者的遷移成本。
接下來,介紹vivo在容器叢集高可用建設中的最佳實踐,我們是從故障預防、故障發現和故障恢復,3個維度來構建容器叢集可用性保障體系的。
1、在故障預防上,我們分別從流程工具、容災能力和基礎架構3個方面來進行建設:
流程工具:主要包含故障預案和故障演練,以及通過建設運維管理平臺,來實現運維標準化、白屏化和自動化。
容災能力:主要是構建業務跨故障域容災能力,保障叢集故障時,服務和業務流量能跨叢集排程和快速一鍵遷移等。
基礎架構:主要是通過遮蔽使用者對底層叢集的感知,一個機房多套叢集,一個業務同時部署在多個叢集上,避免單叢集故障對業務造成影響。
2、在故障發現上,我們主要是通過,自建的監控大盤、日常叢集巡檢、核心元件監控、叢集外撥測等措施,對故障及時發現和處理,降低對業務影響。
3、在故障恢復上,主要是基於前面的故障預案,快速恢復,及時止損,並做好故障的覆盤,不斷改進我們的故障預防和發現機制,沉澱寶貴經驗。
另外,叢集的可觀測性是可用性保障的一個重要依據,我們通過建設自己的SLO面板,對叢集狀態實時地進行監控,只有對運營狀況瞭如指掌,才能做到穩如泰山,沉著應對一切變化。
除了容器叢集自身穩定性建設,在運維自動化方面,我們建設了容器多叢集管理平臺,實現叢集設定標準化,核心運維場景白屏化,來提升運維效率。
我們的容器叢集管理平臺,是以雲原生的方式來管理雲原生,簡單來說,就是基於k8s的operator機制,實現k8s on k8s。
當前,我們的平臺已經能夠實現多叢集的統一納管,叢集部署也是自動化、標準化的,還實現了底層IAAS層打通,叢集節點能全流程化、視覺化的一鍵擴縮容,而叢集巡檢功能,可以幫助我們及時發現叢集的問題和隱患。
通過平臺進行日常運維和操作,不僅能提升效率,也具備審計能力,有操作和變更紀錄檔可追溯,便於問題定位。
為適應業務容器化在內部的快速普及和推廣,我們升級了vivo的容器平臺架構。
新的架構分為4層,容器+k8s則作為基礎的統一底座,向下對接公司IAAS層的基礎設施,向上提供容器產品和平臺能力,並通過開放API供上層呼叫和客製化自己的上層邏輯。
API之上是容器支援的各種服務型別,包括線上服務、中介軟體服務、巨量資料計算、演演算法訓練、實時計算等,最上面是為vivo網際網路各個業務進行賦能。
基於這套容器平臺架構,業務能實現資源隔離部署、快速交付和按需使用,同時也具備更好的彈性伸縮能力。對平臺,我們可以統一資源的排程,實現資源的分時複用、在離線混部等,來提升資源的利用率。
vivo內部容器化場景比較多樣化,為了讓業務能夠安心、低成本的接入和使用容器的能力,在推廣過程中,我們基於開源+自研做了容器的適配和原生能力的增強。
下面對6個產品能力增強進行簡單的分享:
雲原生工作負載增強:基於開源的openkruise,對原生deployment、statefulset等workload進行了增強,實現諸如原地升級、釋出暫停、流式和設定優先順序等擴充套件能力。
服務無失真釋出增強:基於內部框架和平臺自主研發,實現HTTP、RPC等協定框架的流量無失真釋出。
容器映象安全:基於開源的Harbor客製化開發,實現容器映象安全掃描和卡控能力。
容器映象加速:基於開源dragonfly2客製化擴充套件,讓大規模叢集映象的分發效能提升80%以上。
IP固定能力增強:基於有狀態服務和CNI進行自研,支撐黑白名單、有狀態服務場景訴求,降低業務接入改造成本。
多叢集管理能力增強:基於開源Karmada進行功能優化和擴充套件,提升業務容災能力,支撐單叢集橫向擴充套件能力。
當然,在充分享受開源紅利的同時,我們也持續地參與開源協同,回饋社群。在使用和自研的過程中,我們也把自己生產實踐過程中發現的問題和積累的經驗提交到社群,例如Dragonfly2、Karmada等。
除了平臺能力的增強,容器平臺作為一個PaaS平臺,需要和周邊的生態打通,才能讓業務更好的遷移和使用,其中最重要的就是釋出系統的打通,也就是CICD平臺。
幾乎每個科技公司都會有自己的CICD,它是一個DevOps自動化的工具,可進行業務構建和編排部署的流水線。
vivo的CICD平臺底層架構是基於JenKins+Spinnaker實現的,整個容器構建和部署流程如下:
首先,使用者在CICD平臺上建立好釋出過程的流水線設定並儲存。
其次,CI環節可實現和內部GitLab對接,拉取程式碼,基於jenkins進行程式碼編譯和映象構建,構建好的映象經過安全掃描後,推播到開發環境的映象倉庫。
最後,在CD環節,CICD平臺會呼叫容器平臺提供的API,進行開發、測試、預發和生產環境的部署操作。
接下來,介紹容器生態裡,最重要的業務流量接入層的打通。
早期,vivo內部是基於Nginx,來實現的南北流量和東西流量的轉發。在虛擬機器器和物理機場景能比較好的支撐,隨著容器在內部全面的推廣,傳統的Nginx架構已不能適配。
主要體現在,容器場景業務範例數量,相比原來虛擬機器器和物理機成倍數增長,容器釋出過程IP的頻發變化和狀態同步,都會對Nginx叢集造成非常大的壓力,在業務請求量非常大的情況下,接入層的組態檔重新整理和載入,會造成業務的抖動,這是我們不能接受的。
基於這個背景,我們基於APISIX構建了雲原生流量接入層,來適應全面容器化的需求。經過一年多的建設,當前我們的統一流量接入平臺已經能夠很好的支撐容器化的接入,同時具備更好的擴充套件能力。
經過多年的打磨和建設,vivo容器產品能力矩陣趨於完善,整個產品能力矩陣,分為4層:
基礎服務層:包含3類服務,映象管理、叢集運維和叢集監控。
能力層:包含6個核心能力,分別是叢集排程、CAAS-API、容器設定、容器業務監控告警、容器紀錄檔和平臺擴充套件能力。
平臺層:包含2大平臺能力,分別是CI和CD。
業務層:當前覆蓋了vivo網際網路所有業務場景。
接下來,會具體介紹下vivo容器推廣情況。
目前容器在vivo內部主要覆蓋4大場景,分別是:網際網路線上業務、演演算法線上、巨量資料計算和AI演演算法訓練等。接下來,會從接入規模和價值來簡單介紹。
網際網路線上服務:內部各個業務線均有大量服務執行在容器上,例如vivo商城、賬號、瀏覽器、快應用、天氣等,已經接入服務600+。
演演算法線上服務:當前接入500+服務,3000+伺服器,涉及推廣搜的各個業務線。
巨量資料計算服務:包含離線計算如Spark,實時計算如Flink、Olap等場景,當前接入叢集20+。
AI演演算法訓練:主要是提供GPU、CPU異構計算,業務場景如Tensorflow、mpi等場景,算力十幾萬核,以及若干GPU卡。
業務容器化後,給業務在降本提效上帶來的效果非常明顯,包括但不限於擴縮容效率、彈性伸縮能力、業務自愈能力、資源成本等方面。
基於我們的探索和實踐,可總結為技術價值、推廣策略、平臺建設和雲原生突破4個維度的思考。
找價值:關注新技術,但不執著於技術本身,必須結合業務痛點和價值。
定策略:自下而上小範圍試點探索,產生實際的業務價值,影響自上而下的戰略調整。
建平臺:當已經有比較完善的平臺和能力時,要找到容器的切入點,進行融合共建,切忌推到重來;對於需要從0到1建設的新能力,需要果斷的孵化創新。
求突破:在業務容器化過程中,為了快速容器化,我們做了許多的相容和適配。為了更好的降本提效,未來,我們希望引導使用者,實現從使用雲原生,到用好雲原生的突破。
總的來說,技術服務於業務,企業應基於自身現狀,尋找合適的解決方案,併為業務創造價值。
從過去看未來發展,回顧過去10年曆程,vivo基礎架構的發展經歷了3個階段:
階段一:傳統研發運維階段,從2011到2018年,從早期的do分離研發模式,到基於openstack+kvm的虛擬化方案落地。
階段二:應用架構網際網路化階段,從2018到2020年,容器化開始在vivo內部興起。
階段三:雲原生基礎架構演進階段,從2021年到現在,雲原生和容器將會在vivo內部有更多場景的應用和推廣,如在離線混部等。
迴歸事物本源思考,做正確的事,並把事情做正確。不盲從,有定力,基於價值,客觀看待新技術發展,大膽假設、小心驗證、實踐出真知。
vivo雲原生的未來,將會朝著3個方向發展,分別是全面容器化、擁抱雲原生和在離線混部。
我們的願景是:一次開發到處執行,通過自動運維實現極致效率和成本最優!
對開發人員:我們希望大家成為那隻遨遊海上的藍色鯨魚,馱著我們的業務應用,一次構建到處分發,靈活排程和運維。
對管理者:我們希望追求效率的同時,能夠實現成本最優。