概要
Apache Mesos はコンテナマネージメントツールです
minimesos という簡単に試せるツールがあったのでこれで Mesos を試してみました
環境
- macOS 10.13.2
- minimesos 0.13.0
- docker 18.03.0-ce-rc4
インストール
初期化
~/.minimesos
ディレクトリの作成と containersol/minimesos-cli
というイメージが pull されます
起動
minimesos up --mapPortsToHost
結構時間がかかります
minimesos はすべてコンテナで起動するので pull などに時間がかかっているんだと思います
完了すると minimesosFile というコンフィグが記載されたファイルが作成されます
Minimesos cluster is running: 3215234594
Mesos version: 1.0.0
export MINIMESOS_NETWORK_GATEWAY=172.17.0.1
export MINIMESOS_AGENT=http://172.17.0.6:5051; export MINIMESOS_AGENT_IP=172.17.0.6
export MINIMESOS_ZOOKEEPER=zk://172.17.0.3:2181/mesos; export MINIMESOS_ZOOKEEPER_IP=172.17.0.3
export MINIMESOS_MARATHON=http://172.17.0.5:8080; export MINIMESOS_MARATHON_IP=172.17.0.5
export MINIMESOS_CONSUL=http://172.17.0.7:8500; export MINIMESOS_CONSUL_IP=172.17.0.7
export MINIMESOS_MASTER=http://172.17.0.4:5050; export MINIMESOS_MASTER_IP=172.17.0.4
You are running Docker on Mac so use localhost instead of container IPs for Master, Marathon, Zookeepr and Consul
こんな感じになれば OK です
localhost:8080
にアクセスすると管理画面 (Marathon) にアクセスできます
docker ps
コマンドで確認すると consul や zookeeper, 内部向けの dns サーバなどのコンテナが立ち上がっているのが確認できると思います
また UI だと weave-scope のコンテナが 1 つだけ立ち上がっているように見えます
コンテナを立ち上げてみる
サンプルに http-server を立ち上げるものがあったのでそれをやってみました
{
"id": "http-no-ports-exposed",
"mem": 16,
"cpus": 0.1,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"network": "BRIDGE",
"image": "scrapbook/docker-http-server"
}
}
}
こんな感じで Mesos では Json ファイルでコンテナ定義を定義するようです
コンテナを作成するには
minimesos install --marathonFile http-server.json
という感じで実行します
UI でも確認できます
上記の Json は外部からアクセスできない http-server を立ち上げるサンプルです
もうひとつ外部からアクセス可能な http-server を立ち上げるサンプルがありました
- vim http-server-expose.json
{
"id": "http-ports-static-assigned-to-31002",
"mem": 16,
"cpus": 0.1,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"network": "BRIDGE",
"image": "scrapbook/docker-http-server",
"portMappings": [
{ "containerPort": 80, "hostPort": 31002, "servicePort": 10002, "protocol": "tcp" }
]
}
}
}
minimesos install --marathonFile http-server-expose.json
これでコンテンを起動すると localhost:31002
で Web サーバのコンテナにアクセスすることができます
Java のプロセスをデプロイする
Mesos はコンテナ以外にも Java のプロセスを Json で定義してデプロイできるようです
mesos-agent コンテナ内で java コマンドが使えるようになっており、そこで動作するようです
サンプルでは elasticsearch のプロセスを動作させていました
{
"id": "elasticsearch-mesos-scheduler",
"uris": [
"file:///path/to/jar/elasticsearch-mesos-scheduler-1.0.0-withDependencies.jar"
],
"cmd": "java -Djava.security.egd=file:/dev/urandom -jar elasticsearch-mesos-scheduler-1.0.0-withDependencies.jar --frameworkUseDocker false --zookeeperMesosUrl zk://172.17.0.3:2181/mesos --frameworkName elasticsearch --elasticsearchClusterName mesos-elasticsearch --elasticsearchCpu 0.5 --elasticsearchRam 1024 --elasticsearchDisk 1024 --elasticsearchNodes 1",
"cpus": 0.2,
"mem": 512,
"env": {
"JAVA_OPTS": "-Djava.security.egd=file:/dev/urandom -Xms256m -Xmx512m"
},
"ports": [31100],
"requirePorts": true,
"instances": 1
}
ポイントは 2 つでまず動作させる Java ファイル (ここでは elasticsearch-mesos-scheduler-1.0.0-withDependencies.jar という jar ファイル) をローカルにダウンロードしてそのパスを指定します
今回の jar は以下のコマンドでダウンロードできました
curl -L https://github.com/mesos/elasticsearch/releases/download/1.0.0/elasticsearch-mesos-scheduler-1.0.0-withDependencies.jar -o elasticsearch-mesos-scheduler-1.0.0-withDependencies.jar
これをそのままコンテナ上に送って動作させるようです
cmd では jar ファイルを動作させるコマンドをつらつら並べていくのですが、その際に zookeeper コンテナの URL が必須になります
今回であれば --zookeeperMesosUrl zk://172.17.0.3:2181/mesos
の部分になります
あとはこれを同じようにデプロイすれば OK です
minimesos install --marathonFile elasticsearch.json
UI 上ではコンテナと同じように確認することができました
後処理
で必要なコンテナを全部削除してくれます
イメージは残っているので再度 up するときはすぐに立ち上がります
最後に
minimesos で Apache Mesos を試してみました
Json ファイルで定義する部分は kubernetes や Openshift とは違った点かなと思います
内部で zookeeper と consul を使っているのでその辺のノウハウがある人にはトラシュしやすいかなと思います
あとは全体的に Java プロダクションが多いので Java 好きにもオススメかなと思います