Knative概述
Knative是一款基于Kubernetes的Serverless框架,支持基于請求的自動彈性、在沒有流量時將實例數(shù)量自動縮容至零、版本管理與灰度發(fā)布等能力。在完全兼容社區(qū)Knative和Kubernetes API的基礎(chǔ)上,ACK Knative進(jìn)行了多維度的能力增強(qiáng),例如通過保留實例降低冷啟動時間、基于AHPA實現(xiàn)彈性預(yù)測等。
為什么要在Kubernetes集群中使用Knative
Knative介紹
Knative是一款基于Kubernetes集群的Serverless框架,提供了云原生、跨平臺的Serverless編排標(biāo)準(zhǔn)。Knative通過整合容器構(gòu)建、工作負(fù)載管理以及事件模型來實現(xiàn)這一Serverless標(biāo)準(zhǔn),優(yōu)勢如下。
更聚焦于業(yè)務(wù)邏輯:Knative通過簡單的應(yīng)用配置、自動擴(kuò)縮容等手段讓開發(fā)者聚焦于業(yè)務(wù)邏輯,降低運維負(fù)擔(dān)、減少對底層資源的關(guān)注。
標(biāo)準(zhǔn)化:將業(yè)務(wù)代碼部署到Serverless平臺時,需要考慮源碼的編譯、部署和事件的管理。目前社區(qū)和云廠商提供的Serverless解決方案和FaaS方案標(biāo)準(zhǔn)不一。Knative提供了一個標(biāo)準(zhǔn)、通用的Serverless框架。
例如,如需在Knative中實現(xiàn)事件驅(qū)動,您可以編寫對應(yīng)的YAML文件(CR)并在集群中部署,無需與云產(chǎn)品做深度綁定,便于跨平臺遷移。
使用門檻低:Knative支持將代碼自動打包為容器鏡像并發(fā)布為服務(wù),也支持將函數(shù)快捷地部署到Kubernetes集群中,以容器的方式運行。
應(yīng)用管理自動化:Knative支持在沒有流量時自動將實例數(shù)量縮容至零,從而節(jié)省資源,還提供版本管理、灰度發(fā)布等功能。
事件驅(qū)動:Knative提供了完整的事件模型,便于接入外部系統(tǒng)的事件,并將事件路由到適當(dāng)?shù)姆?wù)或函數(shù)進(jìn)行處理。
核心組件
Knative包括以下核心組件,分別執(zhí)行不同的功能。
Knative Serving:管理Serverless工作負(fù)載,提供了應(yīng)用部署、多版本管理、基于請求的自動彈性、灰度發(fā)布等能力,而且在沒有業(yè)務(wù)流量時可以將應(yīng)用實例縮容至零。
Knative Eventing:提供了事件源的接入、事件注冊和訂閱、以及事件過濾等一整套事件管理的能力。事件模型可以有效地解耦生產(chǎn)者和消費者的依賴關(guān)系。
Knative Functions: 提供了一個簡單的方式來創(chuàng)建、構(gòu)建和部署Knative服務(wù)。您無需深入了解底層技術(shù)棧(例如Kubernetes、容器、Knative),通過使用Knative Functions,即可將無狀態(tài)、事件驅(qū)動的函數(shù)作為Knative服務(wù)部署到Kubernetes集群中。
功能特性
相較于在Kubernetes集群不使用Knative,使用Knative能幫您以更簡便的方式實現(xiàn)如下功能特性。
基于請求的自動彈性
基于CPU或者M(jìn)emory的彈性有時并不能完全反映業(yè)務(wù)的真實使用情況。對于Web服務(wù)來說,基于并發(fā)數(shù)(QPS)或者每秒處理請求數(shù)(RPS)進(jìn)行彈性伸縮更能直接反映服務(wù)性能。Knative Serving會為每個Pod注入queue-proxy容器,收集容器并發(fā)數(shù)(Concurrency)或請求數(shù)(RPS)指標(biāo)。Autoscaler定時獲取指標(biāo)后,會根據(jù)相應(yīng)的算法自動調(diào)整Deployment的Pod數(shù)量,從而實現(xiàn)基于請求的自動擴(kuò)縮容。
如果在ACK集群中實現(xiàn)相應(yīng)的操作,您需要分別創(chuàng)建Deployment、Service,配置Ingress網(wǎng)關(guān),然后配置HPA參數(shù)。而使用Knative服務(wù)時,您只需要部署Knative并配置Knative服務(wù)的YAML文件。
在沒有流量時將實例數(shù)量自動縮容至零
Knative支持在應(yīng)用無流量請求時將Pod數(shù)量自動縮容至0,并在有請求時自動擴(kuò)容Pod。Knative中定義了兩種請求訪問模式:Proxy(代理模式)和Serve(請求直達(dá)模式)。模式的切換由Autoscaler組件負(fù)責(zé)。當(dāng)請求為0時,Autoscaler會將請求模式切換為Proxy模式。當(dāng)有請求訪問時,Autoscaler會收到通知進(jìn)行擴(kuò)容,擴(kuò)容的Pod狀態(tài)變?yōu)镽eady后對請求進(jìn)行轉(zhuǎn)發(fā),此時Autoscaler會將訪問模式切換為Serve模式。
版本管理與灰度發(fā)布
創(chuàng)建Knative服務(wù)時底層會自動創(chuàng)建一個Configuration資源和一個Route資源。
Configuration:當(dāng)前期望狀態(tài)的配置。每次更新Service就會更新Configuration,Configuration的更新會創(chuàng)建一個唯一的Revision。Revision相當(dāng)于Configuration的版本管理機(jī)制。
Route:負(fù)責(zé)將請求路由到Revision,并可以向不同的Revision轉(zhuǎn)發(fā)不同比例的流量。
基于以上特性,您可以使用Revision進(jìn)行版本的管理,例如版本的回退。您還可以進(jìn)行流量的灰度發(fā)布,例如創(chuàng)建了V1版本的Revision后,當(dāng)版本需要變更時可以更新服務(wù)的Configuration,創(chuàng)建V2版本的Revision,通過Route對V1、V2設(shè)置不同的流量比例(例如V1為70%,V2是30%),那么流量會按照預(yù)設(shè)的比例進(jìn)行分發(fā)。
事件驅(qū)動
Knative通過Eventing提供了完整的事件模型,便于接入外部系統(tǒng)(例如GitHub、消息隊列等)的事件,并將事件路由到適當(dāng)?shù)腒native服務(wù)或函數(shù)進(jìn)行處理。
為什么要使用ACK Knative
在完全兼容社區(qū)Knative并提供標(biāo)準(zhǔn)Kubernetes API接口的基礎(chǔ)上,ACK Knative進(jìn)一步增強(qiáng)產(chǎn)品化能力并提供了更豐富的產(chǎn)品方案。
產(chǎn)品化的能力:提供了產(chǎn)品化一鍵部署能力,您無需購買資源搭建系統(tǒng)。同時提供產(chǎn)品控制臺,支持白屏化操作,降低Kubernetes集群和Knative的使用門檻。
簡化運維:
核心組件托管:在ACK集群中,Knative的核心組件Knative Serving和Knative Eventing均由ACK創(chuàng)建和托管,無需您承擔(dān)資源費用,且提供高可用保障。
網(wǎng)關(guān)托管:ACK Knative提供ALB、MSE、ASM和Kourier四種網(wǎng)關(guān)。除社區(qū)兼容的Kourier外,其余三種云產(chǎn)品網(wǎng)關(guān)的Controller均由ACK創(chuàng)建,提供全托管、免運維的網(wǎng)關(guān)服務(wù)。
生態(tài)集成:無縫集成了阿里云的計算(ECI、ECS)、可觀測(日志服務(wù)SLS、Prometheus)、CI/CD(云效)、應(yīng)用集成(EventBridge)等產(chǎn)品。您無需自行采購服務(wù)器,也無需自建服務(wù),便能在Knative服務(wù)中實現(xiàn)日志與監(jiān)控告警、持續(xù)交付、事件驅(qū)動等能力。
更豐富的功能特性:在社區(qū)Knative的基礎(chǔ)上,ACK Knative結(jié)合實際業(yè)務(wù)場景提供了開箱即用的、更為豐富的產(chǎn)品方案。例如以下方案。
保留實例:在應(yīng)用沒有流量時,社區(qū)Knative默認(rèn)將應(yīng)用實例數(shù)縮容至零以降低成本,從而導(dǎo)致應(yīng)用重新啟動時會經(jīng)歷較長的冷啟動時間。如果您的應(yīng)用對冷啟動延時較為敏感,推薦使用此功能,保留一個低規(guī)格的突發(fā)性能實例,平衡好使用成本和啟動時長。
Knative自動伸縮: 除提供開箱即用的HPA、KPA(Knative Pod Autoscaler)外,您還可以為Knative服務(wù)配置AHPA(Advanced Horizontal Pod Autoscaler)彈性能力。如果您的應(yīng)用所需資源具備周期性變化,推薦您使用AHPA進(jìn)行彈性預(yù)測,提前預(yù)熱所需的資源,緩解使用Knative時遇到的冷啟動問題。
關(guān)于ACK Knative和社區(qū)Knative對比的更多信息,請參見阿里云Knative和開源Knative對比。
使用場景
ACK Knative的典型使用場景如下。
業(yè)務(wù)場景 | 說明 |
Web服務(wù)的托管 |
|
Serverless應(yīng)用 |
|
AI場景 |
|
事件驅(qū)動場景 | Knative Eventing提供了完整的事件模型,簡化了接入外部系統(tǒng)的事件的流程。例如,IoT設(shè)備可以將傳感器數(shù)據(jù)發(fā)送到Knative服務(wù)中,ACK Knative可以配置對應(yīng)的事件源用于接收數(shù)據(jù),并觸發(fā)相應(yīng)的處理邏輯,例如數(shù)據(jù)存儲、實時分析、監(jiān)控告警等。 |
ACK Knative的使用流程
ACK Knative的使用流程如下圖所示。
流程 | 說明 |
前提條件 | 創(chuàng)建ACK托管集群。具體操作,請參見創(chuàng)建ACK托管集群。集群版本需為1.22及以上。如需升級集群,請參見手動升級集群。 |
在控制臺一鍵部署ACK Knative,安裝Knative Serving組件。具體操作,請參見部署Knative。 | |
完成網(wǎng)關(guān)選型并部署網(wǎng)關(guān)。ACK Knative支持ALB、MSE、ASM、Kourier四種網(wǎng)關(guān)。詳細(xì)信息,請參見Knative網(wǎng)關(guān)選型建議。
| |
服務(wù)部署與管理 | 指定使用的資源類型:
|
自動伸縮:
| |
版本管理與灰度發(fā)布:
| |
Knative服務(wù)的訪問:
| |
進(jìn)階功能 | 事件驅(qū)動:在滿足云原生開發(fā)的常見需求的基礎(chǔ)上,Knative Eventing提供了完整、系統(tǒng)的Serverless事件驅(qū)動模式,包括外部事件源的接入、事件流轉(zhuǎn)和訂閱、以及對事件的過濾等功能。ACK Knative直接豐富的事件源,包括GitHub、EventBridge等。請參見事件驅(qū)動概述。 |
Knative Functions:簡化在Kubernetes集群中創(chuàng)建、部署和調(diào)用函數(shù)的流程,請參見部署Knative Functions。 | |
AI推理服務(wù): KServe提供了一個基于Kubernetes集群的機(jī)器學(xué)習(xí)模型服務(wù)框架,提供簡單的Kubernetes CRD,可將單個或多個經(jīng)過訓(xùn)練的模型(例如TFServing、TorchServe、Triton等推理服務(wù)器)部署到模型服務(wù)運行時。您可以部署KServe組件并基于KServe快速部署一個推理服務(wù)。 同時,ACK提供了在Knative中部署AI模型推理服務(wù)的最佳實踐,例如如何在Knative中部署一個vLLM推理服務(wù)、如何加速模型部署、如何配置GPU共享調(diào)度等,請參見基于Knative部署vLLM推理應(yīng)用、在Knative中部署AI模型推理服務(wù)的最佳實踐。 | |
服務(wù)網(wǎng)格:如果您需要在Knative服務(wù)中集成服務(wù)網(wǎng)格,以實現(xiàn)復(fù)雜的流量管理并增強(qiáng)服務(wù)安全性,推薦您使用服務(wù)網(wǎng)格ASM,請參見什么是服務(wù)網(wǎng)格ASM?。 | |
可觀測性與成本管理 | 日志采集:您可以在Knative服務(wù)中使用SLS,無需開發(fā)便能快捷完成日志數(shù)據(jù)采集、消費、投遞以及查詢分析等功能,請參見在Knative上實現(xiàn)日志采集。 |
監(jiān)控大盤:您可以把Knative接入阿里云Prometheus監(jiān)控,便于查看Knative的響應(yīng)延遲、請求并發(fā)數(shù)等數(shù)據(jù),請參見查看Knative服務(wù)監(jiān)控大盤。 | |
監(jiān)控告警:您可以使用SLS創(chuàng)建日志告警監(jiān)控規(guī)則,請參見為Knative服務(wù)開啟監(jiān)控告警。 | |
成本洞察:作為企業(yè)IT成本管理人員,您可以為Knative服務(wù)啟用成本洞察功能,了解Knative服務(wù)的資源使用量及成本分布,請參見啟用Knative服務(wù)成本洞察。 |
相關(guān)計費
在ACK集群中使用ACK Knative時,ACK Knative本身不收取管理費用,但在使用過程中產(chǎn)生的集群管理費用、所創(chuàng)建的云服務(wù)器、負(fù)載均衡實例、NAT網(wǎng)關(guān)等,按照相應(yīng)資源的價格計費。更多信息,請參見ACK集群的計費概述、云產(chǎn)品資源計費。
常見問題
如您在使用ACK Knative時遇到問題,可以先參見Knative FAQ完成自排查。
客戶案例
數(shù)禾科技以大數(shù)據(jù)和技術(shù)為驅(qū)動,為金融機(jī)構(gòu)提供高效的智能零售金融解決方案。為了解決支撐模型計算的底層應(yīng)用資源無法靈活且快速地根據(jù)請求量調(diào)整算力等問題,數(shù)禾科技采用ACK + Knative的方式來部署模型服務(wù),實現(xiàn)了根據(jù)請求的擴(kuò)縮容能力、允許Pod縮容到0以及多版本管理的能力。更多信息,請參見數(shù)禾科技 AI 模型服務(wù)基于阿里云容器服務(wù)實現(xiàn) Serverless 容器化。
靈伴科技(Rokid)是一家專注于人機(jī)交互技術(shù)的產(chǎn)品平臺公司,基于ACK Knative方案部署了其在線服務(wù)系統(tǒng),實現(xiàn)了多版本管理以加快應(yīng)用迭代、基于請求的自動擴(kuò)縮容以精準(zhǔn)調(diào)配GPU資源等能力,實現(xiàn)了運維、成本和性能之間的平衡。更多信息,請參見靈伴科技(Rokid)借助 Knative 實現(xiàn) AI 應(yīng)用云原生 Serverless 化。
XTransfer是一站式外貿(mào)企業(yè)跨境金融和風(fēng)控服務(wù)公司,基于ACK Knative方案搭建了DevOps平臺,實現(xiàn)了算法模型的Serverless部署。在DevOps平臺上,算法工程師可以創(chuàng)建待上線模型版本、定義推理腳本、指定模型服務(wù)所需資源(最小副本數(shù)、所需的GPU資源、所需的內(nèi)存資源等),并最終完成模型的發(fā)布。更多信息,請參見云原生 Knative 組件助力 XTransfer 加速應(yīng)用云原生 Serverless 化。
深圳硅基仿生科技股份有限公司是一家創(chuàng)新醫(yī)療器械研發(fā)與產(chǎn)業(yè)化公司,采用ACK Knative方案加速了深度學(xué)習(xí)模型的性能提升,同時降低了服務(wù)部署成本。更多信息,請參見硅基仿生業(yè)務(wù)全面 Serverless 容器化的增效降本之旅。
聯(lián)系我們
如果您在使用Knative的過程中有任何疑問或建議,歡迎您搜索釘群號23302777加入釘群。
相關(guān)文檔
請及時升級Knative Serving組件,以便享受最新的功能特性和缺陷修復(fù)。建議您在業(yè)務(wù)低峰期進(jìn)行升級。更多信息,請參見Knative版本發(fā)布說明、升級Knative Serving組件。
Knative官方文檔提供了一個在線書店應(yīng)用程序教程,帶您體驗使用Knative構(gòu)建、部署和監(jiān)控應(yīng)用程序的各個步驟,請參見Knative Bookstore Tutorial。