Knative 主要由 Build、Serving 和 Eventing 三大核心組件構成。Knative 正是依靠這三個核心組件,驅動着 Knative 這艘 Serverless 巨輪前行。下面讓咱們來分別介紹一下這三個核心組件。git
Knative Build 是基於現有的 Kubernetes 能力之上,提供的一套標準化、可移植、可複用的容器鏡像構建方式。經過在 Kubernetes 上運行復雜的構建任務,Knative Build 使你沒必要再單獨開發和重複這些鏡像構建過程, 從而經過系統化、工程化的方式,減小了鏡像構建時間及成本。編程
Build 經過 Kubernetes 自定義資源定義(CRD)實現。 經過 Build 你能夠自定義一個從運行到結束的構建流程。例如,可使用 Knative Build 來獲取、構建和打包代碼。Build 具有如下功能:網絡
支持 Source 源掛載,目前支持的 Source 源包括:框架
典型的 Build 示意圖:less
雖然目前 Knative Build 並不提供完整的獨立 CI/CD 解決方案,但它卻提供了一個底層的構建模塊,用戶可單獨使用該構建模塊在大型系統中實現集成和利用。ui
Knative 做爲 Severless 框架最終是用來提供服務的, 那麼 Knative Serving 應運而生。
Knative Serving 構建於 Kubernetes 和 Istio 之上,爲 Serverless 應用提供部署和服務支持。其特性以下:spa
Knative Serving 中定義瞭如下 CRD 資源:設計
資源關係圖:
code
Knative Eventing 旨在知足雲原生開發中通用需求, 以提供可組合的方式綁定事件源和事件消費者。其設計目標:server
事件處理示意圖:
如上圖所示,Eventing 主要由事件源(Event Source)、事件處理(Flow)以及事件消費者(Event Consumer)三部分構成。
當前支持如下幾種類型的事件源:
當前 Knative 支持以下事件接收處理:
從 v0.5 開始,Knative Eventing 定義 Broker 和 Trigger 對象,實現了對事件進行過濾(亦如經過 ingress 和 ingress controller 對網絡流量的過濾同樣)。
經過定義 Broker 建立 Channel,經過 Trigger 建立 Channel 的訂閱(subscription),併產生事件過濾規則。
爲了知足將事件發送到不一樣類型的服務進行消費, Knative Eventing 經過多個 k8s 資源定義了兩個通用的接口:
status.address.hostname
字段定義。做爲一種特殊狀況,Kubernetes Service 對象也能夠實現 Addressable 接口當前 Knative 支持經過 Knative Service 或者 Kubernetes Service 進行消費事件。
另外針對事件消費者,如何事先知道哪些事件能夠被消費? Knative Eventing 在最新的 0.6 版本中提供 Registry 事件註冊機制, 這樣事件消費者就能夠事先經過 Registry 得到哪些 Broker 中的事件類型能夠被消費。
Knative 使用 Build 提供雲原生「從源代碼到容器」的鏡像構建能力,經過 Serving 部署容器並提供通用的服務模型,同時以 Eventing 提供事件全局訂閱、傳遞和管理能力,實現事件驅動。這就是 Knative 呈現給咱們的標準 Serverless 編排框架。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。