阿里開源!雲原生應用自動化引擎 OpenKruise | 直擊 KubeCon
在近期開展的 KubeCon China 2019 上,阿里雲將陸續為全球使用者分享阿里巴巴超大規模雲原生落地實踐、雲原生前沿技術與應用包括 OpenKruise 開源專案、開放雲原生應用中心(Cloud Native App Hub),同時將重磅釋出邊緣容器、雲原生應用管理與交付體系等產品和服務。
接下來的三天,阿里妹將連線會場,為你帶來實時報道。
2019年6月24日至26日,由 CNCF 主辦的雲原生技術大會 KubeCon 在中國上海盛裝啟幕,阿里雲容器平臺團隊正式宣佈開源重量級專案 OpenKruise,將基於阿里巴巴經濟體多年大規模應用部署、釋出與管理最佳實踐沉澱的能力開放給業界。
OpenKruise 是阿里巴巴開源的 Kubernetes 之上雲原生應用自動化的引擎。Kruise 專案源自於阿里巴巴經濟體應用過去多年的大規模應用部署、釋出與管理的最佳實踐,源於阿里雲Kubernetes服務數千客戶的需求沉澱。
“雲原生應用自動化引擎”加持下的阿里經濟體“全面上雲”
隨著雲原生概念的興起,越來越多的應用開始嘗試在雲原生的土壤上耕耘。那麼什麼是雲原生?簡而言之,雲原生就是一套能夠充分利用“雲”的能力,高效構建與交付應用的方法論集合,使得應用容器化的使用者可以充分的利用雲的彈性和“不可變基礎設施”等優勢專注於自身核心業務價值。
當前,阿里巴巴基礎設施的雲原生演進與升級也正在如火如荼的進行。而在這個阿里巴巴經濟體整體雲化的過程中,阿里內部在超大規模的網際網路場景中,已經開始進行大量的雲原生的理念落地實踐,比如輕量級容器化。
阿里巴巴經濟體正在大規模推進應用的輕量級容器化,從而達成利用容器的敏捷和一致等特性快速構建符合雲原生理念的電商站點交付的能力,適應類似“雙十一”大促的嚴苛技術需求。再比如說雲原生應用管理,阿里巴巴經濟體正在將 Kubernetes 等專案的應用編排與自動化能力,穿透到上層運維框架當中,驅動電商應用按照雲原生的技術理念進行編排、交付、執行。
在阿里巴巴經濟體的整體雲原生化過程當中,阿里的技術團隊逐漸沉澱出了一套緊貼上游社群標準,適應網際網路規模化場景的技術理念與最佳實踐。這其中,最重要的無疑是如何對應用進行自動化的釋出、執行和管理。
OpenKruise:來自阿里經濟體雲原生化歷程的寶貴經驗與最佳實踐
在 KubeCon 上海,阿里雲容器平臺團隊正式宣佈了重量級專案 OpenKruise(以下簡稱 Kruise)的開源。
Kruise 是 cruise 的諧音,"k" for Kubernetes。字面意義是巡航或豪華遊艇,寓意 Kubernetes 上應用的自動巡航,滿載阿里巴巴多年應用部署管理經驗。
Kruise 的目標是 automate everything on Kubernetes ! Kruise 專案源自於阿里巴巴經濟體應用過去多年的大規模應用部署、釋出與管理的最佳實踐,源於容器平臺團隊對集團應用規模化運維,規模化建站的能力,源於阿里雲 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, 雖然通常可以被重建,但是還是帶來額外開銷。
- 重排程後的 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 雲原生應用編排能力的演進與發展。
原文連結
本文為雲棲社群原創內容,未經