KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力
聯(lián)合作者 |?
Yan Xun,阿里云 EDAS 團隊高級工程師
Andy Shi,阿里云開發(fā)者倡導(dǎo)者
Tom Kerkhove,Codit 容器化業(yè)務(wù)負(fù)責(zé)人兼 Azure 架構(gòu)師、KEDA 維護者、CNCF 大使
來源 | 阿里巴巴云原生公眾號
?
當(dāng)你在伸縮 Kubernetes 時,你會想到一些領(lǐng)域,但是如果你是 Kubernetes 的新手,你可能會覺得有些難以應(yīng)付。
?
在這篇博文中,我們將簡要解釋需要考慮的領(lǐng)域,KEDA 如何使應(yīng)用自動伸縮變得簡單,以及為什么阿里云企業(yè)分布式應(yīng)用服務(wù)(EDAS)?在 KEDA 上完全標(biāo)準(zhǔn)化。
?
伸縮 Kubernetes
當(dāng)管理 Kubernetes 集群和應(yīng)用程序時,你需要仔細(xì)監(jiān)視各種事情,比如:
?
- 集群容量——我們是否有足夠的可用資源來運行我們的工作負(fù)載?
- 應(yīng)用程序工作負(fù)載——應(yīng)用程序有足夠的可用資源嗎?它能跟上待完成的工作嗎?(像隊列深度)
為了實現(xiàn)自動化,你通常會設(shè)置警報以獲得通知,甚至使用自動伸縮。Kubernetes 是一個很好的平臺,它可以幫助你實現(xiàn)這個即時可用的功能。
?
通過使用 Cluster Autoscaler 組件可以輕松地伸縮集群,該組件將監(jiān)視集群,以發(fā)現(xiàn)由于資源短缺而無法調(diào)度的 pod,并開始相應(yīng)地添加/刪除節(jié)點。
?
因為 Cluster Autoscaler 只在 pod 調(diào)度過度時才會啟動,所以你可能會有一段時間間隔,在此期間你的工作負(fù)載沒有啟動和運行。
?
Virtual Kubelet?(一個 CNCF 沙箱項目)是一個巨大的幫助,它允許你向 Kubernetes 集群添加一個“虛擬節(jié)點”,pod 可以在其上調(diào)度。
?
通過這樣做,平臺供應(yīng)商?(如阿里巴巴、Azure、HashiCorp 和其他)允許你將掛起的 pod 溢出到集群之外,直到它提供所需的集群容量來緩解這個問題。
?
除了伸縮集群,Kubernetes 還允許你輕松地伸縮應(yīng)用程序:
?
- Horizontal Pod Autoscaler(HPA?)允許你添加/刪除更多的 Pod 到你的工作負(fù)載中,以 scale in/out(添加或刪除副本)。
- Vertical Pod Autoscaler(VPA?)允許你添加/刪除資源到你的 Pod 以 scale up/down(添加或刪除 CPU 或內(nèi)存)。
所有這些為你伸縮應(yīng)用程序提供了一個很好的起點。
?
HPA 的局限性
雖然 HPA 是一個很好的起點,但它主要關(guān)注 pod 本身的指標(biāo),允許你基于 CPU 和內(nèi)存伸縮它。也就是說,你可以完全配置它應(yīng)該如何自動縮放,這使它強大。
?
雖然這對于某些工作負(fù)載來說是理想的,但你通常想要基于其他地方如 Prometheus、Kafka、云供應(yīng)商或其他事件上的指標(biāo)進行伸縮。
?
多虧了外部指標(biāo)支持?,用戶可以安裝指標(biāo)適配器,從外部服務(wù)中提供各種指標(biāo),并通過使用指標(biāo)服務(wù)器對它們進行自動伸縮。
?
但是,有一點需要注意,你只能在集群中運行一個指標(biāo)服務(wù)器,這意味著你必須選擇自定義指標(biāo)的來源。
?
你可以使用 Prometheus 和工具,比如 Promitor,從其他提供商那里獲取你的指標(biāo),并將其作為單一的真相來源來進行伸縮,但這需要大量的管道(plumbing)和工作來進行擴展。
?
肯定有更簡單的方法……是的,使用 Kubernetes Event-Driven Autoscaling(KEDA)!
?
KEDA 是什么?
Kubernetes Event-Driven Autoscaling(KEDA)是一個用于 Kubernetes 的單用途事件驅(qū)動自動伸縮器,可以很容易地將其添加到 Kubernetes 集群中以伸縮應(yīng)用程序。
?
它的目標(biāo)是使應(yīng)用程序自動擴展非常簡單,并通過支持伸縮到零(scale-to-zero)來優(yōu)化成本。
?
KEDA 去掉了所有的伸縮基礎(chǔ)設(shè)施,并為你管理一切,允許你在 30 多個系統(tǒng)上進行伸縮或使用自己的伸縮器進行擴展。
?
用戶只需要創(chuàng)建 ScaledObject 或 ScaledJob 來定義你想要伸縮的對象和你想要使用的觸發(fā)器;KEDA 會處理剩下的一切!
?
你可以伸縮任何東西;即使它是你正在使用的另一個工具的 CRD,只要它實現(xiàn)/scale 子資源。
?
那么,KEDA 重新發(fā)明輪子了嗎?不!相反,它通過在底層使用 HPA 來擴展 Kubernetes,HPA 使用我們的外部指標(biāo),這些指標(biāo)由我們自己的指標(biāo)適配器提供,該適配器取代了所有其他適配器。
?
去年,KEDA 加入了 CNCF,作為 CNCF 沙箱項目,計劃今年晚些時候提案升級到孵化階段。
?
阿里巴巴基于 OAM/KubeVela 和 KEDA 的實踐
企業(yè)分布式應(yīng)用服務(wù)(EDAS)作為阿里云上的主要企業(yè) PaaS 產(chǎn)品,多年來以巨大的規(guī)模服務(wù)于公有云上的無數(shù)開發(fā)者。從架構(gòu)的角度來看,EDAS 是與 KubeVela 項目?一起構(gòu)建的。其總體架構(gòu)如下圖所示。
?
在生產(chǎn)上,EDAS 在阿里云上集成了 ARMS 監(jiān)控服務(wù),提供監(jiān)控和應(yīng)用的細(xì)粒度指標(biāo)。EDAS 團隊在 KEDA 項目中添加了一個 ARMS Scaler 來執(zhí)行自動縮放。他們還添加了一些特性,并修復(fù)了 KEDA v1 版本中的一些 bug。包括:
?
- 當(dāng)有多個觸發(fā)器時,這些值將被求和,而不是作為單獨的值留下。
- 當(dāng)創(chuàng)建 KEDA HPA 時,名稱的長度將被限制為 63 個字符,以避免觸發(fā) DNS 投訴。
- 不能禁用觸發(fā)器,這可能會在生產(chǎn)中引起麻煩。
EDAS 團隊正在積極地將這些修復(fù)程序發(fā)送給上游 KEDA,盡管其中一些已經(jīng)添加到 V2 版本中。
?
為什么阿里云將 KEDA 標(biāo)準(zhǔn)化為其應(yīng)用的自動伸縮器
當(dāng)涉及到自動擴展特性時,EDAS 最初使用上游 Kubernetes HPA 的 CPU 和內(nèi)存作為兩個指標(biāo)。然而,隨著用戶群的增長和需求的多樣化,EDAS 團隊很快發(fā)現(xiàn)了上游 HPA 的局限性:
?
基于這些需求,EDAS 團隊開始規(guī)劃 EDAS 自動伸縮特性的新版本。與此同時,EDAS 在 2020 年初引入了 OAM,對其底層核心組件進行了徹底改革。OAM 為 EDAS 提供了標(biāo)準(zhǔn)化的、可插入的應(yīng)用程序定義,以取代其內(nèi)部的 Kubernetes 應(yīng)用程序 CRD。該模型的可擴展性使 EDAS 能夠輕松地與 Kubernetes 社區(qū)的任何新功能集成。在這種情況下,EDAS 團隊試圖將對 EDAS 新的自動伸縮特性的需求與 OAM 自動伸縮特性的標(biāo)準(zhǔn)實現(xiàn)相結(jié)合。
?
基于用例,EDAS 團隊總結(jié)了三個標(biāo)準(zhǔn):
經(jīng)過詳細(xì)的評估,EDAS 團隊選擇了 KEDA 項目,該項目是由微軟和紅帽開源的,已捐贈給 CNCF。KEDA 默認(rèn)提供了幾個有用的 Scaler,并開箱即用地支持伸縮到零。它為應(yīng)用程序提供了細(xì)粒度的自動伸縮。它具有 Scalar 和 Metric 適配器的概念,支持強大的插件架構(gòu),同時提供統(tǒng)一的 API 層。最重要的是,KEDA 的設(shè)計只關(guān)注自動伸縮,這樣就可以輕松地將其集成為 OAM 特性。總的來說,KEDA 非常適合 EDAS。
?
展望未來
下一步,阿里巴巴正在積極推動由 AIOps 驅(qū)動的 KEDA 特性,目標(biāo)是為其自動伸縮行為帶來智能決策。這將從本質(zhì)上實現(xiàn)基于專家系統(tǒng)和歷史數(shù)據(jù)分析的自動伸縮決策,利用阿里巴巴的 KEDA 組件中新實現(xiàn)的應(yīng)用 QoS 觸發(fā)器和數(shù)據(jù)庫度量觸發(fā)器等。因此,我們期待一個更強大、更智能、更穩(wěn)定的基于 KEDA 的自動伸縮功能將很快在 KEDA 中發(fā)布。
總結(jié)
以上是生活随笔為你收集整理的KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 灵魂拷问:后端业务开发要会用 K8s 到
- 下一篇: 被解救的代码 - 代码即服务时代来了!