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