尝试使用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则通过使用预启动容器池来执行函数,这也是两者架构上的一个区别。

之后还想尝试触发等等。

广告
将在 10 秒后关闭
bannerAds