本文會詳細介紹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個方向發展,分別是全面容器化、擁抱云原生和在離線混部。
- 我們的愿景是:一次開發到處運行,通過自動運維實現極致效率和成本最優!
- 對開發人員:我們希望大家成為那只遨游海上的藍色鯨魚,馱著我們的業務應用,一次構建到處分發,靈活調度和運維。
- 對管理者:我們希望追求效率的同時,能夠實現成本最優。