Serverless 工程實踐 | 零基礎上手 Knative 應用
作者|劉宇
前言:Knative 是一款基於 Kubernetes 的 Serverless 框架。其目標是制定雲原生、跨平臺的 Serverless 編排標準。
Knative 介紹
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 還具有灰度釋出能力。
Knative 部署
本文將會以在阿里雲部署 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 學院特聘講師。