Mesosphere チュートリアル03:Mesosphere Docker検証 #mesos
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は下記の資料を参考に検証しております。
“Launching a Docker Container on Mesosphere”:"Mesosphere上にdocker コンテナを起動する"
※筆者注 上記参照ページでは”Chronos 2.3.0+”を必要としていますが、2015/1/23時点の最新のバージョンは2.1.0であるため、本稿では2.1.0で検証を進めています。
事前準備
『Mesosphere 3node-cluster検証』を参照して、Master 3ノード以上、Slave 1ノード以上のMesosphereクラスタ構成が作成できていること
『Mesosphere Chronos検証』を参照して、MesosphereクラスタにChronosをインストールできていること
おさらい
『Mesosphere 3node-cluster検証』『Mesosphere Chronos検証』で作成された環境は以下です。
[Mesos Master(ZooKeeperクラスタ環境)]
ホスト名 | IPアドレス | 条件 | |
---|---|---|---|
ホスト1 | yarai-mesos02.ocdet.org | 158.85.208.203 | SoftLayer上のサーバ CentOS 6.5(x86_64) Mesos, Marathon, Chronosが動作済 |
ホスト2 | yarai-mesos03.ocdet.org | 158.85.208.204 | |
ホスト3 | yarai-mesos04.ocdet.org | 158.85.208.205 |
[Mesos Slave]
ホスト名 | IPアドレス | 条件 | |
---|---|---|---|
ホスト4 | yarai-mesos05.ocdet.org | 158.85.208.206 | SoftLayer上のサーバ CentOS 6.5(x86_64) Mesos Slaveが動作済 |
1.Mesos SlaveノードへのDockerインストール
EPELリポジトリを追加する
rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install docker-io
【注意】”-io”なしのdockerパッケージでは以降の手順が正常に動作しません。
2.設定
Dockerコンテナのリポジトリにプライベートを使う場合のみ以下を実施
/etc/sysconfig/docker を編集
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
other_args="--insecure-registry dockerrepo.mkhome:5000"
DOCKER_CERT_PATH=/etc/docker
# Location used for temporary files, such as those created by
# # docker load and build operations. Default is /var/lib/docker/tmp
# # Can be overriden by setting the following environment variable.
# # DOCKER_TMPDIR=/var/tmp
変更後、dockerサービスを再起動します。
service docker restart
Mesos Slave の設定
echo 'docker,mesos' > /etc/mesos-slave/containerizers
echo '5mins' > /etc/mesos-slave/executor_registration_timeout
Mesos Slaveを再起動します。
initctl restart mesos-slave
※ 検証環境ではこのコマンドでSlaveプロセスが起動しなかったので、rebootしました。
再起動後、設定が反映されていることを確認します。
# ps -efww|grep mesos-slave
root 1280 1 0 23:35 ? 00:00:00 /usr/sbin/mesos-slave --master=zk://158.85.208.203:2181,158.85.208.204:2181,158.85.208.205:2181/mesos --log_dir=/var/log/mesos --containerizers=docker,mesos --executor_registration_timeout=5mins
root 1303 1280 0 23:35 ? 00:00:00 logger -p user.info -t mesos-slave[1280]
root 1304 1280 0 23:35 ? 00:00:00 logger -p user.err -t mesos-slave[1280]
root 1542 1474 0 23:37 pts/0 00:00:00 grep mesos-slave
3.ChronosでDocker起動ジョブを投入
Mesos Masterにアクセス可能で、curlコマンドを持つクライアントを使用します。
ローカルに以下の内容のJSONファイル(./Docker.json)を作成します。
{
"schedule": "R/2015-01-23T05:50:00Z/PT2M",
"name": "dockerjob",
"container": {
"type": "DOCKER",
"image": "libmesos/ubuntu"
},
"command": "docker run libmesos/ubuntu cat /etc/hostname"
}
以下のコマンドでジョブをサブミットします。
curl -L -H "Content-Type: application/json" -X POST -d@Docker.json http://yarai-mesos03.ocdet.org:8081/scheduler/iso8601
特に戻りの出力はありません。
※ http_responseを見ることで結果を確認可能です。
Chronosのインターフェイスからジョブが投入されていることを確認できます。
Mesosの管理画面で、詳細を確認することができます。
4.MarathonでDocker起動ジョブを投入
Mesos Masterにアクセス可能で、curlコマンドを持つクライアントを使用します。
ローカルに以下の内容のJSONファイル(./Docker2.json)を作成します。
{
"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu",
"instances": 1,
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}
プライベートリポジトリを使う場合は以下のようなJSONファイルを作成します。
{
"container": {
"type": "DOCKER",
"docker": {
"image": "dockerrepo.mkhome:5000/oreore/centos65"
}
},
"id": "oreore",
"instances": 1,
"uris": [],
"cmd": "while sleep 10; do date -u +%T; cat /etc/issue; done"
}
WebブラウザでMesos Masterの画面を開きます。
上部のメニューから[Frameworks]をクリックし、MarathonがどのMasterノードで実行されているかを確認します。
上記の例では、Marathonのホスト”mesos-s1.mkhome”で実行されていることがわかります。
以下のコマンドでジョブを投入します。
curl -X POST -H "Content-Type: application/json" http://mesos-m1.mkhome:8080/v2/apps -d@docker2.json
次にMarathonの管理画面を開きます。
webブラウザで http://mesos-m1.mkhome:8080 を開くと、次のような画面が表示されます。
Statusに”Deploying”が表示されていることがわかります。
これは実行しているSlaveノード上でDockerコンテナイメージを取得している際に表示されます。
ジョブ名をクリックすると実行中のSlaveノードが表示されます。
上記の例では”mesos-s2.mkhome”上で実行されていることが分かります。
Dockerイメージのダウンロードが完了し、ジョブの実行が開始されると、ステータスが”Deploying”から”Running”に変化します。
Mesos Masterの画面から、ジョブの標準出力、標準エラー出力の内容を確認することができます。
WebブラウザからMesos Masterの画面を開き、上部メニューの[Frameworks]を選択します。
Marathonの情報を表示している行のID番号(...5050-1664-0000)をクリックします。
“Active Tasks”行の、”Sandbox”をクリックします。
“stdout”, “stderr”をクリックすると、それぞれ標準出力、標準エラー出力の内容が表示出来ます。
標準出力
標準エラー出力
まとめ
3回の連載になりましたが、いかがでしたでしょうか。
Apache MesosとDockerを組み合わせることで、柔軟に環境を変化させながらアプリケーションを実行できるDockerの特徴をワークフローに密接に連携させる事ができるようになり、可用性の確保やスケーリングがより容易になります。また実行インフラが抽象化されることにより、アプリケーションエンジニアがより実際のサービスに集中できる環境を整備することが可能になります。
Apache Mesosおよび、Apache Mesosの商用パッケージについてのお問い合わせは弊社までご連絡いただければ幸いです。
関連記事
Mesosphere チュートリアル01:Mesosphere 3node-cluster検証(CentOS6.5)
Mesosphere チュートリアル02:Mesosphere Chronos検証