全部產品
Search
文件中心

Container Service for Kubernetes:Knative概述

更新時間:Nov 15, 2024

Knative是一款基於Kubernetes的Serverless架構,支援基於請求的自動彈性、在沒有流量時將執行個體數量自動縮容至零、版本管理與灰階發布等能力。在完全相容社區Knative和Kubernetes API的基礎上,ACK Knative進行了多維度能力增強,例如通過保留執行個體降低冷啟動時間、基於AHPA實現彈性預測等。

為什麼要在Kubernetes叢集中使用Knative

Knative介紹

Knative是一款基於Kubernetes叢集的Serverless架構,提供了雲原生、跨平台的Serverless編排標準。Knative通過整合容器構建、工作負載管理以及事件模型來實現這一Serverless標準,優勢如下。

  • 更聚焦於商務邏輯:Knative通過簡單的應用配置、自動擴縮容等手段讓開發人員聚焦於商務邏輯,降低營運負擔、減少對底層資源的關注。

  • 標準化:將業務代碼部署到Serverless平台時,需要考慮源碼的編譯、部署和事件的管理。目前社區和雲廠商提供的Serverless解決方案和FaaS方案標準不一。Knative提供了一個標準、通用的Serverless架構。

    例如,如需在Knative中實現事件驅動,您可以編寫對應的YAML檔案(CR)並在叢集中部署,無需與雲產品做深度綁定,便於跨平台遷移。

  • 使用門檻低:Knative支援將代碼自動打包為容器鏡像並發布為服務,也支援將函數快捷地部署到Kubernetes叢集中,以容器的方式運行。

  • 應用管理自動化:Knative支援在沒有流量時自動將執行個體數量縮容至零,從而節省資源,還提供版本管理、灰階發布等功能。

  • 事件驅動:Knative提供了完整的事件模型,便於接入外部系統的事件,並將事件路由到適當的服務或函數進行處理。

核心組件

Knative包括以下核心組件,分別執行不同的功能。

  • Knative Serving:管理Serverless工作負載,提供了應用部署、多版本管理、基於請求的自動彈性、灰階發布等能力,而且在沒有業務流量時可以將應用執行個體縮容至零。

  • Knative Eventing:提供了事件來源的接入、事件註冊和訂閱、以及事件過濾等一整套事件管理的能力。事件模型可以有效地解耦生產者和消費者的依賴關係。

  • Knative Functions: 提供了一個簡單的方式來建立、構建和部署Knative服務。您無需深入瞭解底層技術棧(例如Kubernetes、容器、Knative),通過使用Knative Functions,即可將無狀態、事件驅動的函數作為Knative服務部署到Kubernetes叢集中。

功能特性

相較於在Kubernetes叢集不使用Knative,使用Knative能幫您以更簡便的方式實現如下功能特性。

基於請求的自動彈性

基於CPU或者Memory的彈性有時並不能完全反映業務的真實使用方式。對於Web服務來說,基於並發數(QPS)或者每秒處理請求數(RPS)進行Auto Scaling更能直接反映服務效能。Knative Serving會為每個Pod注入queue-proxy容器,收集容器並發數(Concurrency)或請求數(RPS)指標。Autoscaler定時擷取指標後,會根據相應的演算法自動調整Deployment的Pod數量,從而實現基於請求的自動擴縮容。

如果在ACK叢集中實現相應的操作,您需要分別建立Deployment、Service,配置Ingress網關,然後配置HPA參數。而使用Knative服務時,您只需要部署Knative並配置Knative服務的YAML檔案。

在沒有流量時將執行個體數量自動縮容至零

Knative支援在應用無流量請求時將Pod數量自動縮容至0,並在有請求時自動擴容Pod。Knative中定義了兩種請求訪問模式:Proxy(代理模式)和Serve(請求直達模式)。模式的切換由Autoscaler組件負責。當請求為0時,Autoscaler會將請求模式切換為Proxy模式。當有請求訪問時,Autoscaler會收到通知進行擴容,擴容的Pod狀態變為Ready後對請求進行轉寄,此時Autoscaler會將訪問模式切換為Serve模式。

版本管理與灰階發布

建立Knative服務時底層會自動建立一個Configuration資源和一個Route資源。

  • Configuration:當前期望狀態的配置。每次更新Service就會更新Configuration,Configuration的更新會建立一個唯一的Revision。Revision相當於Configuration的版本管理機制。

  • Route:負責將請求路由到Revision,並可以向不同的Revision轉寄不同比例的流量。

基於以上特性,您可以使用Revision進行版本的管理,例如版本的回退。您還可以進行流量的灰階發布,例如建立了V1版本的Revision後,當版本需要變更時可以更新服務的Configuration,建立V2版本的Revision,通過Route對V1、V2設定不同的流量比例(例如V1為70%,V2是30%),那麼流量會按照預設的比例進行分發。

事件驅動

Knative通過Eventing提供了完整的事件模型,便於接入外部系統(例如GitHub、訊息佇列等)的事件,並將事件路由到適當的Knative服務或函數進行處理。

為什麼要使用ACK Knative

在完全相容社區Knative並提供標準Kubernetes API介面的基礎上,ACK Knative進一步強化產品化能力並提供了更豐富的產品方案。

  • 產品化的能力:提供產品化一鍵部署能力,您無需購買資源搭建系統。同時提供產品控制台,支援白屏化操作,降低Kubernetes叢集和Knative的使用門檻。

  • 簡化營運:

    • 核心組件託管:在ACK叢集中,Knative的核心組件Knative Serving和Knative Eventing均由ACK建立和託管,無需您承擔資源費用,且提供高可用保障。

    • 網關託管:ACK Knative提供ALB、MSE、ASM和Kourier四種網關。除社區相容的Kourier外,其餘三種雲產品網關的Controller均由ACK建立,提供全託管、免營運的網關服務。

  • 生態整合:無縫整合了阿里雲的計算(ECIECS)、可觀測(Log ServiceSLSPrometheus)、應用整合(EventBridge)等產品。您無需自行採購伺服器,也無需自建服務,便能在Knative服務中實現日誌與監控警示、持續傳遞、事件驅動等能力。

  • 更豐富的功能特性:在社區Knative的基礎上,ACK Knative結合實際業務情境提供了開箱即用的、更為豐富的產品方案。例如以下方案。

    • 保留執行個體:在應用沒有流量時,社區Knative預設將應用執行個體數縮容至零以降低成本,從而導致應用重新啟動時會經歷較長的冷啟動時間。如果您的應用對冷啟動延時較為敏感,推薦使用此功能,保留一個低規格的突發效能執行個體,平衡好使用成本和啟動時間長度。

    • Knative自動調整: 除提供開箱即用的HPAKPA(Knative Pod Autoscaler)外,您還可以為Knative服務配置AHPA(Advanced Horizontal Pod Autoscaler)彈效能力。如果您的應用所需資源具備周期性變化,推薦您使用AHPA進行彈性預測,提前預熱所需的資源,緩解使用Knative時遇到的冷啟動問題。

關於ACK Knative和社區Knative對比的更多資訊,請參見阿里雲Knative和開源Knative對比

使用情境

ACK Knative的典型使用情境如下。

業務情境

說明

Web服務的託管

  • 簡化部署:ACK Knative封裝了許多Kubernetes的底層細節,通過Knative服務大大簡化了工作負載的部署和管理。

  • 簡化多版本管理:Revision機制能夠確保每個修訂版本都有唯一標識,便於管理不同的版本,例如版本的復原。

  • 簡化流量灰階發布:ACK Knative提供流量管理功能。通過為不同Revision版本的服務分配不同的流量比例,可以快速實現灰階發布、A/B測試等。

Serverless應用

  • 聚焦商務邏輯:開發人員無需關心IaaS資源,只需關注商務邏輯的開發,應用配置也大大簡化,降低底層基礎設施的營運成本。

  • 資源按需使用、自動彈性:ACK Knative可以根據流量請求和並發情況自動擴縮資源,當沒有業務流量時還可以將執行個體數量縮減至零,節省資源和成本。

AI情境

  • 聚焦商務邏輯:GPU等異構計算情境下,開發人員無需關心底層基礎設施的維護,只需關注AI任務的構建和部署。

  • 資源按需使用、自動彈性:ACK Knative可以根據實際負載情況自動擴縮資源,針對負載具有波動性的推理服務能夠有效降低資源使用成本。

  • 可移植性:ACK Knative可以運行在任何相容Kubernetes的環境中,Knative服務可以在雲上、本機資料中心甚至是邊緣裝置上移植部署。

事件驅動情境

Knative Eventing提供了完整的事件模型,簡化了接入外部系統的事件的流程。例如,IoT裝置可以將感應器資料發送到Knative服務中,ACK Knative可以配置對應的事件來源用於接收資料,並觸發相應的處理邏輯,例如資料存放區、即時分析、監控警示等。

ACK Knative的使用流程

ACK Knative的使用流程如下圖所示。

流程

說明

前提條件

建立ACK託管叢集。具體操作,請參見建立ACK託管叢集。叢集版本需為1.22及以上。如需升級叢集,請參見手動升級叢集

在控制台一鍵部署ACK Knative,安裝Knative Serving組件。具體操作,請參見部署Knative

完成網關選型並部署網關。ACK Knative支援ALB、MSE、ASM、Kourier四種網關。詳細資料,請參見Knative網關選型建議

  • ALB:在阿里雲應用型負載平衡ALB(Application Load Balancer)之上提供更為強大的Ingress流量管理方式,提供全託管免營運的方式,並且提供自動彈效能力。

  • MSE(Microservices Engine):相容K8s Ingress標準的下一代網關產品,將傳統的流量網關和微服務網關功能合并。

  • ASM(Alibaba Cloud Service Mesh):統一管理微服務應用流量、相容Istio的託管式平台。通過流量控制、網格觀測以及服務間通訊安全等功能,簡化您的服務治理,並為運行在異構計算基礎設施上的服務提供統一的管理能力。

  • Kourier:基於Envoy架構實現的一款Knative社區開源的輕量級網關。

服務部署與管理

指定使用的資源類型:

  • 預設使用ECS資源運行Knative服務。

  • 使用ECI提供的Pod資源應對突發流量,請參見使用ECI資源

  • 在AI推理服務等情境下使用GPU資源,請參見使用GPU資源

  • 叢集中同時存在ECS和ECI資源時,可基於ResourcePolicy來聲明資源的擴容和縮容順序,請參見在Knative中同時使用ECS和ECI資源

  • 與搶佔式執行個體結合使用,降低雲端運算資源,請參見使用搶佔式執行個體

  • 配置保留執行個體,保留一個低規格的突發效能執行個體,平衡好使用成本和啟動時間長度,請參見配置保留執行個體

自動調整:

版本管理與灰階發布:

Knative服務的訪問:

  • Knative服務的預設網域名稱格式為{route}.{namespace}.{default-example.com},其中{default-example.com}是預設的網域名稱尾碼,您可以自訂網域名尾碼,請參見使用自訂網域名

  • 使用自訂網域名時,推薦為自訂網域名配置一個HTTPS認證,提高資料轉送的安全性,請參見配置HTTPS認證訪問

  • 配置探針(存活探針(Liveness Probe)和就緒探針(Readiness Probe)),監測和管理服務的健康情況和可用性,請參見在Knative中配置連接埠探測

進階功能

事件驅動:在滿足雲原生開發的常見需求的基礎上,Knative Eventing提供了完整、系統的Serverless事件驅動模式,包括外來事件源的接入、事件流轉和訂閱、以及對事件的過濾等功能。ACK Knative直接豐富的事件來源,包括GitHub、EventBridge等。請參見事件驅動概述

Knative Functions:簡化在Kubernetes叢集中建立、部署和調用函數的流程,請參見部署Knative Functions

AI推理服務:

KServe提供了一個基於Kubernetes叢集的機器學習模型服務架構,提供簡單的Kubernetes CRD,可將單個或多個經過訓練的模型(例如TFServing、TorchServe、Triton等推理伺服器)部署到模型服務運行時。您可以部署KServe組件基於KServe快速部署一個推理服務

同時,ACK提供了在Knative中部署AI模型推理服務的最佳實務,例如如何加速模型部署、如何配置GPU共用調度等,請參見在Knative中部署AI模型推理服務的最佳實務

服務網格:如果您需要在Knative服務中整合服務網格,以實現複雜的流量管理並增強服務安全性,推薦您使用服務網格ASM,請參見什麼是服務網格ASM?

可觀測性與成本管理

日誌採集:您可以在Knative服務中使用SLS,無需開發便能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能,請參見在Knative上實現日誌採集

監控大盤:您可以把Knative接入阿里雲Prometheus監控,便於查看Knative的響應延遲、請求並發數等資料,請參見查看Knative服務監控大盤

監控警示:您可以使用SLS建立日誌警示監控規則,請參見為Knative服務開啟監控警示

成本洞察:作為企業IT成本管理員,您可以為Knative服務啟用成本洞察功能,瞭解Knative服務的資源使用量及成本分布,請參見啟用Knative服務成本洞察

相關計費

在ACK叢集中使用ACK Knative時,ACK Knative本身不收取管理費用,但在使用過程中產生的叢集管理費用、所建立的雲端服務器、Server Load Balancer執行個體、NAT Gateway等,按照相應資源的價格計費。更多資訊,請參見ACK叢集的計費概述雲產品資源費用

常見問題

如您在使用ACK Knative時遇到問題,可以先參見Knative FAQ完成自排查。

聯絡我們

如果您在使用Knative的過程中有任何疑問或建議,歡迎您搜尋釘群號23302777加入釘群。

相關文檔

  • 請及時升級Knative Serving組件,以便享受最新的功能特性和缺陷修複。建議您在業務低峰期進行升級。更多資訊,請參見Knative版本發布說明升級Knative Serving組件

  • Knative官方文檔提供了一個線上書店應用程式教程,帶您體驗使用Knative構建、部署和監控應用程式的各個步驟,請參見Knative Bookstore Tutorial