fbpx

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-docker01

Mesosの管理画面で、詳細を確認することができます。

Mesos-docker02

Mesos-docker03

Mesos-docker04

Mesos-docker05

Mesos-docker06

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ノードで実行されているかを確認します。

Mesos-docker07

上記の例では、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 を開くと、次のような画面が表示されます。
Mesos-docker08

Statusに”Deploying”が表示されていることがわかります。
これは実行しているSlaveノード上でDockerコンテナイメージを取得している際に表示されます。
ジョブ名をクリックすると実行中のSlaveノードが表示されます。

Mesos-docker09

上記の例では”mesos-s2.mkhome”上で実行されていることが分かります。
Dockerイメージのダウンロードが完了し、ジョブの実行が開始されると、ステータスが”Deploying”から”Running”に変化します。

Mesos-docker11

Mesos Masterの画面から、ジョブの標準出力、標準エラー出力の内容を確認することができます。

WebブラウザからMesos Masterの画面を開き、上部メニューの[Frameworks]を選択します。

Mesos-docker12

Marathonの情報を表示している行のID番号(...5050-1664-0000)をクリックします。

Mesos-docker13

“Active Tasks”行の、”Sandbox”をクリックします。

Mesos-docker14

“stdout”, “stderr”をクリックすると、それぞれ標準出力、標準エラー出力の内容が表示出来ます。

標準出力
Mesos-docker15

標準エラー出力
Mesos-docker16

まとめ


3回の連載になりましたが、いかがでしたでしょうか。
Apache MesosとDockerを組み合わせることで、柔軟に環境を変化させながらアプリケーションを実行できるDockerの特徴をワークフローに密接に連携させる事ができるようになり、可用性の確保やスケーリングがより容易になります。また実行インフラが抽象化されることにより、アプリケーションエンジニアがより実際のサービスに集中できる環境を整備することが可能になります。
Apache Mesosおよび、Apache Mesosの商用パッケージについてのお問い合わせは弊社までご連絡いただければ幸いです。

関連記事


Mesosphere チュートリアル01:Mesosphere 3node-cluster検証(CentOS6.5)
Mesosphere チュートリアル02:Mesosphere Chronos検証

新規CTA