Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

阿里系統軟體技術發表於2019-05-29

Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

作者 | 阿里雲智慧事業群高階開發工程師 元毅

劃重點


初識 Knative:  跨平臺的 Serverless 編排框架 讓我們對於 Knative 有了初步瞭解,Knative 主要由 Build、Serving 和 Eventing 三大核心元件構成。Knative 正是依靠這三個核心元件,驅動著 Knative 這艘 Serverless 巨輪前行,本文就來分別介紹一下這三個核心元件。


Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

Build


Knative Build 是基於現有的 Kubernetes 能力之上,提供的一套標準化、可移植、可複用的容器映象構建方式。透過在 Kubernetes 上執行復雜的構建任務,Knative Build 使你不必再單獨開發和重複這些映象構建過程, 從而透過系統化、工程化的方式,減少了映象構建時間及成本。


Build 透過 Kubernetes 自定義資源定義(CRD)實現。 透過 Build 你可以自定義一個從執行到結束的構建流程。例如,可以使用 Knative Build 來獲取、構建和打包程式碼。Build 具備以下功能:


  • 支援 Source 源掛載,目前支援的 Source 源包括:

    * git 程式碼倉庫

    * 任意容器映象

  • 支援透過 BuildTemplate 建立可重複執行構建的模板

  • 支援 K8s ServiceAccount 身份驗證


典型的 Build 示意圖:


Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件


雖然目前 Knative Build 並不提供完整的獨立 CI/CD 解決方案,但它卻提供了一個底層的構建模組,使用者可單獨使用該構建模組在大型系統中實現整合和利用。


Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

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 是不可變物件,可以長期保留


資源關係圖:

Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件


Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

Eventing


Knative Eventing 旨在滿足雲原生開發中通用需求, 以提供可組合的方式繫結事件源和事件消費者。其設計目標:


  • Knative Eventing 提供的服務是鬆散耦合,可獨立開發和部署。服務可跨平臺使用(如 Kubernetes, VMs, SaaS 或者 FaaS)

  • 事件的生產者和事件的消費者是相互獨立的。任何事件的生產者(事件源)可以先於事件的消費者監聽之前產生事件,同樣事件的消費者可以先於事件產生之前監聽事件

  • 支援第三方的服務對接該 Eventing 系統

  • 確保跨服務的互操作性


事件處理示意圖:

Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件


如上圖所示,Eventing 主要由事件源(Event Source)、事件處理(Flow)以及事件消費者(Event Consumer)三部分構成。


事件源(Event Source)


當前支援以下幾種型別的事件源:


  • ApiserverSource:每次建立或更新 Kubernetes 資源時,ApiserverSource 都會觸發一個新事件

  • GitHubSource:GitHub 操作時,GitHubSource 會觸發一個新事件

  • GcpPubSubSource: GCP 雲平臺 Pub/Sub 服務會觸發一個新事件

  • AwsSqsSource:Aws 雲平臺 SQS 服務會觸發一個新事件

  • ContainerSource: ContainerSource 將例項化一個容器,透過該容器產生事件

  • CronJobSource: 透過 CronJob 產生事件

  • KafkaSource: 接收 Kafka 事件並觸發一個新事件

  • CamelSource: 接收 Camel 相關元件事件並觸發一個新事件


事件接收/轉發(Flow)


當前 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),併產生事件過濾規則。


事件消費者(Event Consumer)


為了滿足將事件傳送到不同型別的服務進行消費, 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 使用 Build 提供雲原生“從原始碼到容器”的映象構建能力,透過 Serving 部署容器並提供通用的服務模型,同時以 Eventing 提供事件全域性訂閱、傳遞和管理能力,實現事件驅動。這就是 Knative 呈現給我們的標準 Serverless 編排框架。


Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

Knative 系列文章


阿里巴巴雲原生公眾號將推出一系列的文章由淺入深的來介紹 Knative 的使用以及剖析其內部實現。

Knative 系列文章目錄


  • 初識 Knative

  • Knative 入門

    * Knative 核心概念介紹:Build、Serving 和 Eventing 三大核心元件

  • Knative 基本功能深入剖析

  • Knative 高階功能深入剖析

  • Knative 邊界、理念

  • Knative 最佳實踐

  • Knative 案例

  • Knative 原始碼解讀

  • Knative 社群

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555606/viewspace-2646111/,如需轉載,請註明出處,否則將追究法律責任。

相關文章