2018年3月25日日曜日

Apache Mesos を試してみた

概要

Apache Mesos はコンテナマネージメントツールです
minimesos という簡単に試せるツールがあったのでこれで Mesos を試してみました

環境

  • macOS 10.13.2
  • minimesos 0.13.0
  • docker 18.03.0-ce-rc4

インストール

  • brew install minimesos

初期化

  • minimesos init

~/.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) にアクセスできます
minimesos1.png

docker ps コマンドで確認すると consul や zookeeper, 内部向けの dns サーバなどのコンテナが立ち上がっているのが確認できると思います
また UI だと weave-scope のコンテナが 1 つだけ立ち上がっているように見えます

コンテナを立ち上げてみる

サンプルに http-server を立ち上げるものがあったのでそれをやってみました

  • vim http-server.json
{
  "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 でも確認できます
minimesos2.png

上記の 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 のプロセスを動作させていました

  • vim elasticsearch.json
{
  "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 上ではコンテナと同じように確認することができました
minimesos3.png

後処理

  • minimesos destroy

で必要なコンテナを全部削除してくれます
イメージは残っているので再度 up するときはすぐに立ち上がります

最後に

minimesos で Apache Mesos を試してみました
Json ファイルで定義する部分は kubernetes や Openshift とは違った点かなと思います

内部で zookeeper と consul を使っているのでその辺のノウハウがある人にはトラシュしやすいかなと思います
あとは全体的に Java プロダクションが多いので Java 好きにもオススメかなと思います

0 件のコメント:

コメントを投稿