Serverless X OpenKruise 部署效率优化之道
作者 |?許成銘(競(jìng)霄)
Serverless 作為云計(jì)算的最佳實(shí)踐、云原生發(fā)展的方向和未來(lái)演進(jìn)趨勢(shì),其核心價(jià)值在于快速交付、智能彈性、更低成本。SAE(Serverless 應(yīng)用引擎)作為首款面向應(yīng)用的 Serverless PaaS 平臺(tái),實(shí)現(xiàn)了 Serverless 架構(gòu)與微服務(wù)架構(gòu)的完美結(jié)合,使存量應(yīng)用也可以零代碼改造享受 Serverless 賦予的技術(shù)紅利,目前正在增強(qiáng)多語(yǔ)言特性,向多負(fù)載類(lèi)型多元化場(chǎng)景方向演進(jìn)。作為 Serverless 平臺(tái),高效的應(yīng)用部署效率無(wú)疑是產(chǎn)品的核心競(jìng)爭(zhēng)力,也是彈性伸縮、智能托管的基礎(chǔ)。更快的部署效率,意味著更好的用戶(hù)體驗(yàn),更低的用戶(hù)成本,更極致的彈性能力。SAE 極致彈性項(xiàng)目,力求提升應(yīng)用端到端啟動(dòng)速度,保證用戶(hù)在突發(fā)場(chǎng)景下的快速擴(kuò)容效率和系統(tǒng)穩(wěn)定性 SLA 。
Serverless 應(yīng)用引擎:https://www.aliyun.com/product/aliware/product/sae
項(xiàng)目背景
SAE 底層使用 Kubernetes 架構(gòu),使用神龍裸金屬安全容器、 ECI 兩種資源池,用戶(hù)在 SAE 中運(yùn)行的應(yīng)用會(huì)映射到 Kubernetes 中相應(yīng)的資源。
通過(guò)采集線上全量 K8s 事件,整個(gè) Pod 的創(chuàng)建生命周期進(jìn)行分節(jié)點(diǎn)、分階段的耗時(shí)統(tǒng)計(jì)分析,以神龍節(jié)點(diǎn)為例,各階段比例如圖:
從圖中可以看出,整個(gè) pod 的創(chuàng)建生命周期包括調(diào)度,拉取并創(chuàng)建 init 容器,拉取用戶(hù)業(yè)務(wù)鏡像,創(chuàng)建和啟動(dòng)容器等。其耗時(shí)主要集中在調(diào)度和拉取用戶(hù)鏡像上。究其原因在于 SAE 神龍節(jié)點(diǎn)調(diào)度鏈路整體耗時(shí)較長(zhǎng),而鏡像耗時(shí)主要在于拉取鏡像與解壓鏡像的時(shí)長(zhǎng),特別是在大容量鏡像部署的情況下尤為突出。
實(shí)施方案
SAE 團(tuán)隊(duì)從長(zhǎng)期架構(gòu)規(guī)劃,使用場(chǎng)景通用性等多個(gè)方面進(jìn)行方案調(diào)研分析, 考慮采用原地升級(jí)的部署策略代替重建升級(jí)策略,避免部署過(guò)程中重調(diào)度,減少整體耗時(shí)。
所謂原地升級(jí),即只更新 Pod 中某一個(gè)或多個(gè)容器版本、而不影響整個(gè) Pod 對(duì)象、其余容器的升級(jí),而且在升級(jí)過(guò)程中保證 ip、node 不發(fā)生改變。在阿里巴巴內(nèi)部,絕大部分電商應(yīng)用在云原生環(huán)境都統(tǒng)一使用原地升級(jí)的方式做發(fā)布,這種原地升級(jí)的模式極大地提升了應(yīng)用發(fā)布的效率,節(jié)省了調(diào)度,分配網(wǎng)絡(luò),掛載磁盤(pán)以及拉取鏡像的耗時(shí)。通過(guò)分析線上 SAE 用戶(hù)歷史部署記錄,發(fā)現(xiàn)只更新鏡像/程序包部署應(yīng)用的占大多數(shù),也就是說(shuō)原地升級(jí)能力非常適合在 SAE 產(chǎn)品中落地。
原地升級(jí)給 SAE 帶來(lái)的優(yōu)勢(shì)在于:
- 避免重調(diào)度,避免 sidecar 容器重建,整個(gè)部署耗時(shí)只需要拉取和創(chuàng)建業(yè)務(wù)容器;
- 無(wú)需調(diào)度,可以預(yù)先在 Node 上緩存新鏡像,提高彈性效率;
- 可以保持 ip 不變,避免因 ip 變化導(dǎo)致依賴(lài)組件如注冊(cè)中心感知的延時(shí);
- 減少重建 pod 對(duì)調(diào)度器,注冊(cè)中心,業(yè)務(wù)上下游的壓力。
與此同時(shí),OpenKruise 項(xiàng)目已經(jīng)將原地升級(jí)能力通過(guò) CloneSet / AdvanceStatefulSet 貢獻(xiàn)于開(kāi)源。CloneSet 是 OpenKruise 中提供的核心 workload ?之一,它主要面向無(wú)狀態(tài)應(yīng)用,提供了更加高效、確定可控的應(yīng)用管理和部署能力,支持優(yōu)雅原地升級(jí)、指定刪除、發(fā)布順序可配置、并行/灰度發(fā)布等豐富的策略,可以滿足更多樣化的應(yīng)用場(chǎng)景。CloneSet 與原生 Kubernetes workload 功能對(duì)比如圖:
OpenKruise 項(xiàng)目:https://openkruise.io/
SAE 決定采用 CloneSet 作為新的應(yīng)用負(fù)載,一方面借助其原地升級(jí)的能力提升應(yīng)用整體部署效率,另一方面也結(jié)合 OpenKruise 開(kāi)源的力量,共同打造通用標(biāo)準(zhǔn)的無(wú)狀態(tài)應(yīng)用負(fù)載的大規(guī)模使用實(shí)踐。針對(duì)于增量應(yīng)用, SAE 會(huì)默認(rèn)采用 CloneSet 進(jìn)行用戶(hù)應(yīng)用的部署,并結(jié)合最大不可用實(shí)例數(shù)和優(yōu)雅升級(jí)時(shí)長(zhǎng)來(lái)保證發(fā)布的流量無(wú)損,而對(duì)于存量應(yīng)用, SAE 將采用基于有限狀態(tài)機(jī)的滾動(dòng)升級(jí)進(jìn)行在線遷移操作。
方案上線后效果顯著,在一個(gè)月的時(shí)間內(nèi),已經(jīng)有近千個(gè)應(yīng)用使用 CloneSet 進(jìn)行部署,且原地升級(jí)次數(shù)為重建升級(jí)的兩倍,部署效率比原生 K8s 提升 42% ,結(jié)合鏡像緩存,用戶(hù)部署應(yīng)用到容器啟動(dòng)在秒級(jí)內(nèi)完成。SAE 后續(xù)會(huì)對(duì)更多 OpenKruise 的高級(jí)能力產(chǎn)品化,同時(shí)結(jié)合用戶(hù)場(chǎng)景,不斷打磨穩(wěn)定性與最佳實(shí)踐回饋于開(kāi)源。
圖:原生 K8s 部署應(yīng)用重建升級(jí)策略 ?VS ?SAE 部署應(yīng)用原生升級(jí)策略
未來(lái)展望
在追求部署效率的道路中,SAE 正在探索更多維度,更細(xì)粒度的解決方案。相信在不久的將來(lái),SAE 的極致彈性,無(wú)論在彈性效率,彈性規(guī)模,還是智能精準(zhǔn)等方面都會(huì)大放異彩。
Serverless?技術(shù)公開(kāi)課
Serverless 具體產(chǎn)品形態(tài)如何?如何在生產(chǎn)中使用?在落地過(guò)程中有哪些深坑?10 位阿里巴巴 Serverless 領(lǐng)域技術(shù)專(zhuān)家共同打造最適合開(kāi)發(fā)者入門(mén)的 Serverless 公開(kāi)課,3 個(gè)階段 ,10 個(gè)課時(shí),讓你輕松上手,即學(xué)即用。
點(diǎn)擊即可觀看免費(fèi)課程:https://developer.aliyun.com/learning/roadmap/serverless
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的公眾號(hào)。”
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Serverless X OpenKruise 部署效率优化之道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Serverless 对研发效能的变革和
- 下一篇: 第 6 期 Arthas 征文活动开启!