Tech Sketch Bucket of Technical Chips by TIS Inc.

Apache Mesos上でMarathonとChronosを動かしてみた

Pocket

昨今、Dockerのエンタープライズ基盤への利用が拡大しつつある。それに対応すべく、DockerをPaaSとして運用する為の製品が多数、開発、提供されており、注目度も非常に高くなっている。
ITmedia社 @IT上で『実際に検証済み!OSS徹底比較』を連載させて頂いているが、その記事としてDokcer PaaS製品の比較検証の記事を執筆した。
その記事執筆にあたり、対象として選定した「Apache Mesos」の評価を行うため、実際にインストールを行った手順を記事としてまとめてみた。評価は2016年9月時点での最新のStable版を使用して評価を行っている。

Apache Mesosのインストールについては、昨年(2015年)にZabbix 日本支社の渡邊隼人氏に寄稿頂いた 『実践! CentOS 7へMesosをインストール!』に master×3台、node×3台の大規模構成の記事もtech-sketch上で公開されているため、こちらも参考にして頂きたい。
本記事では、最小構成での検証の手順をまとめており、基本的なインストール手順は、上記記事と大きな差は無い。


検証に使用した環境は以下となる。 ※画像をクリックすると拡大表示

本検証では、CentOS 7上にApache Mesos / Marathon / Chronosのオールインワン環境を構築した後に、nodeとしてもう1台を追加する形で構築を行っている。


Apache Mesos masterのインストール

Apache Mesos masterおよびMarathon/Chronosのインストール手順は以下となる。

1.パッケージの最新化
$ sudo yum update -y

2.Apache Mesosのリポジトリ登録
Apache Mesos / Marathon / Chronosがyumでインストール可能となる。
$ sudo yum install -y http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm

3.Apache Mesos/Marathon/Chronosのインストール
$ sudo yum install -y mesos marathon chronos mesosphere-zookeeper

今回インストールしたバージョンは以下となる。

4.mesos masterの最小台数の定義
mesos masterの台数÷2以上の値を設定することが推奨されている。今回は1台なので1を設定。
mesos masterの各パラメータの設定は、Mesos Master Configurationに詳細に記載されている。
$ sudo su -c "echo 1 > /etc/mesos-master/quorum"

5.mesos masterのサーバを登録
zoo.cfgの最終行に以下を追加する。mesos masterが複数台存在する場合は、server.2、server.3…の行を追加する。
$ sudo vi /etc/zookeeper/conf/zoo.cfg

6.zookeeperのサーバIDを登録
設定する数字は、前述のzoo.cfgのserver.の次の数字と一致させる。
$ sudo su -c "echo 1 > /var/lib/zookeeper/myid"

7.zookeeperの稼働するサーバの登録
今回は1台のみだが、mesos masterが複数存在する場合
zk://[host1:2181],[host2:2181],…[hostN:2181]/mesos のような形で記述する。
$ sudo su -c "echo zk://tissvv093.front02.intra.tistest.jp:2181/mesos > /etc/mesos/zk"

8.mesos masterで使用するポートの開放
mesos masterを2台以上使用し、クラスタを構成する場合のみ2888/tcp、3888/tcpの開放も必要となる。
$ sudo firewall-cmd --permanent --add-port=2181/tcp --zone=public
$ sudo firewall-cmd --permanent --add-port=2888/tcp --zone=public
$ sudo firewall-cmd --permanent --add-port=3888/tcp --zone=public
$ sudo firewall-cmd --permanent --add-port=4400/tcp --zone=public
$ sudo firewall-cmd --permanent --add-port=5050/tcp --zone=public
$ sudo firewall-cmd --permanent --add-port=8080/tcp --zone=public
$ sudo firewall-cmd --reload

9.zookeeper/mesos master/marathon/chronosのサービス自動起動の設定
$ sudo systemctl enable zookeeper
$ sudo systemctl enable mesos-master
$ sudo systemctl enable marathon
$ sudo systemctl enable chronos

10.zookeeper/mesos master/marathon/chronosの起動
$ sudo systemctl start zookeeper
$ sudo systemctl start mesos-master
$ sudo systemctl start marathon
$ sudo systemctl start chronos

11.mesos slaveのサービスの無効化
mesos slaveを使用しない場合は、以下のコマンドで明示的にサービスを起動しないようにすることを推奨する。
$ sudo systemctl disable mesos-slave


Apache Mesos masterをslave兼務とする場合の追加設定

1.Dockerのリポジトリ登録
※このリポジトリを登録することで、最新のDockerがインストールされる。OS標準のDockerを使用する場合は不要となる。

2.Dockerのインストール
$ sudo yum install -y docker-engine

※OS標準のDockerをインストールする場合は以下となる。
$ sudo yum install -y docker

3.Dockerの起動と自動起動の設定
$ sudo systemctl enable docker
$ sudo systemctl start docker

4.mesos slaveのDocker連携の設定
$ sudo su -c "echo 'docker,mesos' > /etc/mesos-slave/containerizers"

5.mesos slaveのregistrationのタイムアウト値の設定
$ sudo su -c "echo '5mins' > /etc/mesos-slave/executor_registration_timeout"

6.mesos slaveで使用するポートの開放
$ sudo firewall-cmd --permanent --add-port=5051/tcp --zone=public
$ sudo firewall-cmd --reload

7.mesos slaveのサービスの起動と自動起動の設定
$ sudo systemctl enable mesos-slave
$ sudo systemctl start mesos-slave

ここまでの設定でサーバ1台でApache mesosを使用することができるオールインワン環境の構築は完了である。


Apache Mesos slaveのインストール

Apache Mesos slaveのインストールは以下となる。

1.パッケージの最新化
$ sudo yum update -y

2.Dockerのリポジトリ登録
※このリポジトリを登録することで、最新のDockerがインストールされる。OS標準のDockerを使用する場合は不要となる。

3.Dockerのインストール
$ sudo yum install -y docker-engine

※OS標準のDockerをインストールする場合は以下となる。
$ sudo yum install -y docker

4.Dockerの起動と自動起動の設定
$ sudo systemctl enable docker
$ sudo systemctl start docker

5.Apache Mesosのリポジトリ登録
Apache Mesos / Marathon / Chronosがyumでインストール可能となる。
$ sudo yum install -y http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm

6.Apache Mesosのインストール
$ sudo yum install -y mesos

今回インストールしたバージョンは以下となる。

7.zookeeperの稼働するサーバの登録
今回は1台のみだが、mesos masterが複数存在する場合
zk://[host1:2181],[host2:2181],…[hostN:2181]/mesos のような形で記述する。
$ sudo su -c "echo zk://tissvv093.front02.intra.tistest.jp:2181/mesos > /etc/mesos/zk"

8.mesos slaveのDocker連携の設定
$ sudo su -c "echo 'docker,mesos' > /etc/mesos-slave/containerizers"

9.mesos slaveのregistrationのタイムアウト値の設定
$ sudo su -c "echo '5mins' > /etc/mesos-slave/executor_registration_timeout"

10.mesos slaveで使用するポートの開放
$ sudo firewall-cmd --permanent --add-port=5051/tcp --zone=public
$ sudo firewall-cmd --reload

11.mesos slaveのサービスの起動と自動起動の設定
$ sudo systemctl enable mesos-slave
$ sudo systemctl start mesos-slave

12.mesos masterのサービスの無効化
mesos masterを使用しない場合は、以下のコマンドで明示的にサービスを起動しないようにすることを推奨する。
$ sudo systemctl disable mesos-master


Apache Mesosの動作確認

1.Apache Mesos ダッシュボードへの接続
ブラウザでmesos masterの5050ポートに接続すると、Mesosのダッシュボードが表示される。

2.MarathonとChronosのダッシュボード上からの確認
MesosのダッシュボードのFrameworksをクリックすると、MarathonとChronosの稼働状況が確認できる。

2.mesos slaveのregistrationの確認
MesosのダッシュボードのAgentssをクリックすると、mesos slaveが認識されているか確認できる。


Marathonの動作確認

1.MarathonのApplicationsの登録用jsonファイルの作成
$ vi marathon-api.json

2.MarathonのApplicationsへの登録
$ curl -X POST -H "Content-Type: application/json" http://10.255.202.93:8080/v2/apps -d@marathon-api.json

3.MarathonのApplicationsへの登録状況の確認
ブラウザでmesos masterの8080ポートに接続すると、Marathonのダッシュボードが表示される。

4.MarathonのApplicationsの実行
Scale Applicationを3に設定して実行すると、Dockerコンテナが3個起動される。


Chronosの動作確認

1.Chronosのjobの登録用jsonファイルの作成
$ vi chronos-api.json

2.Chronosのjobsへの登録
$ curl -L -H "Content-Type: application/json" -X POST http://10.255.202.93:4400/scheduler/iso8601 -d@chronos-api.json

3.Chronosのjobsへの登録状況の確認
ブラウザでmesos masterの8080ポートに接続すると、Marathonのダッシュボードが表示される。

4.Chronosのjobの実行
Jobの詳細画面上の強制実行ボタンを押すと、時刻にならなくてもJobが実行される。

これで基本的な機能の確認は終了となる。

今回はmesos master+slaveとmesos slaveの構成だったが、mesos master+slave×2台で構成することもできる。
mesos masterのクラスタを構成する場合は、まず、zookeeperを全サーバで起動して、zookeeperのクラスタリングが完成してからmesosを起動することをお勧めする。


エンジニア採用中!私たちと一緒に働いてみませんか?