Knative 是一款基于 Kubernetes 的 Serverless 架構。其目标是制定雲原生、跨平台的 Serverless 編排标準。本文将介紹零基礎的同學如何上手 Knative 應用。
作者|劉宇
前言:Knative 是一款基于 Kubernetes 的 Serverless 架構。其目标是制定雲原生、跨平台的 Serverless 編排标準。
Knative 通過整合容器建構(或者函數)、工作負載管理(動态擴縮)以及事件模型這三者實作其 Serverless 标準。
在 Knative 體系架構下,各角色的協作關系如下圖所示。
開發者是指 Serverless 服務的開發人員可以直接使用原生 Kubernetes API 基于 Knative 部署 Serverless 服務。
貢獻者主要是指社群的貢獻者。
Knative 可以被內建到支援的環境中,例如雲廠商或者企業内部。目前,Knative 是基于Kubernetes來實作的,是以可以認為有 Kubernetes 的地方就可以部署 Knative。
使用者指終端使用者,其通過Istio網關通路服務或者事件系統觸發 Knative 中的 Serverless 服務。
作為一個通用的 Serverless 架構,Knative 由 3 個核心元件組成。
Tekton:提供從源碼到鏡像的通用建構能力。Tekton 元件主要負責從代碼倉庫擷取源碼并編譯成鏡像,推送到鏡像倉庫。所有這些操作都是在 Kubernetes Pod 中進行的。
Eventing:提供事件的接入、觸發等一整套事件管理能力。Eventing 元件針對 Serverless 事件驅動模式做了一套完整的設計,包括外部事件源的接入、事件注冊、訂閱以及事件過濾等功能。事件模型可以有效地解耦生産者和消費者的依賴關系。生産者可以在消費者啟動之前生成事件,消費者也可以在生産者啟動之前監聽事件。
在 Knative 體系架構下各角色的協作關系
Serving:管理 Serverless 工作負載,可以和事件很好地結合,并且提供了基于請求驅動的自動伸縮能力,而且在沒有服務需要處理的時候可以縮容到零。Serving 元件的職責是管理工作負載以對外提供服務。Serving 元件最重要的特性就是自動伸縮的能力。目前,其伸縮邊界無限制。Serving 還具有灰階釋出能力。
本文将會以在阿裡雲部署 Kantive 服務為例,詳細說明如何部署 Knative 相關服務。首先,登入到容器服務管理控制台,如圖所示。
阿裡雲容器服務管理控制台
如沒有叢集,可以先選擇建立叢集,如下圖所示。
配置與建立叢集
建立叢集比較緩慢,耐心等待叢集建立完成,成功之後如圖所示。
叢集建立成功示意圖
進入叢集之後,選擇左側的“應用”,找到 “Knative” 并點選“一鍵部署”,如圖所示。
建立 Knative 應用
稍等片刻,Knative 安裝完成之後,可以看到核心元件已經處于“已部署”狀态,如圖所示。
Knative 應用部署完成
至此,我們完成了 Knative 的部署。
首先需要建立一個 EIP,并将其綁定到 API Server 服務上,如下圖所示。
圖為 API Server 綁定 EIP
完成之後,進行 Serverless 應用的測試。選擇應用中的 “Kantive 應用”,并且在服務管理中選擇“使用模闆建立”,如圖所示。
快速建立示例應用
建立完成之後,可以看到控制台已經出現一個 Serverless 應用,如圖所示。
示例應用建立成功
此時,我們可以點選應用名稱檢視該應用的詳情,如下圖所示。
檢視示例應用詳情
為了便于測試,可以在本地設定 Host:
101.200.87.158 helloworld-go.default.example.com
設定完成之後,在浏覽器中打開系統配置設定的域名,可以看到已經輸出預期的結果,如圖所示。
浏覽器測試示例應用
至此,我們完成了一個基于 Knative 的 Serverless 應用的部署和測試。
此時,我們還可以通過 CloudShell 進行叢集的管理等。在叢集清單頁面,選擇通過 CloudShell 進行管理,如圖所示。
叢集管理清單
通過 CloudShell 管理已建立的叢集,如圖所示。
CloudShell 視窗
執行指令:
kubectl get knative
可以看到,剛部署的 Knative 應用,如圖所示。
CloudShell 檢視 Knative 應用
關于作者:劉宇(江昱)國防科技大學電子資訊專業在讀博士,阿裡雲 Serverless 産品經理,阿裡雲 Serverless 雲布道師,CIO 學院特聘講師。