Kubeless 架構設計 | 玩轉 Kubeless

Kubeless 是 Kubernetes 原生的 Serverless 框架。
本文將介紹 Kubeless 架構設計。
 

Kubeless 三個核心概念

Kubeless 有三個核心概念,分別是:
  • Functions(函數)
  • Triggers(觸發器) 
  • Runtime(運行時)
 
函數表示的是要被執行的代碼。除了代碼,它還包括運行時的依賴項以及構建指令等元數據信息。函數有獨立的生命週期。函數支持以下方法:
  • Deploy(部署):部署函數實例。這個步驟可能涉及構建函數鏡像或者重用預先生成的鏡像,並將其部署到集羣中。
  • Execute(執行):直接調用函數,不通過任何事件源。
  • Get(獲取):返回函數元數據和規格。
  • Update(更新):修改函數元數據和規格。
  • Delete(刪除):刪除函數,並從集羣中清理爲該函數配置的所有資源。
  • List(列表):顯示函數及其元數據的列表。
  • Logs(日誌):返回函數生成的日誌。
 
觸發器表示的是關聯到函數的事件源。當事件源中發生事件時,Kubeless 將確保最多調用一次關聯的函數。觸發器可以與單個函數關聯,也可以與多個函數關聯,具體取決於事件源類型。它們與函數的生命週期是脫鉤的。觸發器支持以下方法:
  • Create(創建):創建一個新的觸發器,其中包含事件源和相關函數的詳細信息。
  • Update(更新):修改觸發器規格。
  • Delete(刪除):刪除觸發器,並清理爲觸發器配置的所有資源。
  • List(列表):顯示觸發器及其規格的列表。
目前 Kubeless 官方支持5種觸發器:HTTP Trigger、CronJob Trigger、Kafka Trigger、NATS Trigger、AWS Kinesis Trigger。
安裝 Kubeless 的時候,默認安裝了 HTTP Trigger 和 CronJob Trigger,其他觸發器如果有需要,需要自行安裝。
此外,用戶還可以自定義觸發器。
 
運行時表示函數被執行時的語言和特定的運行環境。
可以通過 kubeless get-server-config 命令查看當前支持的運行時列表。
$ kubeless get-server-config
INFO[0000] Current Server Config:
INFO[0000] Supported Runtimes are: ballerina0.981.0, dotnetcore2.0, dotnetcore2.1, dotnetcore2.2, dotnetcore3.1, go1.13, go1.14, java1.8, java11, nodejs6, nodejs8, nodejs10, nodejs12, php7.2, php7.3, python2.7, python3.4, python3.6, python3.7, ruby2.3, ruby2.4, ruby2.5, ruby2.6, jvm1.8, nodejs_distroless8, nodejsCE8, vertx1.8
每種運行時都封裝在一個容器鏡像中。這些鏡像的引用被注入到 Kubeless 的配置中。
此外,除了 Kubeless 默認支持的運行時外,用戶還可以自定義運行時。
 

Kubeless 架構設計

Kubeless 利用 Kuberbetes 的多個概念來支持在 Kubernetes 之上部署函數。詳細說明如下:
  • 自定義 CRD 用於表示函數,名稱爲 functions.kubeless.io 的 CRD 表示 Function
  • 每個事件源都建模爲單獨的 Trigger CRD 對象
    • 名稱爲 httptriggers.kubeless.io 的 CRD 表示 HTTPTrigger
    • 名稱爲 cronjobtriggers.kubeless.io 的 CRD 表示 CronJobTrigger
  • 單獨的 CRD controller 用於處理與 CRD 對象相對應的 CRUD 操作
    • kubeless-function-controller 用於處理 Function 對應的 CRUD 操作
    • http-trigger-controller 用於處理 HTTPTrigger 對應的 CRUD 操作
    • cronjob-trigger-controller 用於處理 CronJobTrigger 對應的 CRUD 操作
  • Deployment/Pod 運行相應的運行時
  • ConfigMap 用於將函數代碼注入到 運行時 Pod
  • Init Container 用於加載函數可能具有的依賴
  • Service 用於暴露函數
  • Ingress 資源用於將函數暴露到集羣外
  • 函數的調用入口通過 Service 實現
  • 基於 Ingress 實現函數的 HTTP Trigger
  • 基於 CronJob 實現函數的 CronJobTrigger
 
使用 Kubernetes CRD 和 CRD controller 構成了 Kubeless 的核心設計宗旨。
對函數和觸發器使用單獨的 CRD 可以將關注點清楚地分開。
使用單獨的 CRD controller 可使代碼保持解耦和模塊化。
 
 
參考:
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章