こんにちは。@jedipunkz です。

Mesos アーキテクチャについて2つめの記事です。

http://jedipunkz.github.io/blog/2013/09/28/mesos-architecture-number-1/

上記の前回の記事で Mesos 自体のアーキテクチャについて触れましたが、今回は Mesos + Marathon + Docker の構成について理解したことを書いていこうと思います。

mesos クラスタは 幾つかの mesos masters と沢山の mesos slaves から成っており、 mesos slaves の上では docker を操作する executor が稼働している。marathon は mesos master の上で稼働する mesos framework である。init や upstart の様な存在 であることが言え、REST API を持ち container の動作を制御する。marathon には ruby の client 等も存在する。下記がそれ。

https://github.com/mesosphere/marathon_client

構成

+-----------------+
| docker registry | index.docker.io (もしくは local registry)
+-----------------+
|
+----------------+
|                |
+--------------+ +--------------+
| mesos master | | mesos master |
+--------------+ +--------------+
|                |
|----------------+-----------------------------------|

+--------------+ +--------------+     +--------------+
| mesos slave  | | mesos slave  | ... | mesos slave  | 
+--------------+ +--------------+     +--------------+
|                |                    |
+--------------+ +--------------+     +--------------+
| mesos slave  | | mesos slave  | ... | mesos slave  | 
+--------------+ +--------------+     +--------------+
.                .                    .
.                .                    .
.                .                    .
+--------------+ +--------------+     +--------------+
| mesos slave  | | mesos slave  | ... | mesos slave  |
+--------------+ +--------------+     +--------------+

オファから docker が稼働するまでの流れ

上記の構成の図を見ながら理解していきましょう。

  • HTTP API もしくは web UI で marathon がリクエストを受ける
  • marathon はリソースリクエストを作成しオファが受け付けられるのを待つ
  • オファが受け付けられた後、mesos master は slave に task の仕様を送信する
  • slave では docker コマンドラインツールを実行する mesos docker を mesos slave デーモンが呼び出す
  • docker コマンドラインツールはローカルの docker デーモンと image cache, lxc ツールにより通信する
  • もし image cache が存在すればそれを、無ければ docker registry から pull する。
  • その時、index.docker.io の代わりにローカルの docker registry を稼働させることも可能
  • docker デーモンが container を稼働させる

marathon のクラスタとしての動作

marathon は init や upstart のようなモノだと上記で説明しましたが、図を交えて説明して いきましょう。

marathon が ‘serarch service’ と ‘docker’ を稼働させている状態だとする。

+----------+ +----------+ +----------+
|          | |          | |          | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

+----------+ +----------+ +----------+
|          | |          | |          | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

+----------+ +----------+ +----------+
|          | |          | |          | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

サービスの状況によりオファが立て込んでくると下記のように docker をスケールアウ トが発生する。

+----------+ +----------+ +----------+
| |docker| | | |docker| | |          | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

+----------+ +----------+ +----------+
|          | | |docker  | | |docker| | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

+----------+ +----------+ +----------+
| |docker| | | |docker| | | |docker| |
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

システムに異常がありノードが落ちた場合、下記のように marathon は serach service と docker をノード間で移動させる処置を行う。

             +----------+ +----------+
             | |docker| | | |search| | 
             | |docker| | | |docker| |
             +----------+ +----------+

+----------+ +----------+ +----------+
| |docker|   | |docker| | | |docker| | 
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

+----------+ +----------+ +----------+
| |docker| | | |docker| | | |docker| |
| |search| | | |docker| | | |docker| |
+----------+ +----------+ +----------+

まとめ

mesos と docker, marathon の関係について記していきました。今度、実際にこの構成 を組んでみて障害系のテストしてみたいです。あとは framework について理解してい く必要がありそう。あとは chronos についても。chronos については下記の URL が公 式らしい。これは cron 代替な仕組みらしいです。

https://github.com/airbnb/chronos

まだまだ理解できていないことだらけだ…。