Mesos & Marathon on Google Cloud Platform by Rancher ～Install & ‎Architecture～

先日の[Mesos Meetup Tokyo #1](https://mesos.connpass.com/event/57331/)でのLTで発表させていただ内容を実践的にした形でQiitaに投稿します。

[RancherでMesosとMarathonやってみた！！](https://www.slideshare.net/cyberblackvoom/ranchermesosmarathon?ref=https://mesos.connpass.com/event/57331/presentation/)の資料をベースとしています。

Rancher ServerとAgent環境を構築して、Mesos & Marathon環境も構築して、RancherのMesosのArchitecutreを考えてみたいと思います。

# Rancher Server & Agent on GCP

今回は、Google Cloud Platformを利用して、Rancher Server 1台とAgentホスト 4台の環境を作成します。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/61606/3b0a22c1-a8ac-33e5-ec77-ce276ead2a33.png)

※他のクラウドベンダー、オンプレミス環境でも構いません。

Compute Engineで以下の5インスタンスを作成します。

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|ゾーン|asia-southeast1-a|
|マシンタイプ|vCPUx1|
|ブートディスク|Ubuntu 14.04 LTS|
|ファイアウォール|HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。|

GCPでは、デフォルトでファイアウォールが設定されていて、ホスト間でのコンテナの通信が行えないため、
設定を変更する必要があります。

GCPのダッシュボードで、「ネットワーキング」-「ファイアウォール」を選択して、ファイアウォールルールを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/2dc3bc00-a862-a03f-e923-3782d6fb886c.png)

名前は任意名、ソースIPの範囲は0.0.0.0/0、プロトコルとポートは全て許可とします。
今回はお試しということで、全許可にしています。
最後に「作成」ボタンをクリックします。


## Rancher Serverの構築

### rootパスワードの設定
GCPではrootのパスワードがデフォルトでは設定されていないので、まずはrootのパスワードを設定します。
5インスタンスに任意のパスワードを設定します。

```lang:コマンド
$ sudo passwd root
```
### Dockerのインストール
Dockerをインストールします。
前回の[「Kubernetes on Google Cloud Platform by Rancher ～Install & ‎Architecture～」](http://qiita.com/cyberblack28/items/a0456b40bb868bae0440)と同様に1.12.6をインストールします。
（※特に理由はありません）

5インスタンスにDockerをインストールします。

```lang:コマンド
$ curl https://releases.rancher.com/install-docker/1.12.6.sh | sh
.
.
.
Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:26:30 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:26:30 2017
 OS/Arch:      linux/amd64
.
.
.
Remember that you will have to log out and back in for this to take effect!
```
### Rancher Serverのインストール
5インスタンスうちの1台に最新版のRancher Serverのコンテナをインストールします。
2017年6月現在Rancher Serverはv1.6.2となります。

```lang:コマンド
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
```

対象のインスタンスの外部IPにポート8080でブラウザからアクセスします。

http://外部IPアドレス:8080/

![screencapture-35-186-144-37-8080-env-1a5-apps-stacks-1497185148604.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b5f2bf69-9d7f-5a6a-37f3-78ddc4273eba.png)

1.「Got it」をクリックします。

2.下部メニューの言語選択から「日本語」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/eec7c99a-2305-200f-88fe-2095bdf4daf7.png)

3.上部メニューの「管理者」-「アクセスコントロール」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/834031ec-63d3-b58e-fa2b-c5aaee5b3c5a.png)

4.「click here」をクリックします。

![rancher03.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c74846b5-38e2-397f-b95b-d84604efd234.png)

5.GitHubのログイン画面が表示されます。ログインします。
※GitHubのアカウントを持っていない場合は作成しましょう。

![rancher04.png](https://qiita-image-store.s3.amazonaws.com/0/61606/acc37357-3b8c-07b1-976b-bf186e122752.png)

6.「Register a new Application」ボタンをクリックします。
![rancher05.png](https://qiita-image-store.s3.amazonaws.com/0/61606/69ec7672-901a-74bf-5954-8e353a53fbcb.png)

7.赤枠箇所を入力し、「Register application」ボタンをクリックします。

![rancher06.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b213e3d4-be89-49eb-0fbe-8bfb25bc23bd.png)

8.「Client ID」および「Client Secret」が払い出されます。

![rancher07.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f6f4e1b7-f75e-d165-d5dc-876a22604c41.png)

9.GitHubから払い出された「クライアント ID」および「クライアント秘密キー」を入力して「保存」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/991dca71-9939-0169-85e0-5479e5b4df3a.png)

10.「GitHubアカウントで認証」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/d97956dc-83a6-423e-69f5-0953cc26cb36.png)

11.Rancher側の画面が切り替わり「GitHubは有効です」と表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/976213c6-e67e-7f88-ec43-b3d8e99174f4.png)

## Mesos環境テンプレートの作成

1.上部メニュー「環境管理」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/07ca1298-8eff-d4a7-2b98-2b750f8e1122.png)

2.「環境追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cd5760e8-d4f0-626a-c164-2f4bfd16eb91.png)

3.「名前」に任意の名前を入力します。ここでは「Mesos」とします。「環境のテンプレート」でMesosのアイコンを選択します。「作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/d7722192-634a-4aa7-ea77-e819cf0c1212.png)

4.上部メニューから「Mesos」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/0fe8f606-0720-7c38-3866-fe95c3288426.png)

5.「ホストを追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/672106fe-0992-a7bb-7fa9-be845d8e343f.png)

## Rancher Agentのインストール

1.赤枠のコマンドをコピーして、残り4台にペーストし、「閉じる」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/24615549-846b-cf9c-09f5-e80f49a45168.png)

```lang:コマンド
sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.2 http://RancherServer外部IP:8080/v1/scripts/F9EECE5AE8FBF581E48F:1483142400000:Bzx0M3N05gizRN4WkiJPSKtUp0
```

2.上部メニュー「インフラストラクチャー」から「ホスト」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f477b150-5219-aa53-be2f-c8ed2fdc0baf.png)


3.Rancher ServerとRancher Agentが連携し、約5分以内にMesos環境が構築されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/23b8cd8c-4e69-5acf-488d-4c82074989e0.png)

4.上部メニュー「MESOS」-「概要」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/1becd5d9-e79c-540c-513a-93e68cfa5354.png)

5.「Mesos UI」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/664eb131-6c60-ae57-f7e9-d01d25992a84.png)

自動的にブラウザが起動し、Mesos UIを利用できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cf10c223-c26d-ec11-711a-72b46167f9fb.png)

## Marathonのデプロイ

Rancherのカタログ機能を利用して、Marathonをデプロイします。

1.上部メニュー「カタログ」-「コミュニティ」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/569132ec-bc18-f18c-e3e8-5ef470e94e32.png)

2.Marathonの「詳細を見る」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/5ea3ec2c-6b47-cc10-152b-c9a636cc090b.png)

3.「起動」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c06ad69f-b608-45bc-1245-0d8ea6f98b58.png)


4.上部メニュー「インフラストラクチャー」から「ホスト」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f477b150-5219-aa53-be2f-c8ed2fdc0baf.png)

HOST4にデプロイされたことが確認できます。
※デプロイホストはRancherにより自動的に決まります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/5ba7cb14-4aa8-31b3-966f-ce1958a77095.png)

http://host4の外部IPアドレス:8080/ にブラウザでアクセスすることでMarathon UIを利用できます。

![screencapture-35-190-226-192-8080-ui-1497803266540.png](https://qiita-image-store.s3.amazonaws.com/0/61606/05d70532-3289-502c-2234-8da4d964a5dd.png)

以下構成となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/7efa2058-f9a3-4106-d4d5-6e17705b3592.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/5327f71a-5fbe-99ba-336f-674a4bd16593.png)

# MarathonによるNginxのスケールアウト

1.Marathonのコンテナがあるホストの外部IPとポート8080にブラウザでアクセスし、「Create Application」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8fa62f74-6e4a-67f7-af94-beabf2afcc3a.png)

2.IDに任意名を入力（ここではnginxとします）し、「Docker Container」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f56b3378-5f34-3b26-c01e-ae48b6e15f13.png)

3.「Image」にnginxと入力して、「Create Application」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/91cb202a-0c6c-d1b0-330d-1a1bc6dd6be7.png)

4.nginxのイメージがデプロイされて、Runningであることを確認し、nginxをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/503448e4-a9f1-57e1-6895-5563b2b5940c.png)


5.「Scale Application」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/743a8031-f377-e072-a7a1-a0d897a222f2.png)

6.スケールする数を入力し、「Scale Application」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b3d1adef-5772-a9ed-042b-e4d26b724fc5.png)

7.nginxがスケールされたことを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ced80e33-7ff3-b00f-05c6-1656f77809df.png)

6.Rancher UIからも確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/61ae3e37-933f-c997-f19c-6a3d4feb8320.png)

以下構成となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c07881b5-d1f0-e51e-c991-5948fee407c2.png)


# Mesos Architecture of Rancher

ホスト3台に、MesosスタックにMesos Master,Mesos Slave,Zookeeperのコンテナがデプロイされて、4台目以降のホストにはMesosスタックにMesos Slaveがデプロイされますが、各ホストへの配置はRancherにより自動で行われます。

MarathonやCHRONOS等のカタログは、スタックとしてまとめられて、Rancherにより自動的にホストにデプロイされます。

スタンドアロンのコンテナは、基本的に独立型コンテナスタックにデプロイされます。
どのホストにデプロイされるかはRancherにより自動的に決まります。

テンプレート選択するだけで、Mesos環境が簡単に構築でき、カタログを利用すれば、MarathonやCHRONOS等のMesos FrameworkもデプロイできるのでDC/OSような環境がすぐに構築できます。

RancherではMesos同様にK8S環境も簡単に構築できるので、[「Kubernetes on Google Cloud Platform by Rancher ～Install & ‎Architecture～」](http://qiita.com/cyberblack28/items/a0456b40bb868bae0440)と合わせて、試してみましょう。