fission で 始める containerless kubernetes #serverlesstokyo

26
Fission で始める Containerless Kubernetes Serverless Meetup Tokyo #6 (2017/10/16) チェシャ猫 (@y_taka_23) #serverlesstokyo

Upload: ytaka23

Post on 21-Jan-2018

932 views

Category:

Technology


3 download

TRANSCRIPT

Fission で始めるContainerless KubernetesServerless Meetup Tokyo #6 (2017/10/16)チェシャ猫 (@y_taka_23)

#serverlesstokyo

Fission をめぐる3つの疑問

● なぜ Serverless なのか?

● どうやって実現するのか?

● より実用的に使うには?

#serverlesstokyo

Q : なぜ Serverless なのか?

#serverlesstokyo

A :「都合のいい相手」でいてほしい

#serverlesstokyo

Kubernetes + Serverless = “Containerless”

● コンテナの管理を意識したくない

○ いちいち docker build しない

○ Docker Registry も管理しない

● 平常時にリソースを占有したくない

○ Kubernetes クラスタ上での「従量課金」

○ PaaS 的なモデル (e.g. Beanstalk, Deis) との違い

● プラットフォームに依存したくない

#serverlesstokyo

https://github.com/fission/fission

#serverlesstokyo

Q : どうやって実現するのか?

#serverlesstokyo

A : 必要に応じてコンテナを特殊化

#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

Q : より実用的に使うには?

#serverlesstokyo

A : Fission Workflows を活用

#serverlesstokyo

Fission Workflows が新登場

● Fission の追加コンポーネント

● Function 間の連携を定義

○ AWS Step Functions 的な役割

○ 依存関係を JSON または YAML で記述

○ 並列実行、待ち合わせ、条件分岐

● 2017 年 10 月 2 日リリース

○ https://github.com/fission/fission-workflows

#serverlesstokyo

まとめ

● なぜ Serverless なのか?

○ イメージやコンテナの管理からの解放

● どうやって実現するのか?

○ 汎用コンテナのプール、呼び出し時の特殊化

● より実用的に使うには?

○ Fission Workflows でより複雑な処理を組み立て

#serverlesstokyo

Enjoy Serverless Kubernetes!Presented by チェシャ猫 (@y_taka_23)

#serverlesstokyo

Enjoy Serverless Kubernetes!Presented by チェシャ猫 (@y_taka_23)

Containerless

#serverlesstokyo