Serverless 工程實踐 | 零基礎上手 Knative 應用
- 2021 年 10 月 12 日
- 筆記
- knative, Serverless, 雲原生, 阿里雲
作者|劉宇
前言: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 學院特聘講師。