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