Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件
作者 | 阿里雲智慧事業群高階開發工程師 元毅
劃重點
初識 Knative: 跨平臺的 Serverless 編排框架 讓我們對於 Knative 有了初步瞭解,Knative 主要由 Build、Serving 和 Eventing 三大核心元件構成。Knative 正是依靠這三個核心元件,驅動著 Knative 這艘 Serverless 巨輪前行,本文就來分別介紹一下這三個核心元件。
Build
Knative Build 是基於現有的 Kubernetes 能力之上,提供的一套標準化、可移植、可複用的容器映象構建方式。透過在 Kubernetes 上執行復雜的構建任務,Knative Build 使你不必再單獨開發和重複這些映象構建過程, 從而透過系統化、工程化的方式,減少了映象構建時間及成本。
Build 透過 Kubernetes 自定義資源定義(CRD)實現。 透過 Build 你可以自定義一個從執行到結束的構建流程。例如,可以使用 Knative Build 來獲取、構建和打包程式碼。Build 具備以下功能:
支援 Source 源掛載,目前支援的 Source 源包括:
* git 程式碼倉庫
* 任意容器映象
支援透過 BuildTemplate 建立可重複執行構建的模板
支援 K8s ServiceAccount 身份驗證
典型的 Build 示意圖:
雖然目前 Knative Build 並不提供完整的獨立 CI/CD 解決方案,但它卻提供了一個底層的構建模組,使用者可單獨使用該構建模組在大型系統中實現整合和利用。
Serving
Knative 作為 Severless 框架最終是用來提供服務的, 那麼 Knative Serving 應運而生。
Knative Serving 構建於 Kubernetes 和 Istio 之上,為 Serverless 應用提供部署和服務支援。其特性如下:
快速部署 Serverless 容器
支援自動擴縮容和縮至為 0 例項
基於 Istio 元件,提供路由和網路程式設計
支援部署快照
Knative Serving 中定義了以下 CRD 資源:
Service: 自動管理工作負載整個生命週期。負責建立 Route、Configuration 以及 Revision 資源。透過 Service 可以指定路由流量使用最新的 Revision 還是固定的 Revision
Route:負責對映網路端點到一個或多個 Revision。可以透過多種方式管理流量,包括灰度流量和重新命名路由
Configuration: 負責保持 Deployment 的期望狀態,提供了程式碼和配置之間清晰的分離,並遵循應用開發的 12 要素。修改一次 Configuration 產生一個 Revision
Revision:Revision 資源是對工作負載進行的每個修改的程式碼和配置的時間點快照。Revision 是不可變物件,可以長期保留
資源關係圖:
Eventing
Knative Eventing 旨在滿足雲原生開發中通用需求, 以提供可組合的方式繫結事件源和事件消費者。其設計目標:
Knative Eventing 提供的服務是鬆散耦合,可獨立開發和部署。服務可跨平臺使用(如 Kubernetes, VMs, SaaS 或者 FaaS)
事件的生產者和事件的消費者是相互獨立的。任何事件的生產者(事件源)可以先於事件的消費者監聽之前產生事件,同樣事件的消費者可以先於事件產生之前監聽事件
支援第三方的服務對接該 Eventing 系統
確保跨服務的互操作性
事件處理示意圖:
如上圖所示,Eventing 主要由事件源(Event Source)、事件處理(Flow)以及事件消費者(Event Consumer)三部分構成。
當前支援以下幾種型別的事件源:
ApiserverSource:每次建立或更新 Kubernetes 資源時,ApiserverSource 都會觸發一個新事件
GitHubSource:GitHub 操作時,GitHubSource 會觸發一個新事件
GcpPubSubSource: GCP 雲平臺 Pub/Sub 服務會觸發一個新事件
AwsSqsSource:Aws 雲平臺 SQS 服務會觸發一個新事件
ContainerSource: ContainerSource 將例項化一個容器,透過該容器產生事件
CronJobSource: 透過 CronJob 產生事件
KafkaSource: 接收 Kafka 事件並觸發一個新事件
CamelSource: 接收 Camel 相關元件事件並觸發一個新事件
當前 Knative 支援如下事件接收處理:
直接事件接收
透過事件源直接轉發到單一事件消費者。支援直接呼叫 Knative Service 或者 Kubernetes Service 進行消費處理。這樣的場景下,如果呼叫的服務不可用,事件源負責重試機制處理
透過事件通道(Channel)以及事件訂閱(Subscriptions)轉發事件處理
這樣的情況下,可以透過 Channel 保證事件不丟失並進行緩衝處理,透過 Subscriptions 訂閱事件以滿足多個消費端處理
透過 brokers 和 triggers 支援事件消費及過濾機制
從 v0.5 開始,Knative Eventing 定義 Broker 和 Trigger 物件,實現了對事件進行過濾(亦如透過 ingress 和 ingress controller 對網路流量的過濾一樣)透過定義 Broker 建立 Channel,透過 Trigger 建立 Channel 的訂閱(subscription),併產生事件過濾規則。
為了滿足將事件傳送到不同型別的服務進行消費, Knative Eventing 透過多個 k8s 資源定義了兩個通用的介面:
Addressable 介面提供可用於事件接收和傳送的 HTTP 請求地址,並透過status.address.hostname欄位定義。作為一種特殊情況,Kubernetes Service 物件也可以實現 Addressable 介面
Callable 介面接收透過 HTTP 傳遞的事件並轉換事件。可以按照處理來自外部事件源事件的相同方式,對這些返回的事件做進一步處理
當前 Knative 支援透過 Knative Service 或者 Kubernetes Service 進行消費事件。
另外針對事件消費者,如何事先知道哪些事件可以被消費? Knative Eventing 在最新的 0.6 版本中提供 Registry 事件序號產生器制, 這樣事件消費者就可以事先透過 Registry 獲得哪些 Broker 中的事件型別可以被消費。
總結
Knative 使用 Build 提供雲原生“從原始碼到容器”的映象構建能力,透過 Serving 部署容器並提供通用的服務模型,同時以 Eventing 提供事件全域性訂閱、傳遞和管理能力,實現事件驅動。這就是 Knative 呈現給我們的標準 Serverless 編排框架。
Knative 系列文章
阿里巴巴雲原生公眾號將推出一系列的文章由淺入深的來介紹 Knative 的使用以及剖析其內部實現。
Knative 系列文章目錄
Knative 入門
* Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件
Knative 基本功能深入剖析
Knative 高階功能深入剖析
Knative 邊界、理念
Knative 最佳實踐
Knative 案例
Knative 原始碼解讀
Knative 社群
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555606/viewspace-2646111/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料核心元件介紹大資料元件
- 【Netty】Netty核心元件介紹Netty元件
- Redux 包教包會(一):介紹 Redux 三大核心概念Redux
- [譯]介紹 `core.async` 核心的一些概念
- 介紹基於OpenFaaS函式的knative Build教程 - alexellis函式UI
- 賬務核心介紹
- 瀏覽器核心介紹瀏覽器
- 核心概念
- 微服務架構 SpringCloud - 元件和概念介紹微服務架構SpringGCCloud元件
- 深入理解Vue元件3大核心概念Vue元件
- nodejs常用核心模組介紹NodeJS
- iOS核心動畫型別介紹iOS動畫型別
- Redux 核心概念Redux
- 【RabbitMQ】核心概念MQ
- Redis 核心概念Redis
- ES 核心概念
- Nginx 架構——【核心流程+模組介紹】Nginx架構
- 嵌入式ARM核心板介紹
- Webpack核心概念解析Web
- ECS的核心概念
- Hyperledger Fabric 核心概念
- Laravel核心概念剖析Laravel
- Maven介紹,包括作用、核心概念、用法、常用命令、擴充套件及配置Maven套件
- GitHub - knative/eventing-contrib: 基於knative的Event Sources事件溯源Github事件
- Spring Cloud Alibaba Sentinel 主要原理和核心類介紹SpringCloud
- 【Linux】Linux版本介紹(核心版本和發行版本)Linux
- Ceph核心元件元件
- OpenStack核心元件元件
- Oracle核心元件Oracle元件
- CSS 核心概念歸納之定位和 BFCCSS
- Docker_02 核心概念Docker
- Spark 的核心概念 RDDSpark
- Laravel中的核心概念Laravel
- RPC核心概念理解RPC
- Kubernetes核心概念
- webpack(2)webpack核心概念Web
- laravel核心概念總結Laravel
- BOSS核心概念模型模型