こちらの記事を書きましたが、似たようなFissionというOSSがあるので触ってみます
Fissionとは
Kubelessと同様にKubernetes上でサーバーレスが構築できるフレームワーク
比較すると、サポート言語は大体同じで、トリガーはFissionの方が多いようです
Fission is a framework for serverless functions on Kubernetes.
Performance: 100msec cold start
ざっくりの紹介ですが、早速試していきます
環境
macOS Big Sur 11.4
Fissionの環境構築
ここに沿ってやっていきます
https://docs.fission.io/docs/installation/
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/
アプリケーションのデプロイと実行
Environmentの作成
$ 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
Functionの作成
$ 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=
実行
$ fission function test --name hello
Hello, world!
ログ
$ fission fn logs --name hello
# Podのログも直接みれる
$ stern -n fission-function poolmgr-nodejs-default
感想
Kubelessと同様に簡単に試せた
ドキュメントを見た感じだとFissionの方が機能が豊富で、Kubelessの方が軽量なフレームワークの印象
また、Kubelessはfunctionに対してPodが立ち上がるのに対して、Fissionはpoolしたコンテナでfunctionを実行するというアーキテクチャの違いもあった
Triggerなども後々試していきたい