Serverless 工程實(shí)踐|快速搭建 Kubeless 平臺(tái)
快速搭建 Kubeless 平臺(tái)
Kubeless 簡(jiǎn)介
Kubeless 是基于 Kubernetes 的原生無(wú)服務(wù)器框架。其允許用戶部署少量的代碼(函數(shù)),而無(wú)須擔(dān)心底層架構(gòu)。它被部署在 Kubernetes 集群之上,并充分利用 Kubernetes 的特性及資源類(lèi)型,可以克隆 AWS Lambda、Azure Functions、Google Cloud Functions 上的內(nèi)容。
Kubeless 主要特點(diǎn)可以總結(jié)為以下幾個(gè)方面。
支持 Python、Node.js、Ruby、PHP、Go、.NET、Ballerina 語(yǔ)言編寫(xiě)和自定義運(yùn)行時(shí)。
Kubeless CLI 符合 AWS Lambda CLI。
事件觸發(fā)器使用 Kafka 消息系統(tǒng)和 HTTP 觸發(fā)器。
Prometheus 默認(rèn)監(jiān)視函數(shù)的調(diào)用和延時(shí)。
支持 Serverless 框架插件。
由于 Kubeless 的功能特性是建立在 Kubernetes 之上的,因此對(duì)于熟悉 Kubernetes 的人來(lái)說(shuō)非常容易部署 Kubeless。其主要實(shí)現(xiàn)是將用戶編寫(xiě)的函數(shù)在 Kubernetes 中轉(zhuǎn)變?yōu)?CRD(Custom Resource Definition,自定義資源),并以容器的方式運(yùn)行在集群中。
Kubeless 部署
在已有的 Kubernetes 集群上進(jìn)行 Kubeless 服務(wù)的創(chuàng)建:
- 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
創(chuàng)建成功后如圖所示
安裝和配置 Kubeless
查看基本信息:
kubectl get pods -n kubeless
相關(guān) Pod 信息如圖所示
查看 Kubeless 相關(guān) Pod
查看 Deployment 信息:
kubectl get deployment -n kubeless
其相關(guān)信息如圖所示
查看 Kubeless Deployment 相關(guān)信息
查看 customresourcedefinition 信息:
kubectl get customresourcedefinition
其相關(guān)信息如圖所示
查看 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 命令行工具
體驗(yàn)測(cè)試
創(chuàng)建測(cè)試代碼 helloworld.py :
def hello(event, context): print(event) return event['data']
部署項(xiàng)目:
- ./bundles/kubeless_linux-amd64/kubeless function deploy hello-world --runtime python3.6 --from-file helloworld.py --handler helloworld.hello
部署成功之后,查看項(xiàng)目信息:
kubectl get functions
函數(shù)列表如圖所示
查看函數(shù)列表
查看實(shí)例函數(shù):
./bundles/kubeless_linux-amd64/kubeless function ls
函數(shù)狀態(tài)如圖所示
觸發(fā)函數(shù):
- ./bundles/kubeless_linux-amd64/kubeless function call hello-world --data 'Hello world!'
觸發(fā)完成之后,看到輸出結(jié)果:
查看實(shí)例中輸出的日志,如圖所示
在實(shí)例中查看日志
至此,我們?cè)?Kubernetes 集群上成功地創(chuàng)建了 Kubeless 服務(wù),并順利地體驗(yàn)了 Kubeless 版的 Hello World 實(shí)現(xiàn)。