Posted at

Apache Mesos ことはじめ

More than 3 years have passed since last update.


Apache Mesos

Apache Mesosについて。メイソースと発音するらしい。作業メモでありどなたかにお見せすることを想定して書いていない。解説等を期待される向きは最後に貼りまくったReferencesを参照されたし。


MesosでDockerを動かしてみる

なにはともあれdockerである。


環境


  • MacOS 10.9.5

  • Vagrant x VirtualBox x CentOS 6.5


手順

とりあえずテストとしてMesosphereをSingle Nodeで動かしてみる。ここを参考


Mesos, Marathon, Chronosをインストールする

ここを参考

UbuntuとDebian

# Setup

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)

# Add the repository
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | \
sudo tee /etc/apt/sources.list.d/mesosphere.list
sudo apt-get -y update

# Install packages
sudo apt-get -y install mesos marathon chronos

RedHatとCentOS

# Add the repository

sudo rpm -Uvh http://repos.mesosphere.io/el/6/noarch/RPMS/mesosphere-el-repo-6-2.noarch.rpm

# Install packages
sudo yum -y install mesos marathon chronos


ZooKeeperをインストールする

sudo rpm -Uvh http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm

sudo yum -y install zookeeper
sudo zookeeper-server-initialize --myid=1
# => Using myid of 1

Configurationはデフォルトのままでよい。default configurationについて詳しくはここを参照


もろもろを起動する

Zookeeper起動

# Ubuntu / Debian

sudo service zookeeper restart
# RedHat / CentOS
sudo zookeeper-server start
# => JMX enabled by default
# Using config: /etc/zookeeper/conf/zoo.cfg
# Starting zookeeper ... STARTED

mesos master/slave, marathonを起動

sudo service mesos-master start

sudo service mesos-slave start
sudo service marathon start

MesosとMarathonのコンソールにアクセスできることを確認する。5050番と8080番ポートで立ち上がっている(はず)


起動しない

CentOS6.5でzookeeperが起動するところまでは順調に行くものの

sudo service mesos-master start

# => mesos-master: unrecognized service
sudo service mesos-slave start
# => mesos-slave: unrecognized service
sudo service marathon start
# => marathon: unrecognized service

えー。

ls /etc/init.d/mesos*

# => ls: cannot access /etc/init.d/mesos*: No such file or directory

えー。

which mesos-master

# => /usr/local/sbin/mesos-master
which mesos-slave
# => /usr/local/sbin/mesos-slave
which marathon
# => /usr/local/bin/marathon

おや?

mesos-master start

# => Segmentation fault

えー。

sudo /usr/local/sbin/mesos-master start

何も起きない、localhost:5050にアクセスしても何も出ない。


ソース読まないとだめなの?


めんどくさい

困った。何が問題なのだろうと公式のドキュメントを探していたところ

Virtual Machine Installation using Vagrant

あれ?

git clone https://github.com/mesosphere/playa-mesos.git

cd playa-mesos
vagrant up

………。


続・MesosでDockerを動かしてみる

そもそもこういうインストール・マニアックスみたいなものを滅ぼすためのInfrastructure as Codeなのであってその最先鋒たるこの周辺で用意されていないはずがないのであり「まずインストールしてみる」みたいな発想から脱出しなければ生き残れないという思いを強くしつつLaunching a Docker Container on Mesosphereをやってみます。

# 配布されているVagrantfileから立ち上げたものではパーミッション変更が必要ぽい

chmod u+w /etc/mesos-slave
sudo echo 'docker,mesos' > /etc/mesos-slave/containerizers
sudo echo '5mins' > /etc/mesos-slave/executor_registration_timeout
sudo service mesos-slave restart

~/mesos/Docker.jsonを作成


Docker.json

{

"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu",
"instances": "1",
"cpus": "0.5",
"mem": "512",
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}

こいつをcurlでhttp://localhost:8080/appsにPOSTする

curl -X POST -H "Content-Type: application/json" http://localhost:8080/v2/apps -d@Docker.json

http://localhost:5050/ではMesosがタスクとリソースの状況を表示してくれていて、http://localhost:8080/でMarathonが動かしているコンテナをappとして管理してくれている。


しかし

動いていない。

MesosのComplete TasksにStatus:FAILEDのタスクが並びMarathonのAppもInstanceが0/1のまま変化しない。ということは…

# dockerが入ってないのでは?

which docker
# => /usr/local/bin/docker
# ってことはバージョンが古い?
docker --version
# => Docker version 0.9.1, build 3600720

"Docker version 1.0.0 or later needs to be installed on each slave node"とあります通り、アップデートが必要です。

sudo apt-get update && sudo apt-get install -y docker

途中でgrubをインストールするのにパーティションを指定しておくれと言われるのでVBOXのパーティションだけ指定する。インストールできたらcurlコマンドをリトライして…うまくいった!コンテナが動いている。あとはmaster-slaveそれぞれで導入すれば大丈夫そうだ。適当に計算機を集めてきてローカルプチAWSを作れそうだ。こいつのラッパーと実行サポートのCUIツールを書けばよさそう。

というわけでつづく。


References

とりあえず検索して引っかかってきたものを並べて全部読んだ。本番構築の際にはもっとお世話になると思います。ありがとうございます。


Related Documents