天天看點

一文了解vivo 雲原生容器探索和落地實踐

作者:存儲矩陣
作者:vivo 網際網路容器團隊- Pan Liangbiao

雲原生和容器,是當下比較火熱的話題,其中 Kubernetes更是成為容器編排領域的事實标準。國内外各企業在内部落地雲原生和容器的過程中,基于自己的業務場景和發展階段,會遇到各種問題和挑戰,本文是vivo在雲原生容器領域的探索和落地實踐,希望能對讀者有一些借鑒和幫助。

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

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

1.1 容器技術簡介

一文了解vivo 雲原生容器探索和落地實踐

容器技術不是一個新技術,從1979年unix系統的chroot誕生到現在,曆經40多年的發展,共經過了四個階段,分别是:技術萌芽期、技術迸發期、商用探索期和商用拓展期。每個階段,解決了不同的技術問題,分别是:環境隔離、軟體分發和編排、商用服務形态、規模化和場景拓展。相比于虛拟機,容器技術少了一層虛拟作業系統的損耗,是以它比虛拟機具有更好的性能表現。另外容器在系統資源、啟動時間、叢集規模、高可用政策等方面,也有非常明顯的優勢。2020年CNCF中國雲原生調查報告顯示,接受調查的中國企業,有68%已經在生産環境使用容器技術。從行業發展看,不管是雲廠商還是各大科技公司,都在基于容器技術建構自己的新一代基礎架構,推動企業數字創新。容器技術已經得到廣泛的認可和普及。

1.2 雲原生理念介紹

一文了解vivo 雲原生容器探索和落地實踐

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

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

  • 一個定義來自Pivotal 這家公司,它是雲原生應用的提出者,是雲原生的先驅者、探路者。Pivotal最新的官網對雲原生的介紹有四個要點,分别是:DevOps、持續傳遞、微服務和容器。
  • 另外一個定義來自CNCF,CNCF建立于2015年,它是一個開源組織,其存在的目的,是支援開源社群開發關鍵的雲原生元件,包括 Kubernetes、Prometheus監控等。

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

  • 3種核心技術:分别是容器、微服務、服務網格。
  • 2個核心理念:分别指不可變基礎設施和聲明式API。

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

1.3 雲原生價值分析

一文了解vivo 雲原生容器探索和落地實踐

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

  • 效率:可實作持續傳遞部署快、鏡像封裝可移植、彈性計算秒擴容。
  • 成本:可實作按需配置設定不浪費、統一排程高填充、混合部署少碎片。
  • 品質:可實作運作狀态可觀測、故障發生可自愈、叢集管理可運維。

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

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

2.1 試點探索

一文了解vivo 雲原生容器探索和落地實踐

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

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

  • 場景全:業務端到端,覆寫推薦、廣告、搜尋多場景。
  • 體驗好:排隊時間短,使用者體驗優,任務P99排隊時長小于45分鐘。
  • 成本低:排程能力好,資源使用率高,CPU使用率均值大于45%。
  • 效率高:網絡規模大,訓練跑得快,訓練速度8.3億樣本每小時。
  • 結果優:算法疊代穩定,訓練成功率高,訓練成功率大于95%。

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

2.2 價值挖掘

一文了解vivo 雲原生容器探索和落地實踐

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

1)在降本方面

目前我們内部伺服器資源的使用率較低,以CPU使用率為例,目前vivo伺服器整體使用率均值在25%左右,相比行業一流水準的40%~50%,還有不少的提升空間。容器在資源隔離、統一排程和在離線混部等方面的優勢,均是提升資源ROI的有效技術手段。

2)在提效方面

目前我們在中間件版本更新、機器遷移、測試環境管理、突發流量應對和全球化部署的環境一緻性等方面均有業務痛點。容器的快速傳遞、彈性自運維、微服務、服務網格等雲原生技術和架構,則是提效的有力措施。

2.3 戰略更新

一文了解vivo 雲原生容器探索和落地實踐

經過算法場景的試點實踐和價值分析,我們對内部戰略做了更新, 确定基于雲原生理念去建構行業一流的容器生态,實作規模化的降本提效目标。為了更好比對戰略落地,擁抱雲原生,我們還對内部技術架構重新規劃和更新,新增引入統一流量接入平台、容器運維管理平台、統一名字服務、容器監控等平台和能力,支撐容器生态在公司内部的全面建設和推廣。

2.4 面臨挑戰

2.4.1 叢集挑戰

一文了解vivo 雲原生容器探索和落地實踐

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

  • 叢集規模快速增長:vivo叢集伺服器規模上萬個主控端節點,管理的叢集數十個,單叢集規模2千+,執行個體數10萬+,對叢集性能和機器管理挑戰極大。
  • 叢集運維、營運和标準化:由于早期叢集管理不規範,黑屏化操作和人為誤操作等問題層出不窮,叢集運維人員每天因為各種救火忙得焦頭爛額。
  • 叢集容器監控架構和可觀測性:随着叢集規模快速增長,容器的監控元件面臨極大壓力,對容器監控的采集、存儲和展示,提出更高的要求。
  • 線上K8s版本更新疊代:面對Kubernetes版本的快速疊代,需要實作給飛行的飛機換引擎。

針對挑戰,我們的應對方案分别是:高可用、可觀測、标準化和自動化。其中容器監控和k8s版本無損更新的挑戰,vivo公衆号有詳細技術方案的介紹,本文側重介紹叢集高可用和運維自動化兩部分。

2.4.2 平台挑戰

一文了解vivo 雲原生容器探索和落地實踐

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

  • 容器IP的變化:k8s早期把業務都設計成無狀态的,其原生實作是每次釋出容器的IP都會變化,這對部分依賴固定IP的傳統業務不太友好,業務改造成本較高。
  • 周邊生态的适配和相容:包括釋出系統、中間件微服務平台、内部開發架構和流量接入層等
  • 使用者使用習慣:vivo有比較成熟的釋出平台,使用者習慣按機房釋出,習慣資源配置設定和釋出分開操作。
  • 價值輸出:運維研發效率的提升不好量化,容器成本優勢短期不好衡量。

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

2.5 最佳實踐

2.5.1 容器叢集高可用建設

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

一文了解vivo 雲原生容器探索和落地實踐

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

  • 流程工具:主要包含故障預案和故障演練,以及通過建設運維管理平台,來實作運維标準化、白屏化和自動化。
  • 容災能力:主要是建構業務跨故障域容災能力,保障叢集故障時,服務和業務流量能跨叢集排程和快速一鍵遷移等。
  • 基礎架構:主要是通過屏蔽使用者對底層叢集的感覺,一個機房多套叢集,一個業務同時部署在多個叢集上,避免單叢集故障對業務造成影響。

2、在故障發現上,我們主要是通過,自建的監控大盤、日常叢集巡檢、核心元件監控、叢集外撥測等措施,對故障及時發現和處理,降低對業務影響。3、在故障恢複上,主要是基于前面的故障預案,快速恢複,及時止損,并做好故障的複盤,不斷改進我們的故障預防和發現機制,沉澱寶貴經驗。另外,叢集的可觀測性是可用性保障的一個重要依據,我們通過建設自己的SLO面闆,對叢集狀态實時地進行監控,隻有對營運狀況了如指掌,才能做到穩如泰山,沉着應對一切變化。

2.5.2 容器叢集自動化運維

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

一文了解vivo 雲原生容器探索和落地實踐

我們的容器叢集管理平台,是以雲原生的方式來管理雲原生,簡單來說,就是基于k8s的operator機制,實作k8s on k8s。目前,我們的平台已經能夠實作多叢集的統一納管,叢集部署也是自動化、标準化的,還實作了底層IAAS層打通,叢集節點能全流程化、可視化的一鍵擴縮容,而叢集巡檢功能,可以幫助我們及時發現叢集的問題和隐患。通過平台進行日常運維和操作,不僅能提升效率,也具備審計能力,有操作和變更日志可追溯,便于問題定位。

2.5.3 容器平台架構更新

為适應業務容器化在内部的快速普及和推廣,我們更新了vivo的容器平台架構。

一文了解vivo 雲原生容器探索和落地實踐

新的架構分為4層,容器+k8s則作為基礎的統一底座,向下對接公司IAAS層的基礎設施,向上提供容器産品和平台能力,并通過開放API供上層調用和定制自己的上層邏輯。API之上是容器支援的各種服務類型,包括線上服務、中間件服務、大資料計算、算法訓練、實時計算等,最上面是為vivo網際網路各個業務進行賦能。基于這套容器平台架構,業務能實作資源隔離部署、快速傳遞和按需使用,同時也具備更好的彈性伸縮能力。對平台,我們可以統一資源的排程,實作資源的分時複用、在離線混部等,來提升資源的使用率。

2.5.4 容器平台能力增強

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

一文了解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 雲原生容器探索和落地實踐

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

  • 首先,使用者在CICD平台上建立好釋出過程的流水線配置并儲存。
  • 其次,CI環節可實作和内部GitLab對接,拉取代碼,基于jenkins進行代碼編譯和鏡像建構,建構好的鏡像經過安全掃描後,推送到開發環境的鏡像倉庫。
  • 最後,在CD環節,CICD平台會調用容器平台提供的API,進行開發、測試、預發和生産環境的部署操作。

2.5.6 統一流量接入

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

一文了解vivo 雲原生容器探索和落地實踐

早期,vivo内部是基于Nginx,來實作的南北流量和東西流量的轉發。在虛拟機和實體機場景能比較好的支撐,随着容器在内部全面的推廣,傳統的Nginx架構已不能适配。主要展現在,容器場景業務執行個體數量,相比原來虛拟機和實體機成倍數增長,容器釋出過程IP的頻發變化和狀态同步,都會對Nginx叢集造成非常大的壓力,在業務請求量非常大的情況下,接入層的配置檔案重新整理和加載,會造成業務的抖動,這是我們不能接受的。基于這個背景,我們基于APISIX建構了雲原生流量接入層,來适應全面容器化的需求。經過一年多的建設,目前我們的統一流量接入平台已經能夠很好的支撐容器化的接入,同時具備更好的擴充能力。

2.6 實踐成果

2.6.1 産品能力矩陣完善

一文了解vivo 雲原生容器探索和落地實踐

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

  • 基礎服務層:包含3類服務,鏡像管理、叢集運維和叢集監控。
  • 能力層:包含6個核心能力,分别是叢集排程、CAAS-API、容器配置、容器業務監控告警、容器日志和平台擴充能力。
  • 平台層:包含2大平台能力,分别是CI和CD。
  • 業務層:目前覆寫了vivo網際網路所有業務場景。

2.6.2 業務接入成果凸顯

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

一文了解vivo 雲原生容器探索和落地實踐

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

  • 網際網路線上服務:内部各個業務線均有大量服務運作在容器上,例如vivo商城、賬号、浏覽器、快應用、天氣等,已經接入服務600+。
  • 算法線上服務:目前接入500+服務,3000+伺服器,涉及推廣搜的各個業務線。
  • 大資料計算服務:包含離線計算如Spark,實時計算如Flink、Olap等場景,目前接入叢集20+。
  • AI算法訓練:主要是提供GPU、CPU異構計算,業務場景如Tensorflow、mpi等場景,算力十幾萬核,以及若幹GPU卡。

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

2.7 實踐總結

一文了解vivo 雲原生容器探索和落地實踐

基于我們的探索和實踐,可總結為技術價值、推廣政策、平台建設和雲原生突破4個次元的思考。

  • 找價值:關注新技術,但不執着于技術本身,必須結合業務痛點和價值。
  • 定政策:自下而上小範圍試點探索,産生實際的業務價值,影響自上而下的戰略調整。
  • 建平台:當已經有比較完善的平台和能力時,要找到容器的切入點,進行融合共建,切忌推到重來;對于需要從0到1建設的新能力,需要果斷的孵化創新。
  • 求突破:在業務容器化過程中,為了快速容器化,我們做了許多的相容和适配。為了更好的降本提效,未來,我們希望引導使用者,實作從使用雲原生,到用好雲原生的突破。

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

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

3.1 vivo基礎架構發展

一文了解vivo 雲原生容器探索和落地實踐

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

  • 階段一:傳統研發運維階段,從2011到2018年,從早期的do分離研發模式,到基于openstack+kvm的虛拟化方案落地。
  • 階段二:應用架構網際網路化階段,從2018到2020年,容器化開始在vivo内部興起。
  • 階段三:雲原生基礎架構演進階段,從2021年到現在,雲原生和容器将會在vivo内部有更多場景的應用和推廣,如在離線混部等。

3.2 vivo雲原生未來展望

一文了解vivo 雲原生容器探索和落地實踐

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

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

  • 我們的願景是:一次開發到處運作,通過自動運維實作極緻效率和成本最優!
  • 對開發人員:我們希望大家成為那隻遨遊海上的藍色鲸魚,馱着我們的業務應用,一次建構到處分發,靈活排程和運維。
  • 對管理者:我們希望追求效率的同時,能夠實作成本最優。

繼續閱讀