Fission 简介
Fission 是由私有云服务提供商 Platform9 领导开源的 serverless 产品,它借助 kubernetes 灵活强大的编排能力完成容器的管理调度工作,而将重心投入到 FaaS 功能的开发上,其发展目标是成为 AWS lambda 的开源替代品。从 CNCF 视角,fission 属于 serverless 平台型产品。
核心概念
Fission 包含 Function、Environment 、Trigger 三个核心概念,其关系如下图所示:
- Function - 代表用特定语言编写的需要被执行的代码片段。
- Environment- 用于运行用户函数的特定语言环境。
- Trigger - 用于关联函数和事件源。如果把事件源比作生产者,函数比作执行者,那么触发器就是联系两者的桥梁。
关键组件
Fission 包含 Controller、Router、Executor 三个关键组件:
- Controller - 提供了针对 fission 资源的增删改查操作接口,包括 functions、triggers、environments、Kubernetes event watches 等。它是 fission CLI 的主要交互对象。
- Router - 函数访问入口,同时也实现了 HTTP 触发器。它负责将用户请求以及各种事件源产生的事件转发至目标函数。
- Executor - fission 包含 PoolManager 和 NewDeploy 两类执行器,它们控制着 fission 函数的生命周期。
fission部署
helm安装
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.17.0"
helm repo add fission-charts https://fission.github.io/fission-charts/
helm repo update
helm install --version v1.17.0 --namespace $FISSION_NAMESPACE fission \
--set serviceType=NodePort,routerServiceType=NodePort \
fission-charts/fission-all
kubectl安装
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.17.0"
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl config set-context --current --namespace=$FISSION_NAMESPACE
kubectl apply -f https://github.com/fission/fission/releases/download/v1.17.0/fission-all-v1.17.0-minikube.yaml
fission客户端安装
fission客户端需要考虑不同的环境,本文是MacOs环境,
Fission CLI Reference | Fission
curl -Lo fission https://github.com/fission/fission/releases/download/v1.17.0/fission-v1.17.0-darwin-amd64 \
&& chmod +x fission && sudo mv fission /usr/local/bin/
部署检测
$ fission check
fission-services
--------------------
√ controller is running fine
√ executor is running fine
√ router is running fine
√ storagesvc is running fine
fission-version
--------------------
√ fission is up-to-date
举例
环境
python
fission environment create --name python --image fission/python-env
fission function create --name hello --env python --code hello.py --executortype poolmgr
fission fn test --name hello
go
How to Develop a Serverless Application with Fission (Part 1) | FaaS on Kubernetes
fission env create --name go --image fission/go-env --builder fission/go-builder
fission fn create --name helloworld --env go --src hw.go --entrypoint Handler
fission fn test --name helloworld
注意:go环境需要指定builder:--builder fission/go-builder
需要编译代码
kubectl logs -f查看日志