天天看點

初識 Knative: 跨平台的 Serverless 編排架構

原文作者:冬島

原文連結:

https://developer.aliyun.com/article/725783?spm=a2c6h.12873581.0.0.5729115eLl6St3&groupCode=cloudnative 更多雲原生技術資訊可關注 阿裡巴巴雲原生技術圈

Knative 是什麼

Knative 是 Google 在 2018 的 Google Cloud Next 大會上釋出的一款基于 Kubernetes 的 Serverless 架構。Knative 一個很重要的目标就是制定雲原生、跨平台的 Serverless 編排标準。Knative 是通過整合容器建構(或者函數)、工作負載管理(和動态擴縮)以及事件模型這三者來實作的這一 Serverless 标準。Knative 社群的主要貢獻者有 Google、Pivotal、IBM、Red Hat。可見其陣容強大, CloudFoundry、OpenShift 這些 PAAS 提供商都在積極的參與 Knative 的建設。

Knative 出現的背景

在 Knative 之前社群已經有很多 Serverless 解決方案,如下所示這些:

  • kubeless
  • Fission
  • OpenFaaS
  • Apache OpenWhisk
  • ...

除了上面這些社群的開源解決方案以外各大雲廠商也都有各自的 FAAS 産品的實作比如:

  • AWS Lambda
  • Google Cloud Functions
  • Microsoft Azure Functions
  • 阿裡雲的函數計算

業務代碼部署到 Serverless 平台上就離不開源碼的編譯、部署和事件的管理。然而無論是開源的解決方案還是各公有雲的 FAAS 産品大家的實作方式大家都各不相同,缺乏統一的标準導緻市場呈現碎片化。是以無論選擇哪一個方案都面臨供應商綁定的風險。

沒有統一的标準、市場的碎片化這對雲廠商來說使用者 Serverless 上雲就比較困難,對于 PAAS 提供商來說很難做一個通用的 PAAS 平台給使用者使用。基于這樣的背景 Google 牽頭聯合 Pivotal、IBM、Red Hat 等發起了 Knative 項目。

我們看一下在 Knative 體系下各個角色的協作關系:

初識 Knative: 跨平台的 Serverless 編排架構
  • Developers

    Serverless 服務的開發人員可以直接使用原生的 Kubernetes API 基于 Knative 部署 Serverless 服務

  • Contributors

    主要是指社群的貢獻者

  • Operators

    Knative 可以被內建到任何支援的環境中,比如:雲廠商、或者企業内部。目前 Knative 是基于 Kubernetes 來實作的,有 Kubernetes 的地方就可以部署 Knative

  • Users

    終端使用者通過 Istio 網關通路服務,或者通過事件系統觸發 Knative 中的 Serverless 服務

Knative 核心元件

作為一個通用的 Serverless 架構 Knative 由三個核心元件組成:

  • Build:提供從源碼到鏡像的通用建構能力
  • Eventing:提供了事件的接入、觸發等一整套事件管理的能力
  • Serving:管理 Serverless 工作負載,可以和事件很好的結合并且提供了基于請求驅動的自動擴縮的能力,而且在沒有服務需要處理的時候可以縮容到零個執行個體

Build 元件主要負責從代碼倉庫擷取源碼并編譯成鏡像和推送到鏡像倉庫。并且所有這些操作都是在 Kubernetes Pod 中進行的。

Eventing 元件針對 Serverless 事件驅動模式做了一套完整的設計。包括外部事件源的接入、事件注冊和訂閱、以及對事件的過濾等功能。事件模型可以有效的解耦生産者和消費者的依賴關系。生産者可以在消費者啟動之前産生事件,消費者也可以在生産者啟動之前“監聽事件”。

Serving 元件的職責是管理工作負載以對外提供服務。對于 Knative Serving 元件最重要的特性就是自動伸縮的能力,目前伸縮邊界支援從 0 到無限大。Serving 還有一個比較重要的功能就是灰階釋出能力。

Knative 雖然是基于 Kubernetes 實作,不過這并不代表 Kubernetes 的所有功能都能在 Knative 中使用。因為 Knative 針對 Serverless 場景做了專門的設計,如一個 Pod 中隻能有一個 Container,一個 Container 隻能有一個 Port 等。具體這些詳細的内容我們會在後續的文章中陸續介紹。

Knative 的優勢

Knative 一方面基于 Kubernetes 實作 Serverless 編排,另外一方面 Knative 還基于 Istio 實作服務的接入、服務路由的管理以及度釋出等功能。Knative 是在已有的雲原生基礎之上建構的,有很好的社群基礎。Knative 一經開源就得到了大家的追捧,其中的主要緣由有:

  • Knative 的定位不是 PAAS 而是一個通用的 Serverless 編排架構,大家可以基于此架構建構自己的 Serverless PAAS
  • Knative 對于 Serverless 架構的設計是标準先行。比如之前的 FAAS 解決方案每一個都有一套自己的事件标準,互相之間無法通用。而 Knative 首先提出了 CloudEvent 這一标準,然後基于此标準進行設計
  • 完備的社群生态:Kubernetes、ServiceMesh 等社群都是 Knative 的支援者
  • 跨平台:因為 Knative 是建構在 Kubernetes 之上的,而 Kubernetes 在不同的雲廠商之間幾乎可以提供通用的标準。是以 Knative 也就實作了跨平台的能力,沒有供應商綁定的風險
  • 完備的 Serverless 模型設計:和之前的 Serverless 解決方案相比 Knative 各方面的設計更加完備。比如:
    • 事件模型非常完備,有注冊、訂閱、以及外部事件系統的接入等等一整套的設計
    • 比如從源碼到鏡像的建構
    • 比如 Serving 可以做到按比例的灰階釋出

關于 Knative 出現的背景、要解決的問題、核心概念以及其優勢就介紹到這裡,後續我們會有一系列的文章由淺入深的來介紹 Knative 的使用以及剖析其内部實作。

阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”

繼續閱讀