cloud foundryでdockerも.netも。新しいdiegoの仕組み入門
TRANSCRIPT
今回の注意点• 20分のセッションに80ページ詰め込んでいるため、かなり駆け足になるよ
• Cloud Foundry (特に、現在のV2)をある程度知っている人向けなので、初めての人には分からない話があるかも
• 分からない事があったら後で聞いてください
• デモも考えたけど分かりにくすぎたので、また今度!
V1→V2では• APIが新しくなった
• 各コンポーネントが1から書き直された(GoとかRubyとか)
• Buildpack対応や、Servicesの刷新が入った
• 全体のアーキテクチャは、V1と大差ない
これがDiegoのコンポーネント
出典: https://github.com/cloudfoundry-incubator/diego-design-notes
Cellの仕事• コンテナを動かすのが最大の役割
• コンテナはWardenのGo版、Gardenを使って動かす
• コンテナの動かし方には、一時的なTaskと、永続的なLRP(Long Runnning Process)という2種類がある。
• たとえばDropletを作るStaging作業はTask、ユーザーアプリはLRPとして動作する
Diegoのスケジューリング• Auctioneerが、TaskやLRPに関するオークションを掲示する
• Cell内のRepが、オークションに参加する
• 最終的に残ったRepのCellが選ばれる
• TaskやLRPを動かすためのStart Auctionと、ダブついたLRPを止めるStop Auctionの2種類がある
Convergerの役割• クラスタ内のインスタンス数(=コンテナ数)の一貫性を担保する
• アプリのインスタンス数が不足していれば、Start Auctionをリクエストする
• インスタンス数が過剰であれば、Stop Auctionをリクエストする
• これまでのHealth Managerに近い
Receptorの役割• APIでTask/LRPのリクエストを受け付けて、
Diegoのクラスタ内に展開する
• アプリ作成のリクエストであれば、Start Auctionにかける
• 削除のリクエストであれば、Stop Auctionにかける
• PaaSとしての機能は提供しない
KubernetesとDiego似ているところ
• スケジューラー(Master<=>Brain) とランナー(Minion<=>Cell) が、etcdを通して疎結合に連携する
違うところ • スケジューリングの仕組み
• コンテナの仕組み (Docker<=>Garden)
Diegoは単体で動くってこと?• 答えはYes.
• Latticeという、Diego+リクエストルータ+ログストリーミングのセットを構築出来る
仕組みが提供されているhttps://github.com/cloudfoundry-incubator/lattice
Diego
Gorouter
Router Emitter Receptor
Cell
Cell
App1
App2
App2
1. Receptorから、アプリとルートの情報を取得
2. Gorouterに登録
3. Gorouterがルーティング
app1.example.com
app2.example.com
Latticeを単体で触ってみた感想• Kubernetesほど機能は充実していないが、その分シンプル
• リクエストルーティングの仕組みがあるため、80番さえ空いていればOK。あとはURLを見て自動的にルーティングしてくれる
• KubernetesのServiceの仕組みはちょっと分かりづらいが、こっちは直感的
• TerraformでAWS, GCE,Digital Oceanに、簡単にマルチノードデプロイできる BOSHとは
Cellの中身
Cell
rep
exector
garden
garden-linux
Container Container Container Container Container Container
Container Container Container Container Container Container
Container Container
Container Container
Garden
garden
garden-linux
Container Container Container Container Container Container
Container Container Container Container Container Container
Container Container
Container Container
Garden コンテナの作成/削除やリソース制限、ネットワーク設定などを定義したインターフェース
Garden Backend 実際にコンテナの作成や管理を行うバックエンドサービス。各プラットフォームごとに用意される。Linux向けのBackend実装がgarden-linux.
Garden-linuxのDocker対応
• Buildpackを用いて作られたDropletが渡されたら、それを使ってコンテナを作成(今までの仕組みと同等)
• Docker imageへのパスが渡されたら、Docker imageをダウンロード。全てのレイヤーをフェッチし、GardenコンテナのRootfsとして設定
• Dockerコンテナが動くのではなく、GardenコンテナのRootfsとしてDocker imageが指定出来るという仕組み
• なので、Dockerfileには非対応
最近オープンソース化された.NET Framework
http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx
IronFoundry
• Century LinkによるCloud FoundryのWindows対応
• v1の頃からWindows対応のCloud Foundryフォークを作っていた
• 現在はCloud Foundry FoundationのIncubationに採択され、Gardenの実装が進められている
Windows Cell
rep (Go)
exector(Go)
Containerizer (C#)
if_warden (C#)
Container Container Container Container Container Container Container Container
garden-windows(Go)
Windows Container
• どうやってWindowsでコンテナを実現しているのかは、追えてない。(誰か調べて!)
• https://github.com/IronFoundry/if_warden/がそれっぽい
• IISのHostable Web Coreというマイナーな機能を使っているらしい
DEAs
Gorouter
etcd
NATS
HM
UAA Doppler Traffic controller
Cloud Controller
CC Bridge
Route Emitter
Receptor Cells
Brain
Common layer
V2 layer Diego layer
Bridge layer
Routing layer
DEAs
Gorouter
etcd
NATS
HM
UAA Doppler Traffic controller
Cloud Controller
CC Bridge
Route Emitter
Receptor Cells
Brain
Common layer
V2 layer Diego layer
Bridge layer
Routing layer
app app app app
DEAやCell上のアプリ、CC、Receptorへのルートは
Gorouterに登録される。ただし、Receptor、CellはRoute
Emitter経由で行われる
DEAs
Gorouter
etcd
NATS
HM
UAA Doppler Traffic controller
Cloud Controller
CC Bridge
Route Emitter
Receptor Cells
Brain
Common layer
V2 layer Diego layer
Bridge layer
Routing layer
app app
V2へのリクエストは、従来通り行われる
DEAs
Gorouter
etcd
NATS
HM
UAA Doppler Traffic controller
Cloud Controller
CC Bridge
Route Emitter
Receptor Cells
Brain
Common layer
V2 layer Diego layer
Bridge layer
Routing layer
app app
Diegoへのリクエストは、CC Bridge経由でReceptorに 送られる。
Diegoへのリクエスト• GET /v3/apps • POST /v3/apps • PUT /v3/apps/:guid/processes
主にDiego向けとして、v3 APIが定義されている
CFのDiego対応まとめ• Cloud Controllerが従来のV2と、Diego向けの
V3に両対応することで、V1→V2のような仕切り直しになる事態は避けられた
• 一方、巨大なスタックとなり運用が大変そう・・・
• 将来的には、Route EmitterやCC Bridgeは廃止予定(それぞれRouter、CCにマージされる)
• ちなみに、まだV3 API対応クライアントは無い
Diegoの投入時期• 現在は “Production Beta”
• そう遠くないうちに正式リリースになるはずだが、今日の資料作成のためにDiegoを組んでいる間にもさまざまな変更が・・・。
• どこも「Docker対応」を謳いたいはずなので、正式リリース後は多くのサービスで取り込まれるんじゃないかと推測
Diegoを知るにはどうすれば?• フルセットで組むなら cf-release + diego-
release • でもBOSHつらいので、まずはlatticeを触ってみるのがお勧め
• https://github.com/cloudfoundry-incubator/lattice
• GCEの無料枠でさくっと試せる!