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