fission是目前流行的FaaS開源項目之一,目前可以支持多種觸發如HTTP調用、定時觸發以及MQ消息觸發。而且還支持多語言如Java、Go、Python。
Fission 是一個構建在 Kubernetes 之上的 開源FaaS框架。Fission 利用Kubernetes 集群管理、調度、網絡管理等,將容器編排功能留給 Kubernetes,而 Fission 就專注於 FaaS 特性。Fission通過函數輕鬆的在 Kubernetes 上創建服務。Fission工作在源碼級別函數和抽象的容器鏡像之上,簡化了 Kubernetes 的學習曲線,讓你不用深入了解 Kubernetes 就能創建出有用的服務。
Controller 提供 Fission API,所有其他組件通過關注 Controller 來更新。Router 被暴露為 Kubernetes 的服務,可能是 LoadBalancer 類型或 NodePort 類型,依賴於 Kubernetes 集群在哪裡託管。
當 Router 獲得請求,它會查找緩存,看是否有一個路由過去的服務。如果沒有,它會查找匹配請求的函數,並且向 poolmgr 請求一個新的實例。poolmgr 有一個空閒 pods 池,它會選擇一個 pod,將函數加載進去(將請求發送到 pod 的容器中),並將 pod 地址返回給 Router。Router 將請求代理到這個pod。這個 pod 也會被緩存給隨後的請求,如果空閒了好幾分鐘,那就會被殺掉。
下面我們實戰安裝使用一些fission。
安裝fission
使用helm安裝fission。
# export FISSION_NAMESPACE="fission"# kubectl create namespace $FISSION_NAMESPACE# kubectl create -k "github.com/fission/fission/crds/v1?ref=1.13.0"# helm repo add fission-charts https://fission.github.io/fission-charts/# helm repo update# helm install --version 1.13.0 --namespace $FISSION_NAMESPACE fission fission-charts/fission-all
安裝fission命令行工具
# curl -Lo fission https://github.com/fission/fission/releases/download/1.13.0/fission-1.13.0-linux-amd64 \ && chmod +x fission && sudo mv fission /usr/local/bin/
測試fission
我們創建一個函數測試一下fission。
創建一個nodejs的運行環境# fission env create --name nodejs --image fission/node-env:latest編寫一個測試函數# cat hello.jsmodule.exports = async function(context) { return { status: 200, body: "hello, world!\n" };}# 創建函數,使用上面創建的運行環境# fission function create --name hello --env nodejs --code hello.js#測試函數# fission function test --name helloHello, world!
可以看到fission會自動拉起容器執行函數。
# kubectl get pods -n fission-functionNAME READY STATUS RESTARTS AGEpoolmgr-nodejs-default-13182-6488cc45f-jm9vp 2/2 Running 0 2mpoolmgr-nodejs-default-13182-6488cc45f-p6vj6 2/2 Running 0 2m