lattice深掘り話

61
Latticeの深掘り話

Upload: kazuto-kusama

Post on 17-Jul-2015

1.259 views

Category:

Technology


0 download

TRANSCRIPT

Latticeの深掘り話

Kazuto Kusama@jacopen

Cloud Foundryベースの

PaaS開発・運用

しごと

Lattice

Latticeとは• コンテナ管理システム

• スケジューリング • 動的ルーティング • 死活監視 • ログ収集

• Docker image互換

• 次期Cloud Foundry(Diego)のサブセット

CFとLatticeの関係は?

コンテナを動かす仕組み

動的ルーティングの仕組み

ログ収集・ストリーミングの仕組み

スケジューリングの仕組み

この組み合わせが Lattice

• APIの提供 • マルチテナント機能

(ユーザー管理・認証認可) • アプリケーションのライフサイクルマネジメント(Buildpack etc…)

• その他PaaSに必要な機能

フルセットで、Cloud Foundry

これだけではつまんないので DEMO

デモでやったことの説明

Receptor

Cell

Cell

Cell

app

ltc create

Job Scheduling

Receptor

Cell

Cell

Cell

app

ltc scale app

app

Cell

Cell

Cell

app A

app A

app B

End User

Router

appA.example.com

appB.example.com

Dynamic routing

Cell

Cell

Cell

app A

app A

Helth monitoring Self healing

Dockerコンテナの管理といえば

Kubernetesの特徴• Dockerコンテナをマルチホストで管理する仕組み

• コンテナを使いやすくする仕組みが充実

• Pod • Service • Replication Controller

• 使いこなすには、これら独自概念の理解が必要

Kubernetesの特徴• Dockerコンテナをマルチホストで管理する仕組み

• コンテナを使いやすくする仕組みが充実

• Pod • Service • Replication Controller

• 使いこなすには、これら独自概念の理解が必要

• ロゴが青い

Latticeの特徴• Webアプリを動かすコンテナをマルチホストで管理する仕組み

• Docker imageにも対応(後で説明)

• コンテナへのアクセスはHTTPのみ • 独自概念の理解はあまり必要が無い

Latticeの特徴• Webアプリを動かすコンテナをマルチホストで管理する仕組み

• Docker imageにも対応(後で説明)

• コンテナへのアクセスはHTTPのみ • 独自概念の理解はあまり必要が無い • ロゴが緑

徐々に深くみていくよ

LatticeはDocker対応!

LatticeはDocker対応!Docker image

DEMO

gardenって何?

Cellの中身

Cell

rep

exector

garden

garden-backend

Container Container Container Container Container Container

Container Container Container Container Container Container

Container Container

Container Container

Cellの中身

Cell

rep

exector

garden

garden-backend

Container Container Container Container Container Container

Container Container Container Container Container Container

Container Container

Container Container

rep コンテナを動かすためのオークションに参加exector repからのコンテナ起動/削除指示を受け取る

garden-backend コンテナを動かす仕組み

exector

garden-linux

Container Container Container Container

Container Container Container Container

exector

garden-windows

Container Container Container Container

Container Container Container Container

exector

garden-xxxx

Container Container Container Container

Container Container Container Container

exector-garden間はインターフェースが定められており、 それを満たしていればバックエンドはさまざまな実装が可能。Lattice標準ではgarden-linux

http://lattice.cf/docs

Garden

• Gardenは、Pluggableなコンテナのバックエンドを実現する仕組み

• Garden-backendはGardenインターフェースを備えたバックエンド

• Lattice標準のGarden-backendであるGarden-linuxは、Docker imageを利用することが出来る

• よってLatticeは、標準でDocker image互換となる

将来的には、libcontainerを使ってよりDockerに近い環境を実現するbackendや、Windowsコンテナのbackend、rktのbackendなどが出るかもしれない

疑問• Pluggableなのは良いとして、なんで標準がgarden-linuxという独自の仕組みなの?最初からDockerをバックエンドにすればいいんじゃないの?

歴史的経緯

• 元々Cloud FoundryはWardenという独自のコンテナでアプリを動かしていた

• Garden-linuxはWardenのGolang実装

• Garden-linuxでは次期Cloud Foundryでも利用するため、互換性を担保する必要がある

ダイナミックルーティングの仕組み

Cell

Cell

Cell

app A

app A

app B

End User

gorouter

appA.example.com

appB.example.com

Dynamic routing

Cell

Cell

Cell

app A

app A

app B

gorouter

appA.example.com

appB.example.com

実現するには、gorouterがアプリのルート一覧を持っていないといけない

Cell

Cell

Cell

app A

app A

app B 各Cell内のコンテナに関する情報は

etcdに集約される

Cell

Cell

Cell

app A

app A

app B

Route-emitterがetcdからroute情報を読み出して

Route Emitter

Cell

Cell

Cell

app A

app A

app B

NATSというメッセージングバスに流し直します

Route Emitter

NATS

Cell

Cell

Cell

app A

app A

app B

gorouterはNATS経由でroute情報を取得

Route Emitter

NATS

gorouter

gorouter

gorouter

DEMO

Cell

Cell

Cell

app A

app A

app B

こうしたほうが早いんじゃない?

gorouter

gorouter

gorouter

歴史的経緯

• gorouterは元々Cloud Foundry向けに作られたもの

• Cloud FoundryはNATS経由で疎結合に結びつくアーキテクチャ

• よってgorouterへはNATS経由で情報を送る必要がある

• 将来的にはこのあたりを解消する予定もあるらしい(vulcandみたいな仕組みになる?)

Latticeのコンポーネント

brain

CellLatticeの基本構造

Cell

brain

Cellまあ、いっぱいあります

Rep

executor

warden linux

Cell

Rep

executor

warden linuxgorouter

route-emitter

doppler

traffic controller

metron

gnatsd

etcd consul

auctioneer

converger

auctioneer

converger

重要なのは、etcd

Cell

Rep

executor

warden linux

Cell

auctioneer

converger

rep コンテナを動かすためのオークションに参加 オークション情報はetcd

auctioneer 動かす必要のあるコンテナをオークションにかける

converger 動作中のコンテナが

正しい数存在するかチェック

Cell

Rep

executor

warden linux

Cell

auctioneer

convergerdoppler ログやメトリクスを集約metron

ログやメトリクスを収集するエージェント

brain

doppler

traffic controller

metron

metron

traffic controller WebSocketでユーザーにログを ストリーミング

実は、consulも活用

Cell

Cell

brainauctioneer

converger

auctioneer

converger

route-emitter

brain

route-emitter

複数同時に動いては困るコンポーネントのロック

brain

Cell結構複雑

Rep

executor

warden linux

Cell

Rep

executor

warden linuxgorouter

route-emitter

doppler

traffic controller

metron

gnatsd

etcd consul

auctioneer

converger

auctioneer

converger

歴史的経緯

参考情報• Lattice http://lattice.cf/ • Cloud FoundryでDockerも.NETも。新しいDiegoの仕組み入門 http://www.slideshare.net/jacopen/diego-

45603123 • Diego Design Notes https://github.com/cloudfoundry-incubator/diego-design-notes