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還具有灰度發佈能力。
Knative部署
本節將會以在阿里雲部署Kantive服務為例,詳細説明如何部署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應用所示。