Spark + Kubernetes Docker on SoftLayer by Rancher

[Spark Summit 2016 San Francisco](https://spark-summit.org/2016/)が終わったというところで、RancherというDockerコンテナ管理ツールを使って、SoftLayer上にkubernetesを利用したSparkのクラスタ環境を簡単に構築してみた記録です。

まずは、それぞれの概要を記します。

# Rancher
![racger.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ef843d5b-09e2-1bf1-73fc-863c69a7fe84.png)
Rancherは、Dockerイメージとして配布されているコンテナやクラスタの管理をWebUIで簡単に行えるオープンソースのツールです。

SoftLayer、GCP、AWS、Azure、DigtalOcean、rackspaceといった、各種クラウドとのコンテナ連携が可能です。

2016年3月にバージョン1.0になり、Kubernetes、DockerSwarm、Mesos等のクラスタ環境管理機能が追加されました。


公式サイト：http://rancher.com/

# Spark

![spark.png](https://qiita-image-store.s3.amazonaws.com/0/61606/9aedbf42-7281-6981-a2b4-76043a7e0d53.png)

Sparkは、Hadoop同様の分散処理のフレームワークです。
HadoopがJava言語で作られているのに対してSparkはJavaの派生言語であるScalaで作られています。
以下の特徴があります。

- インメモリ処理による高速化
- 「データの格納場所」に関する選択肢の広さ
- プログラム手法に関する選択肢の広さ(SQLもサポート)

公式サイト：http://spark.apache.org/

参考サイト：http://www.slideshare.net/hadoopxnttdata/apache-spark-spark

参考サイト：http://www.graffe.jp/blog/1710/

# SoftLayer
![SoftLayer.jpg](https://qiita-image-store.s3.amazonaws.com/0/61606/7e9d3bfd-dddb-2a40-7016-8e8729c832d8.jpeg)

SoftLayerは、IBMが提供する、高いパフォーマンスとセキュリティーを兼ね備えた企業向けのパブリック・クラウドです。

他のクラウドベンダーと主に違うところは、ベアメタルサーバが利用(最短30分)できるというところです。

公式サイト：http://www.ibm.com/cloud-computing/jp/ja/SoftLayer.html

#Docker
![docker.png](https://qiita-image-store.s3.amazonaws.com/0/61606/993feb28-768e-5f0d-0c8c-07898bc541b1.png)

Dockerは、ソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアです。

公式サイト：https://www.docker.com/

参考サイト：http://www.slideshare.net/cyberblackvoom/linaction-theme-docker

#kubernetes
![kubernetes.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f6320a8f-34e9-f977-10da-a872a61a3ac5.png)
Kubernetesは、Dockerをはじめとするコンテナクラスタ管理システムです。名称が長いため、k8sと略される場合もあります。
Googleの[Borg](https://research.google.com/pubs/pub43438.html)という社内で開発・運用されているコンテナクラスタ管理システムのノウハウを結集して作られました。Googleが中心になって開発してきましたが、現在ではLinux Foundation傘下である「Cloud Native Computing Foundation」（CNCF）が管理を行い、数多くの企業が開発に参加しています。

公式サイト：http://kubernetes.io/

参考サイト：https://oss.sios.com/yorozu-blog/yorozu-20151216

* * *
kubernetes、Sparkの構築は一から始めると大変ですが、Rancher、SoftLayerを使って簡単に構築して、試してみましょう！！

# SoftLayer上にRancherを構築 

RacherでSpark + Kubernetes環境を構築するには、以下3個のホストが必要となります。

- Rancherのマネージャ用ホスト
- Spark + Kubernetes用ホスト1
- Spark + Kubernetes用ホスト2

3個の仮想サーバをSoftLayer上に作成します。
スペックは以下となります。

**Rancherのマネージャ用ホスト**
※表にない項目は全てデフォルト設定としてください。

|項目|設定内容|備考|
|:-----------------|:------------------|:------------------|
|Data Center      |SJC01 - San Jose| SAN FRANCISCOに近いということで！|
|Computing Instance|2 x 2.0 GHz Cores|-|
|RAM|4GB|-|
|Operating System|Ubuntu Linux 16.04 LTS Xenial Xerus Minimal Install (64 bit) |-|

**Spark + Kubernetes用ホスト1と2**
※表にない項目は全てデフォルト設定としてください。

|項目|設定内容|備考|
|:-----------------|:------------------|:------------------|
|Data Center      |SJC01 - San Jose| SAN FRANCISCOに近いということで！|
|Computing Instance|2 x 2.0 GHz Cores|-|
|RAM|4GB|-|
|Operating System|Ubuntu Linux 16.04 LTS Xenial Xerus Minimal Install (64 bit) |-|

SoftLayerだけでなくAWS、Azure等、他のクラウドでも同等の仮想サーバを作成することでRacher環境は構築できます。

# Rancher マネージャ用ホストの作成

SoftLayer上に作成したマネージャ用ホストにSSHでログインし、以下のコマンド操作を実施します。

1.パッケージの最新化を行います。

```lang:コマンド
# apt-get update
```
2.wgetコマンドをインストールします。

```lang:コマンド
# apt-get install wget
```
3.最新のDockerパッケージをインストールします。

```lang:コマンド
# wget -qO- https://get.docker.com/ | sh
```
4.Dockerが正しくインストールされていることを確認します。

```lang:コマンド
# docker run hello-world
```

Hello from Docker!
This message shows that your installation appears to be working correctly.

上記内容が表示されればDockerが正しくインストールされています。

5.Rancherマネージャコンテナを実行します。

```lang:コマンド
# docker run -d -p 8080:8080 rancher/server
```
6.2分程後にブラウザを起動して、http://マネージャ用ホストのIPアドレス:8080/ にアクセスすると以下の画面が表示されます。

![rancher01.png](https://qiita-image-store.s3.amazonaws.com/0/61606/50c2fee5-887a-5058-7c46-bb2933d87582.png)


7.このままでは誰でもアクセスできるため、GitHubのOAuth連携設定を行います。
上部メニューの「ADMIN」-「Access Control」を選択します。

![rancher02.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ff5614d8-e6a5-5aea-ab57-4af172f224dc.png)

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

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

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

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

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

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

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

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

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

13.GitHubから払い出された「Client ID」および「Client Secret」を入力します。

![rancher08.png](https://qiita-image-store.s3.amazonaws.com/0/61606/27f73e99-8eb1-1337-6db2-eb17e90471c2.png)

14.「Authenticate with GitHub」ボタンをクリックします。

![rancher09.png](https://qiita-image-store.s3.amazonaws.com/0/61606/a4336d68-840b-6c42-7977-655a39573612.png)

15.新たにウィンドウが開きます。[Authorize application]ボタンをクリックします。ウィンドウは自動的に閉じます。

![rancher10.png](https://qiita-image-store.s3.amazonaws.com/0/61606/6b79c6c9-d199-cd26-2cd5-c451f15e77b0.png)

16.Rancher側の画面が切り替わり「GitHub is enabled」と表示されます。

![rancher11.png](https://qiita-image-store.s3.amazonaws.com/0/61606/50e9a8e8-0639-2dde-1162-2c67d46231be.png)

# Rancher Spark + Kubernetes用ホスト1と2の作成

SoftLayer上に作成したSpark + Kubernetes用ホストにSSHでログインし、以下のコマンド操作を実施します。

※2台とも同じ手順なので、1台ずつ行ってください。

1.パッケージの最新化を行います。

```lang:コマンド
# apt-get update
```
2.wgetコマンドをインストールします。

```lang:コマンド
# apt-get install wget
```
3.最新のDockerパッケージをインストールします。

```lang:コマンド
# wget -qO- https://get.docker.com/ | sh
```
4.Dockerが正しくインストールされていることを確認します。

```lang:コマンド
# docker run hello-world
```

Hello from Docker!
This message shows that your installation appears to be working correctly.

上記内容が表示されればDockerが正しくインストールされています。

5.上部メニューの「Default」-「Manage Environment」を選択します。

![sk01.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cbe67327-0723-1e13-347d-b72bfd142234.png)

6.上部メニューの「Add Environment」ボタンをクリックします。

![sk2.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8fd2072c-313b-71a8-93db-d12d67d3cc55.png)

7.Container Orchestrationを「Kubernetes」、Nameに「Spark」と入力します。（任意名可）「Create」をクリックします。

![sk03.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8c4f6be6-c3af-78d4-50a1-ae7db57418dc.png)

8.上部メニューの「Default」-「Spark」を選択します。

![sk04.png](https://qiita-image-store.s3.amazonaws.com/0/61606/170fc355-1581-d903-99ae-1a0f290454f0.png)

9.「Add Host」ボタンをクリックします。

![sk05.png](https://qiita-image-store.s3.amazonaws.com/0/61606/bf530efb-f2ba-2cd8-cdc6-45dd3970a2e0.png)

10.画面が遷移し、赤枠のコマンドを右クリックでコピーします。

![sk06.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8d94532a-b074-ff04-e5bb-302ce45df97a.png)

11.Spark + Kubernetes用ホストでコマンドを実行します。

```lang:コマンド
# docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://RancherマネージャーホストのIPアドレス:8080/v1/scripts/742C925BD35B1371DC76:1468162800000:edIKINp3SivizYyYLRNAKggQSU
```

12.Rancherの画面に戻り、「close」ボタンをクリックします。

![sk07.png](https://qiita-image-store.s3.amazonaws.com/0/61606/898952e5-1285-fc00-c3fe-7463ad297723.png)


13.上部メニュー「INFRASTRUCTURE」-「Hosts」を選択します。

![rancher14.png](https://qiita-image-store.s3.amazonaws.com/0/61606/38b8ded1-4509-69f8-86e0-0c273abe96cc.png)

14.Spark + Kubernetes用ホストがマネージャ用ホストの管理下に入り、kubernetesのクラスタ環境も完成します。

![sk08.png](https://qiita-image-store.s3.amazonaws.com/0/61606/d30731ad-0c20-537a-2379-32d151f66d03.png)


# Sparkの構築

1.上部メニュー「CATALOG」を選択します。

2.「Spark」の「View Details」ボタンをクリックします。

![sk09.png](https://qiita-image-store.s3.amazonaws.com/0/61606/fc1f0f60-9ad1-f1e4-f628-2fe18b483c45.png)


3.「Launch」ボタンをクリックします。

![sk10.png](https://qiita-image-store.s3.amazonaws.com/0/61606/dbb9c8aa-cda3-719a-adc7-3a9cfe9d4330.png)


4.約5分ほど待つと環境が構築されます。

![sk11.png](https://qiita-image-store.s3.amazonaws.com/0/61606/50bdc695-f46a-ab8f-47b4-23493c2b4de3.png)


5.ブラウザから2つ目のホストのIPアドレスにポート8080を指定してアクセスします。SparkのWebUIを確認することができます。

![sk12.png](https://qiita-image-store.s3.amazonaws.com/0/61606/19df9f36-7b0c-6a5d-c610-5d1bac50e29f.png)

* * *
以上でSpark + Kubernetes Docker on SoftLayer by Rancherは完了となります。

上部メニューの「INFRASTRUCTURE」-「Containers」を選択すると、各ホストの全コンテナを確認することができます。試しにどれかコンテナをDeleteしてみると自動的に同じコンテナが作成されます。
これがまさにKubernetesの稼働です。
苦行と言われているKubernetesの構築が簡単にできます。

また、SoftLayerにはAWSのECS、GCPのGKE、Azure Container Serviceのようなコンテナサービス体系はないので、Rancherのようなコンテナ管理ツールが役立ちます。

Rancherは、kubernetes、Docker Swarm、Mesosといったコンテナクラスタ機能も簡単に構築できる点も非常に良いところです。

Rancherで環境構築をスムーズに行い、あらゆるOSSを試してみましょう！！