尝试使用Fission(适用于Kubernetes的无服务器函数)
我写了这篇文章,但是因为有类似的Fission开源软件,所以我会尝试去使用它。
Fission是什么意思?
在Kubernetes上可以构建无服务器应用的框架类似于Kubeless,比较起来,支持的语言大致相同,但Fission的触发器似乎更多。
Fission是在Kubernetes上进行无服务器函数开发的框架。
性能: 冷启动100毫秒
粗略地介绍一下,我们立即开始尝试。
环境
macOS Big Sur 11.4: 苹果操作系统的大型更新版本11.4
Fission的环境设置
我会沿着这里的指导进行操作。
我们将像在使用Kubeless时一样,使用minikube。
$ kubectl config current-context
minikube
为了使用Helm进行构建,需要进行安装(也可以选择不使用Helm的方法)。
$ brew install helm
我們將安裝Fission。
$ export FISSION_NAMESPACE="fission"
$ kubectl create namespace $FISSION_NAMESPACE
$ helm install --namespace $FISSION_NAMESPACE --name-template fission \
https://github.com/fission/fission/releases/download/1.12.0/fission-all-1.12.0.tgz
有很多资源已经被创建了
$ kubectl get ns | grep fission
fission Active 24m
fission-builder Active 23m
fission-function Active 23m
$ kubectl get all -n fission
NAME READY STATUS RESTARTS AGE
pod/buildermgr-6848c94888-dj6s9 1/1 Running 0 26m
pod/controller-56575d8fc5-jph4b 1/1 Running 0 26m
pod/executor-57655f44df-2dm8g 1/1 Running 0 26m
...
安裝CLI
$ curl -Lo fission https://github.com/fission/fission/releases/download/1.12.0/fission-cli-osx \
&& chmod +x fission && sudo mv fission /usr/local/bin/
应用程序的部署和执行
创建环境
$ fission env create --name nodejs --image fission/node-env:latest
$ fission environment list
NAME IMAGE BUILDER_IMAGE POOLSIZE MINCPU MAXCPU MINMEMORY MAXMEMORY EXTNET GRACETIME
nodejs fission/node-env:latest 3 0 0 0 0 false 0
# poolされたコンテナが作成される
$ kubectl get po -n fission-function
NAME READY STATUS RESTARTS AGE
poolmgr-nodejs-default-26746-7d4f448fc9-9wl5k 2/2 Running 0 36s
poolmgr-nodejs-default-26746-7d4f448fc9-dbb6x 2/2 Running 0 36s
poolmgr-nodejs-default-26746-7d4f448fc9-vssm9 2/2 Running 0 36s
创建一个函数
$ curl -LO https://raw.githubusercontent.com/fission/examples/master/nodejs/hello.js
$ fission function create --name hello --env nodejs --code hello.js
$ fission function get --name=hello
module.exports = async function(context) {
return {
status: 200,
body: "hello, world!\n"
};
}
# packagesというカスタムリソースがあり、そこにデプロイしたコードがbase64エンコードされて入ってる
$ kubectl describe packages.fission.io hello-24160fbf-cd38-4b17-b0e2-ae967aa66450 | grep Literal
Literal: Cm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24oY29udGV4dCkgewogICAgcmV0dXJuIHsKICAgICAgICBzdGF0dXM6IDIwMCwKICAgICAgICBib2R5OiAiaGVsbG8sIHdvcmxkIVxuIgogICAgfTsKfQo=
执行 (shí
$ fission function test --name hello
Hello, world!
记录
$ fission fn logs --name hello
# Podのログも直接みれる
$ stern -n fission-function poolmgr-nodejs-default
印象
从阅读文档的感觉来看,Fission似乎比Kubeless功能更丰富,而Kubeless则给人轻量级框架的印象。此外,Kubeless针对函数启动Pod,而Fission则通过使用预启动容器池来执行函数,这也是两者架构上的一个区别。
之后还想尝试触发等等。