Serverless 工程實踐|快速搭建 Kubeless 平臺
快速搭建 Kubeless 平臺
Kubeless 簡介
Kubeless 是基于 Kubernetes 的原生無服務器框架。其允許用戶部署少量的代碼(函數),而無須擔心底層架構。它被部署在 Kubernetes 集群之上,并充分利用 Kubernetes 的特性及資源類型,可以克隆 AWS Lambda、Azure Functions、Google Cloud Functions 上的內容。
Kubeless 主要特點可以總結為以下幾個方面。
支持 Python、Node.js、Ruby、PHP、Go、.NET、Ballerina 語言編寫和自定義運行時。
Kubeless CLI 符合 AWS Lambda CLI。
事件觸發器使用 Kafka 消息系統和 HTTP 觸發器。
Prometheus 默認監視函數的調用和延時。
支持 Serverless 框架插件。
由于 Kubeless 的功能特性是建立在 Kubernetes 之上的,因此對于熟悉 Kubernetes 的人來說非常容易部署 Kubeless。其主要實現是將用戶編寫的函數在 Kubernetes 中轉變為 CRD(Custom Resource Definition,自定義資源),并以容器的方式運行在集群中。
Kubeless 部署
在已有的 Kubernetes 集群上進行 Kubeless 服務的創建:
- export RELEASE=$(curl -s https://api.github.com/repos/kubeless/kubeless/releases/ latest | grep tag_name | cut -d '"' -f 4)kubectl create ns kubelesskubectl create -f https://github.com/kubeless/kubeless/releases/download/$RELEASE/ kubeless-$RELEASE.yaml
創建成功后如圖所示
安裝和配置 Kubeless
查看基本信息:
kubectl get pods -n kubeless
相關 Pod 信息如圖所示
查看 Kubeless 相關 Pod
查看 Deployment 信息:
kubectl get deployment -n kubeless
其相關信息如圖所示
查看 Kubeless Deployment 相關信息
查看 customresourcedefinition 信息:
kubectl get customresourcedefinition
其相關信息如圖所示
查看 customresourcedefinition 信息
下載命令行工具
下載 Kubeless 工具,并解壓:
- export OS=$(uname -s| tr '[:upper:]' '[:lower:]')curl -OL https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless_ $OS-amd64.zipunzip kubeless_$OS-amd64.zip
解壓之后查看:
./bundles/kubeless_linux-amd64/kubeless
具體如圖所示
使用 Kubeless 命令行工具
體驗測試
創建測試代碼 helloworld.py :
def hello(event, context): print(event) return event['data']
部署項目:
- ./bundles/kubeless_linux-amd64/kubeless function deploy hello-world --runtime python3.6 --from-file helloworld.py --handler helloworld.hello
部署成功之后,查看項目信息:
kubectl get functions
函數列表如圖所示
查看函數列表
查看實例函數:
./bundles/kubeless_linux-amd64/kubeless function ls
函數狀態如圖所示
觸發函數:
- ./bundles/kubeless_linux-amd64/kubeless function call hello-world --data 'Hello world!'
觸發完成之后,看到輸出結果:
查看實例中輸出的日志,如圖所示
在實例中查看日志
至此,我們在 Kubernetes 集群上成功地創建了 Kubeless 服務,并順利地體驗了 Kubeless 版的 Hello World 實現。