阿里开源!云原生应用自动化引擎 OpenKruise | 直击 KubeCon
在近期開展的 KubeCon China 2019 上,阿里云將陸續為全球用戶分享阿里巴巴超大規模云原生落地實踐、云原生前沿技術與應用包括 OpenKruise 開源項目、開放云原生應用中心(Cloud Native App Hub),同時將重磅發布邊緣容器、云原生應用管理與交付體系等產品和服務。
接下來的三天,阿里妹將連線會場,為你帶來實時報道。
2019年6月24日至26日,由 CNCF 主辦的云原生技術大會 KubeCon 在中國上海盛裝啟幕,阿里云容器平臺團隊正式宣布開源重量級項目 OpenKruise,將基于阿里巴巴經濟體多年大規模應用部署、發布與管理最佳實踐沉淀的能力開放給業界。
OpenKruise 是阿里巴巴開源的 Kubernetes 之上云原生應用自動化的引擎。Kruise 項目源自于阿里巴巴經濟體應用過去多年的大規模應用部署、發布與管理的最佳實踐,源于阿里云Kubernetes服務數千客戶的需求沉淀。
“云原生應用自動化引擎”加持下的阿里經濟體“全面上云”
隨著云原生概念的興起,越來越多的應用開始嘗試在云原生的土壤上耕耘。那么什么是云原生?簡而言之,云原生就是一套能夠充分利用“云”的能力,高效構建與交付應用的方法論集合,使得應用容器化的用戶可以充分的利用云的彈性和“不可變基礎設施”等優勢專注于自身核心業務價值。
當前,阿里巴巴基礎設施的云原生演進與升級也正在如火如荼的進行。而在這個阿里巴巴經濟體整體云化的過程中,阿里內部在超大規模的互聯網場景中,已經開始進行大量的云原生的理念落地實踐,比如輕量級容器化。
阿里巴巴經濟體正在大規模推進應用的輕量級容器化,從而達成利用容器的敏捷和一致等特性快速構建符合云原生理念的電商站點交付的能力,適應類似“雙十一”大促的嚴苛技術需求。再比如說云原生應用管理,阿里巴巴經濟體正在將 Kubernetes 等項目的應用編排與自動化能力,穿透到上層運維框架當中,驅動電商應用按照云原生的技術理念進行編排、交付、運行。
在阿里巴巴經濟體的整體云原生化過程當中,阿里的技術團隊逐漸沉淀出了一套緊貼上游社區標準,適應互聯網規?;瘓鼍暗募夹g理念與最佳實踐。這其中,最重要的無疑是如何對應用進行自動化的發布、運行和管理。
OpenKruise:來自阿里經濟體云原生化歷程的寶貴經驗與最佳實踐
在 KubeCon 上海,阿里云容器平臺團隊正式宣布了重量級項目 OpenKruise(以下簡稱 Kruise)的開源。
Kruise 是 cruise 的諧音,"k" for Kubernetes。字面意義是巡航或豪華游艇,寓意 Kubernetes 上應用的自動巡航,滿載阿里巴巴多年應用部署管理經驗。
Kruise 的目標是 automate everything on Kubernetes ! Kruise 項目源自于阿里巴巴經濟體應用過去多年的大規模應用部署、發布與管理的最佳實踐,源于容器平臺團隊對集團應用規?;\維,規?;ㄕ镜哪芰?#xff0c;源于阿里云 Kubernetes 服務數千客戶的需求沉淀。Kruise 借力于云原生社區,集成阿里巴巴云原生實踐之精華,反哺社區,指引業界云原生化最佳實踐,少走彎路。
OpenKruise 是阿里巴巴開源的 Kubernetes 之上云原生應用自動化的引擎。Kruise 核心在于自動化,我們將從不同維度解決 Kubernetes 之上應用的自動化,包括,部署、升級、彈性擴縮容、Qos 調節、健康檢查、遷移修復等等。此次 Kruise 開源的內容主要在應用部署,升級方面,即一套增強版 controller 組件用于應用的部署、升級、運維。后續,Kruise 會依次開源智能化的彈性擴縮容組件,以及應用 Qos 自調節能力的組件等。
Kruise Controllers:將 Kubernetes 的“控制器模式”進行到底
以下內容主要介紹 Kruise Controllers 一套用于 Kubernetes 之上應用自動化部署管理的 controller 組件。
眾所周知,Kubernetes 項目的核心原理就是“控制器模式”。
目前,Kubernetes 項目默認已經提供了一套 Controller 組件,例如 Deployment、Statefulset、DaemonSet 等,這些 Controller 提供了比較豐富的應用部署和管理功能。但是,隨著 Kubernetes 的使用范圍越來越廣,真實的企業與規模性場景中的業務訴求與上游 Controller 功能不匹配的情況也越來越常見。
以阿里巴巴為例:阿里巴巴內部的 Kubernetes 集群需要服務涵蓋50幾個BU,上萬種應用。這個體量非常龐大,對規模性和高可用性帶來了巨大的挑戰。與此同時,阿里云上的 Kubernetes 服務也接入了上千家企業客戶,收集并支撐了各種各樣的客戶需求。這些訴求與最后阿里經濟體的實踐經驗,最終促成了 Kruise 開源項目的誕生。
Kruise 第一期開源主要包含以下Controller,后續會加入更多。
Advanced StatefulSet:具備豐富發布策略、支持原地升級的 StatefulSet
Advanced StatefulSet擴展了原生的StatefulSet,加入了兩個新的特性。
- 原地升級 (In-place update strategy)
原生的 StatefulSet 在做 rolling update 的時候會銷毀并且重建 pods. 這在阿里巴巴規模體量的場景下,代價巨大。
- 首先,所有被刪除的應用的 Pods 需要被重新調度一遍,由于 pod 數量大,這對調度帶來了不必要的開銷,更糟的是,重新調度的 pod 無法正常被調度,由于資源被占用,親和特性等其他原因。Pod 被重新調度到新的 node上,損失了原來的本地 state, 雖然通??梢员恢亟?#xff0c;但是還是帶來額外開銷。
- 重調度后的 pods 很有可能分布在不同的機器上,由于網絡拓撲結構的改變,需要重新申請 IP, 有些依賴 IP 保持的應用無法正常工作,此外,對網絡流量的傳輸帶來了不確定性。
- 針對多容器的 Pod,升級 sidecar 容器而導致主容器重建,通常是不可接受的。
Advanced StatefulSet 引入了原地升級功能,允許在不銷毀 pod 的情況下,更新容器 image。這樣帶來的好處是效率和穩定性。效率很明顯,pod 不需要被重新調度了,還是跑在原來的 node,一些本地存儲 state 還是可以保留。穩定性體現在 IP 保持,網絡拓撲以及流量結構基本不變,穩定性在阿里巴巴及阿里云經濟體中一直以來是一個極其重要的指標。
- 允許最大不可用實例的配置(Max Unavailable)
社區原生的 StatefulSet 在升級的過程中是不允許同時升級多個實例的,這主要是為了某些有狀態應用需要依次按序升級的需求。但是,從阿里巴巴場景,以及阿里云容器平臺之上的客戶了解到,許多應用不需要依次按序升級的語義,這樣帶來的問題是效率太低。特別是像阿里巴巴一些應用實例數巨大的場景,問題尤其顯著。
MaxUnavailable 的功能正是為了解決這個問題,它允許應用實例被并行升級,且保持始終保持最大不可用的實例數不超過 MaxUnavailable 的限制數。
Broadcast Job:像 DaemonSet 那樣運行的一次性 Job
Broadcast Job 會在集群中每個node上面跑一個 pod 直至結束。類似于社區的DaemonSet,區別在于 DaemonSet 始終保持一個 pod 長服務在每個 node 上跑,而 BroadcastJob 中最終這個 pod 會結束。相比 DaemonSet,Broadcast 結束后不再占用資源,這在某些場景中特別適用,比如升級 node 中某些組件,檢測node 上一些配置是否正確等。
SidecarSet:大規模場景下 Sidecar 管理利器
Sidecar 在 Kubernetes 中是一個輔助容器的概念,和主容器跑在同一個 pod 中。Sidecar 容器一般是一些基礎服務組件如 monitoring 容器,log collection 容器等。
在一個公司中,主業務容器和基礎組件容器通常由不同的團隊開發和維護,多個團隊同時操作和修改同一份 yaml 文件或同一個 API 資源對象,時常會產生一些沖突,且不便于管理。SidecarSet 的理念在于將主業務容器和輔助容器的運維模式解耦。當業務用戶提交應用時,不需要顯示指定 sidecar 容器,由 sidecar 容器相應的團隊編寫規則負責自動注入。并且在容器運維和升級時候,利用 Advanced Statefulset 原地升級的功能,業務團隊和基礎架構團隊分別按照自己定義的策略升級各自相應的容器,而不需要耦合在一起升級,產生不必要的影響。Istio 其實采用類似的思想自動給業務容器注入 sidecar 容器的功能,但是其缺乏 sidecar 容器后續升級運維的能力。SidecarSet 有效地把 Sidecar 容器的部署和管理抽象出來。
OpenKruise 正在面向開源社區招募合作伙伴與子項目!
Kruise 社區的準則,是基于 Kubernetes 的核心技術理念來構建更強大的自動化能力。目前,Kruise 正在計劃發布更多的 Controller 來覆蓋更多的場景和功能比如豐富的發布策略、金絲雀發布、藍綠發布、分批發布等等。
更為重要的是,OpenKruise 是一個 Umbrella 項目,OpenKruise 的維護者們,正以最開放的姿態面向全球招募合作伙伴和貢獻者。沒錯,我們非常期待您能夠為 OpenKruise 貢獻和共建新的自動化能力,或者一起來共同推Kubernetes 云原生應用編排能力的演進與發展。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的阿里开源!云原生应用自动化引擎 OpenKruise | 直击 KubeCon的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云Kubernetes CSI实践—
- 下一篇: 蚂蚁金服OceanBase挑战TPCC丨