fission で 始める containerless kubernetes #serverlesstokyo
TRANSCRIPT
Fission で始めるContainerless KubernetesServerless Meetup Tokyo #6 (2017/10/16)チェシャ猫 (@y_taka_23)
#serverlesstokyo
Kubernetes + Serverless = “Containerless”
● コンテナの管理を意識したくない
○ いちいち docker build しない
○ Docker Registry も管理しない
● 平常時にリソースを占有したくない
○ Kubernetes クラスタ上での「従量課金」
○ PaaS 的なモデル (e.g. Beanstalk, Deis) との違い
● プラットフォームに依存したくない
#serverlesstokyo
Fission の On-Demand 戦略
● 普段は汎用コンテナをプール
○ 言語ごとの実行環境
○ 起動したコンテナをあらかじめ準備
● 呼び出しがあったときに特殊化
○ Function の本体を読み込み
○ 以後、特定の Function 専用になる
● しばらく呼び出しがなければ消滅
#serverlesstokyo
Environment の作成
$ fission env create \
--name python \
--image fission/python-env:0.3.0
$ fission env list
NAME UID IMAGE
python 3e2b4c9c-...-fa163ed77208 fission/python-env:0.3.0
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...a09s8 2/2 Running 0 32s
python-7c608efa-...9c72z 2/2 Running 0 32s
python-7c608efa-...fp23r 2/2 Running 0 32s
#serverlesstokyo
Environment の作成
$ fission env create \
--name python \
--image fission/python-env:0.3.0
$ fission env list
NAME UID IMAGE
python 3e2b4c9c-...-fa163ed77208 fission/python-env:0.3.0
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...a09s8 2/2 Running 0 32s
python-7c608efa-...9c72z 2/2 Running 0 32s
python-7c608efa-...fp23r 2/2 Running 0 32s
実行環境を指定
#serverlesstokyo
Environment の作成
$ fission env create \
--name python \
--image fission/python-env:0.3.0
$ fission env list
NAME UID IMAGE
python 3e2b4c9c-...-fa163ed77208 fission/python-env:0.3.0
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...a09s8 2/2 Running 0 32s
python-7c608efa-...9c72z 2/2 Running 0 32s
python-7c608efa-...fp23r 2/2 Running 0 32s
プールされたコンテナ
#serverlesstokyo
Function の作成
$ cat hello.py
def main():
return ‘Hello, World!\n’
$ fission function create \
--name hello \
--env python \
--code hello.py
$ fission function list
NAME UID ENV
hello d583fda0-b193-11e7-b4db-fa163ed77208 python
#serverlesstokyo
Function の作成
$ cat hello.py
def main():
return ‘Hello, World!\n’
$ fission function create \
--name hello \
--env python \
--code hello.py
$ fission function list
NAME UID ENV
hello d583fda0-b193-11e7-b4db-fa163ed77208 python
ソースコードを指定
#serverlesstokyo
Function の作成
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...fm0sh 2/2 Running 0 2m
python-7c608efa-...w923v 2/2 Running 0 2m
python-7c608efa-...086s2 2/2 Running 0 2m
#serverlesstokyo
Function の作成
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...fm0sh 2/2 Running 0 2m
python-7c608efa-...w923v 2/2 Running 0 2m
python-7c608efa-...086s2 2/2 Running 0 2m
この時点ではプールに変化なし
#serverlesstokyo
トリガーの作成と呼び出し
$ fission route create \
--url /hello \
--function hello
$ curl http://$FISSION_ROUTER/hello
Hello, World!
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...fm0sh 2/2 Running 0 3m
python-7c608efa-...w923v 2/2 Running 0 3m
python-7c608efa-...086s2 2/2 Running 0 3m
python-7c608efa-...23zr1 2/2 Running 0 17s
#serverlesstokyo
トリガーの作成と呼び出し
$ fission route create \
--url /hello \
--function hello
$ curl http://$FISSION_ROUTER/hello
Hello, World!
$ kubectl -n fission-function get pods
NAME READY STATUS RESTARTS AGE
python-7c608efa-...fm0sh 2/2 Running 0 3m
python-7c608efa-...w923v 2/2 Running 0 3m
python-7c608efa-...086s2 2/2 Running 0 3m
python-7c608efa-...23zr1 2/2 Running 0 17s
コンテナが増えた
#serverlesstokyo
Label の書き換えによる特殊化
$ kubectl -n fission-function describe pods
...
# generic pods
Labels: environmentName=python
environmentUid=3e2b4c9c-...-fa163ed77208
pod-template-hash=1809649413
poolMgrInstanceId=UthmnZt
...
# the specialized pod
Labels: functionName=hello
functionUid=d583fda0-b193-11e7-b4db-fa163ed77208
poolMgrInstanceId=UthmnZt
unmanaged=true
...
#serverlesstokyo
Label の書き換えによる特殊化
$ kubectl -n fission-function describe pods
...
# generic pods
Labels: environmentName=python
environmentUid=3e2b4c9c-...-fa163ed77208
pod-template-hash=1809649413
poolMgrInstanceId=UthmnZt
...
# the specialized pod
Labels: functionName=hello
functionUid=d583fda0-b193-11e7-b4db-fa163ed77208
poolMgrInstanceId=UthmnZt
unmanaged=true
...
hello 用に特殊化、プールから外れた
#serverlesstokyo
Fission Workflows が新登場
● Fission の追加コンポーネント
● Function 間の連携を定義
○ AWS Step Functions 的な役割
○ 依存関係を JSON または YAML で記述
○ 並列実行、待ち合わせ、条件分岐
● 2017 年 10 月 2 日リリース
○ https://github.com/fission/fission-workflows
#serverlesstokyo
まとめ
● なぜ Serverless なのか?
○ イメージやコンテナの管理からの解放
● どうやって実現するのか?
○ 汎用コンテナのプール、呼び出し時の特殊化
● より実用的に使うには?
○ Fission Workflows でより複雑な処理を組み立て
#serverlesstokyo