初識 Knative: 跨平臺的 Serverless 編排框架

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 產品的實現好比:less

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

業務代碼部署到 Serverless 平臺上就離不開源碼的編譯、部署和事件的管理。然而不管是開源的解決方案仍是各公有云的 FAAS 產品你們的實現方式你們都各不相同,缺少統一的標準致使市場呈現碎片化。所以不管選擇哪個方案都面臨供應商綁定的風險。函數

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

咱們看一下在 Knative 體系下各個角色的協做關係:阿里雲

  • Developers
    Serverless 服務的開發人員能夠直接使用原生的 Kubernetes API 基於 Knative 部署 Serverless 服務
  • Contributors
    主要是指社區的貢獻者
  • Operators
    Knative 能夠被集成到任何支持的環境中,好比:雲廠商、或者企業內部。目前 Knative 是基於 Kubernetes 來實現的,有 Kubernetes 的地方就能夠部署 Knative
  • Users
    終端用戶經過 Istio 網關訪問服務,或者經過事件系統觸發 Knative 中的 Serverless 服務

Knative 核心組件

做爲一個通用的 Serverless 框架 Knative 由三個核心組件組成:spa

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

Build 組件主要負責從代碼倉庫獲取源碼並編譯成鏡像和推送到鏡像倉庫。而且全部這些操做都是在 Kubernetes Pod 中進行的。設計

Eventing 組件針對 Serverless 事件驅動模式作了一套完整的設計。包括外部事件源的接入、事件註冊和訂閱、以及對事件的過濾等功能。事件模型能夠有效的解耦生產者和消費者的依賴關係。生產者能夠在消費者啓動以前產生事件,消費者也能夠在生產者啓動以前「監聽事件」。blog

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 的使用以及剖析其內部實現。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索