Serverless X OpenKruise 部署效率優化之道

阿里巴巴中介軟體發表於2020-10-20

Serverless 作為雲端計算的最佳實踐、雲原生髮展的方向和未來演進趨勢,其核心價值在於快速交付、智慧彈性、更低成本。SAE(Serverless應用引擎, https://www.aliyun.com/product/aliware/product/sae)作為首款面向應用的Serverless PaaS 平臺,實現了 Serverless 架構與微服務架構的完美結合,使存量應用也可以零程式碼改造享受 Serverless 賦予的技術紅利,目前正在增強多語言特性,向多負載型別多元化場景方向演進。作為 Serverless 平臺,高效的應用部署效率無疑是產品的核心競爭力,也是彈性伸縮、智慧託管的基礎。更快的部署效率,意味著更好的使用者體驗,更低的使用者成本,更極致的彈效能力。SAE 極致彈性專案,力求提升應用端到端啟動速度,保證使用者在突發場景下的快速擴容效率和系統穩定性 SLA 。

專案背景

SAE 底層使用 Kubernetes 架構,使用神龍裸金屬安全容器、 ECI 兩種資源池,使用者在SAE中執行的應用會對映到 Kubernetes 中相應的資源。

通過採集線上全量 K8s 事件,整個 Pod 的建立生命週期進行分節點、分階段的耗時統計分析,以神龍節點為例,各階段比例如圖:
image.png
從圖中可以看出,整個 pod 的建立生命週期包括排程,拉取並建立 init 容器,拉取使用者業務映象,建立和啟動容器等。其耗時主要集中在排程和拉取使用者映象上。究其原因在於 SAE 神龍節點排程鏈路整體耗時較長,而映象耗時主要在於拉取映象與解壓映象的時長,特別是在大容量映象部署的情況下尤為突出。

實施方案

SAE 團隊從長期架構規劃,使用場景通用性等多個方面進行方案調研分析, 考慮採用原地升級的部署策略代替重建升級策略,避免部署過程中重排程,減少整體耗時。

所謂原地升級,即只更新 Pod 中某一個或多個容器版本、而不影響整個 Pod 物件、其餘容器的升級,而且在升級過程中保證 ip、node 不發生改變。在阿里巴巴內部,絕大部分電商應用在雲原生環境都統一使用原地升級的方式做釋出,這種原地升級的模式極大地提升了應用釋出的效率,節省了排程,分配網路,掛載磁碟以及拉取映象的耗時。通過分析線上 SAE 使用者歷史部署記錄,發現只更新映象/程式包部署應用的佔大多數,也就是說原地升級能力非常適合在 SAE 產品中落地。
image.png
原地升級給 SAE 帶來的優勢在於:

1、避免重排程,避免 sidecar 容器重建,整個部署耗時只需要拉取和建立業務容器
2、無需排程,可以預先在 Node 上快取新映象,提高彈性效率。
3、可以保持 ip 不變,避免因 ip 變化導致依賴元件如註冊中心感知的延時。
4、減少重建 pod 對排程器,註冊中心,業務上下游的壓力。

與此同時,OpenKruise專案(https://openkruise.io/)已經將原地升級能力通過 CloneSet/AdvanceStatefulSet 貢獻於開源。CloneSet 是 OpenKruise 中提供的核心 workload 之一,它主要面向無狀態應用,提供了更加高效、確定可控的應用管理和部署能力,支援優雅原地升級、指定刪除、釋出順序可配置、並行/灰度釋出等豐富的策略,可以滿足更多樣化的應用場景。CloneSet 與原生 kubernetes workload 功能對比如圖:

image.png
SAE 決定採用 CloneSet 作為新的應用負載,一方面藉助其原地升級的能力提升應用整體部署效率,另一方面也結合 OpenKruise 開源的力量,共同打造通用標準的無狀態應用負載的大規模使用實踐。針對於增量應用, SAE 會預設採用 CloneSet 進行使用者應用的部署,並結合最大不可用例項數和優雅升級時長來保證釋出的流量無損,而對於存量應用, SAE 將採用基於有限狀態機的滾動升級進行線上遷移操作。

方案上線後效果顯著,在一個月的時間內,已經有近千個應用使用 CloneSet 進行部署,且原地升級次數為重建升級的兩倍,部署效率比原生 K8s 提升 42% ,結合映象快取,使用者部署應用到容器啟動在秒級內完成。SAE 後續會對更多 OpenKruise 的高階能力產品化,同時結合使用者場景,不斷打磨穩定性與最佳實踐回饋於開源。
image.png

原生 K8s 部署應用重建升級策略 VS SAE部署應用原生升級策略

未來展望

在追求部署效率的道路中,SAE 正在探索更多維度,更細粒度的解決方案。相信在不久的將來,SAE 的極致彈性,無論在彈性效率,彈性規模,還是智慧精準等方面都會大放異彩。

相關文章