0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Fission(Serverless Functions for Kubernetes)を触ってみる

Posted at

こちらの記事を書きましたが、似たような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なども後々試していきたい

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?