Rancher が提供する機能と実装予定の機能

# はじめに
今回は，Rancher が提供する機能や提供予定の機能についてまとめてみます．
この記事で書く機能は，Rancher のWeb ページ(http://rancher.com/rancher-io/) やGithub ページ (https://github.com/rancherio/rancher) に書かれているもの，Rancher v0.3 のデモ動画 (https://vimeo.com/116803858) で紹介されているものです．

# 提供している機能(実装済みの機能)
## オーバレイネットワーク
Rancher が管理するホストは，Rancher が構築するオーバレイネットワークを介して通信できます．
このため，分散したホスト上にあるコンテナでも，同一ネットワーク上のあるかのように扱うことができます．
デモ動画(https://vimeo.com/116803858)では，異なるホスト上のコンテナ間でリンクする例を紹介しています．
この例を動画のスクリーンショットと共に見てみます．

### 異なるホスト間でのコンテナのリンク
デモ動画では，AWS上にCoreOSを，SoftLayer 上にUbuntuを，VULTR 上にCentOS 7を起動し，それぞれをDockerのホストとしてRancher の管理サーバーに登録しています．
以下の画像の左から順にAWS, SoftLayer, VULTR のマシンです．
![rancher-features01.png](https://qiita-image-store.s3.amazonaws.com/0/51342/7c653805-ffe8-55a2-8f22-b309e99a18b5.png)

ここで，AWS にあるホストで "mysql" という名前の MySQL サーバーのコンテナを作成しました．
MySQL のコンテナが作成されたと同時に，"Network Agent" という名前のコンテナが作成されました．
この "Network Agent" というコンテナが，オーバレイネットワークを実現しています．
![rancher-features02.png](https://qiita-image-store.s3.amazonaws.com/0/51342/49b51a7f-93ac-963e-7882-40dd2bfdd0f7.png)

次に，SoftLayer にあるホストで WordPress のコンテナを作成します．
![rancher-features021.png](https://qiita-image-store.s3.amazonaws.com/0/51342/b318f8ec-d9a0-031d-a8f5-a89a8aebb068.png)

WordPress のコンテナを作成する時に，AWS 上にある "mysql" コンテナにリンクしています．
リンクの操作は，プルダウンメニューからコンテナを指定し，エイリアスを指定するだけです．
![rancher-features040.png](https://qiita-image-store.s3.amazonaws.com/0/51342/e46739f2-4113-57f5-4ab8-2056e0fbb4b2.png)

コンテナの作成が完了しました．
ここで，コンテナのIP アドレスを見ると，"10.42.xx.xx" となっています．
このネットワークはRancher が構築するオーバレイネットワークです．
![rancher-features050.png](https://qiita-image-store.s3.amazonaws.com/0/51342/23623f0c-01d4-3241-c622-d8bc1020801f.png)

WordPress のコンテナのポートをホストの80番ポートにバインドして，
![rancher-features060.png](https://qiita-image-store.s3.amazonaws.com/0/51342/40aef246-ce40-411c-d4ec-1336a9a9358d.png)

ブラウザでホストのIPアドレスへアクセスすると
![rancher-features070.png](https://qiita-image-store.s3.amazonaws.com/0/51342/d1b8a004-8fec-0553-05c3-9fadcdc58181.png)

ちゃんとWordPressが動作しています．
![rancher-features080.png](https://qiita-image-store.s3.amazonaws.com/0/51342/207cdf87-2268-6d27-b998-e7e7b59433a8.png)

このように，Rancher ではホストの違いを意識することなくコンテナ同士をリンクできます．
これは，Rancher が構築するオーバレイネットワークにより，異なるホスト上にあるコンテナ同士も同一ネットワーク上に接続しているように扱えるためです．

### オーバレイネットワーク外にコンテナを作る
Rancher ではオーバレイネットワークに接続しないコンテナも作成できます．
コンテナ作成時，"The Basics" の "Network" の部分を "Unmanaged Network" に変更することで，オーバレイネットワークに接続しないコンテナを作成できます．
![rancher-features260.png](https://qiita-image-store.s3.amazonaws.com/0/51342/74bd00fe-4d7f-68ba-3ccb-7d0d5650366a.png)

"Unmanaged Network" と設定して作成したコンテナ(画像右端の"ubuntu") は172.17.xx.xx であり，オーバレイネットワークのIP アドレスである"10.42.xx.xx" とは異なります．
![rancher-features280.png](https://qiita-image-store.s3.amazonaws.com/0/51342/cae55b60-08ae-9f9b-81a6-4af230df2e53.png)

## ボリューム管理
Rancher ではコンテナのボリューム管理の機能も提供しています．
コンテナ作成時，特に指定がなければそのコンテナ用のボリュームが自動で生成されます．
このコンテナは，コンテナを停止したり削除した後も残ります．
また，複数のコンテナからボリュームを共有する設定もできます．

デモ動画では，最初に作成した MySQL のコンテナのボリュームを，新たに作成した別の MySQL サーバーと共有するデモがあります．
このデモを動画のスクリーンショットと共の見てみます．

### ボリューム共有のデモ
デモの開始時には，"mysql" という MySQL サーバーとそれにリンクして動作している "wordpress" というWordPress サーバーのコンテナがあります．
ここで，"mysql" コンテナを停止し，"mysql-2" というコンテナを新たに作成します．
"mysql-2" コンテナは "mysql" コンテナのボリュームを共有して利用します．
この状態で，"wordpress" コンテナを "mysql-2" にリンクし直し，動作確認します．

では，順を追って見ていきます．
まず，"mysql" コンテナを停止します．
![rancher-features090.png](https://qiita-image-store.s3.amazonaws.com/0/51342/85e1f616-85a4-1040-e365-139443d0c6ed.png)

コンテナを停止したら，新たに別の MySQL コンテナを起動します．
![rancher-features100.png](https://qiita-image-store.s3.amazonaws.com/0/51342/6d836acb-0881-e772-8d11-0e45f71ab7a8.png)

コンテナの名前とイメージを指定します．
このコンテナには，"mysql-2" という名前をつけています．
![rancher-features110.png](https://qiita-image-store.s3.amazonaws.com/0/51342/f0794b89-ed5d-a729-be47-155edbf5549e.png)

作成時に，利用するボリュームを指定します．
ここでは，先ほど停止した "mysql" コンテナが利用していたボリュームを指定します．
![rancher-features130.png](https://qiita-image-store.s3.amazonaws.com/0/51342/dd5abe48-5344-8582-d197-5deaa7795ead.png)

上記の設定で作成した "mysql-2" コンテナの詳細です．
ボリューム "1v8" が "mysql" と共有されていることがわかります．
![rancher-features160.png](https://qiita-image-store.s3.amazonaws.com/0/51342/e84d120c-6864-406c-1758-1fac4ee4597d.png)

ボリュームの一覧です．
先ほどの "1v8" というボリュームの "Containers" が 2 になっています．
これは，"mysql" と "mysql-2" の2つのコンテナから共有されているためです．
![rancher-features200.png](https://qiita-image-store.s3.amazonaws.com/0/51342/88837847-cabf-32cf-3b62-621b3dd7559d.png)

この時点で，"wordpress" のコンテナは "mysql" コンテナとリンクしています．
しかし，"mysql" コンテナは現在止まっています．
このままでは，"wordpress" が動作しないので，"wordpress" コンテナを "mysql-2" コンテナにリンクし直します．
"wordpress" コンテナのEdit をクリックし，編集画面を表示します．
![rancher-features210.png](https://qiita-image-store.s3.amazonaws.com/0/51342/6312b6cf-194a-055a-05c9-cdfeb2c416d0.png)

"Links" の部分を編集します．
現在は，"mysql" コンテナにリンクしています．
![rancher-features220.png](https://qiita-image-store.s3.amazonaws.com/0/51342/fc177e62-ca9d-e2ce-5248-20a9e64819b6.png)

これを，"mysql-2" に変更します．
![rancher-features230.png](https://qiita-image-store.s3.amazonaws.com/0/51342/354ffb31-773e-34d4-d1aa-14ee55ad9739.png)

これで設定を保存し，再度ブラウザで WordPress のコンテナへアクセスすると，問題なく動作していることがわかります．
![rancher-features250.png](https://qiita-image-store.s3.amazonaws.com/0/51342/9994f9f2-f987-42d8-b778-0ce3a44dc2ed.png)

# コンソール
WebUI からコンテナのシェルを起動することができます．
コンテナのメニューから "Execute Shell" をクリックします．
![rancher-features290.png](https://qiita-image-store.s3.amazonaws.com/0/51342/4dcb14b7-1144-5121-cadf-f9dc90659eab.png)

すると，以下のようなコンソール画面が表示され，シェルを操作できます．
![rancher-features300.png](https://qiita-image-store.s3.amazonaws.com/0/51342/b52d309d-9b5c-9b71-bd7e-e5152cd592fa.png)

![rancher-features310.png](https://qiita-image-store.s3.amazonaws.com/0/51342/632d45d5-2db1-d14f-2d6c-13f449b160ba.png)


# リソースモニタリング
Web UI からホストやコンテナのリソース使用の状況を確認できます．
ホスト名の部分をクリックします．
![rancher-features320.png](https://qiita-image-store.s3.amazonaws.com/0/51342/583aa19c-f77d-3e8f-92c3-e099f619bdd1.png)

クリックすると，以下の画像のように，リソースの使用状況が確認できます．
"CPU Utilization", "Memory Utilization" にはそれぞれ，CPU の使用量，Memory の使用量を示す
グラフが表示されます．
また，グラフの下にある "Storage" には，ストレージデバイスの使用状況が表示されます．
![rancher-features340.png](https://qiita-image-store.s3.amazonaws.com/0/51342/11f69a7b-7d97-be3e-abaf-a03a66b969c8.png)

また，コンテナ名をクリックすると，以下の画像のようにコンテナのリソース使用状況が確認できます．
"Volume Mounts" には，コンテナが利用しているボリュームの一覧が表示されます．
"CPU Utilization", "Memory Utilization" にはそれぞれ，CPU の使用量，Memory の使用量を示すグラフが表示されます．
![rancher-features370.png](https://qiita-image-store.s3.amazonaws.com/0/51342/eecee12c-3ebf-4035-cdf7-9ef9fb2c838c.png)


## API
Rancher は，WebUI だけでなく，API も用意しています．
API のページから，API キーを発行できます．
以下はv1.1 のスクリーンショットです．
![rancher-features380.png](https://qiita-image-store.s3.amazonaws.com/0/51342/d2567a00-9fc4-bdee-a714-c63b09a42376.png)

残念ながら現在はAPI のドキュメントが公開されていません．
今後公開する予定のようです．

## WebUI のアクセス制限
ここからは，最近(v0.9以降) に追加された機能になります．

現在，WebUI へのアクセス制限はGithub アカウントによってのみ可能です．
Web UI からアクセス制限の設定をすると，Rancher の管理者が予め登録したGithub アカウントの持ち主以外はログイン出来ないようになります．
アクセス制限の設定後，Web UI をブラウザで開くと以下のようなログイン画面になります．
![rancher-features390.png](https://qiita-image-store.s3.amazonaws.com/0/51342/66e70bcb-f14d-7724-74f2-91050d730958.png)

"Authenticate with Github" をクリックすると，Github のログイン画面がでます．
アクセスが許可されている Github のアカウントでログインすると，WebUI を表示できます．
![rancher-features400.png](https://qiita-image-store.s3.amazonaws.com/0/51342/d54a6e69-a5fc-3a46-28d9-601b6a866bbd.png)

この機能は，v0.9.0 で追加された機能です．
https://github.com/rancherio/rancher/releases/tag/v0.9.0


## プロジェクト管理
Rancher では複数のプロジェクトを管理できます．
プロジェクトはホストマシンやコンテナ，後述するプライベートリポリトリをひとまとめにしたものになります．

以下では，Rancher v0.11 でプロジェクトを切り替えて表示する例を説明します．
下の画像では，"Default" プロジェクトの画面です．
"Default" プロジェクトではホストを2つ，コンテナを計6つ動作しています．
![rancher-features420.png](https://qiita-image-store.s3.amazonaws.com/0/51342/8799067d-9b1c-eb91-6203-14b83fff7916.png)

ここで，プロジェクトを "test-project" に切り替えてみます．
![rancher-features430.png](https://qiita-image-store.s3.amazonaws.com/0/51342/dc45e3a4-7666-154d-33d1-3399326f70db.png)

こちらのプロジェクトには，ホストはまだ何も登録していません(実は作ったばかりのプロジェクトです)．
![rancher-features440.png](https://qiita-image-store.s3.amazonaws.com/0/51342/bd6e9a6f-6074-c874-2d67-2efe55552d76.png)

このように，複数のプロジェクトを1つの管理サーバーで管理することができます．
この機能は，v0.9 で実装されました(https://github.com/rancherio/rancher/releases/tag/v0.9.0)．

## コンテナ作成するホストの自動振り分け
v0.10 から "Containers" という プロジェクト内のコンテナを一覧表示するページが追加されました．
このページにある "Add Container" からコンテナを作成すると，Rancher コンテナを作成するホストを自動で決定します．

ここでは，2つのホスト "yarai-rancher002" と "yarai-rancher003" があるプロジェクトで，"Containers" の"Add Container" からコンテナを5つ作る例を見てみます．

以下の画像のように，"Containers" のページの右上に "Add Container" のボタンがあります．
このボタンから ubuntu001〜ubuntu005 の5つのコンテナを作ってみます．
![rancher-features450.png](https://qiita-image-store.s3.amazonaws.com/0/51342/46576945-c5e6-f26c-f64d-ebe39f92c6d8.png)

コンテナを1つ作ったところです．
コンテナは "yarai-rancher003" に作成されました．
![rancher-features460.png](https://qiita-image-store.s3.amazonaws.com/0/51342/53a18c7f-e8ad-5be0-3106-71cd8b0db901.png)

同様に5つのコンテナを作成しました．
"yarai-rancher002" に2つのコンテナ，"yarai-rancher003" に3つのコンテナが作成されました．
![rancher-features470.png](https://qiita-image-store.s3.amazonaws.com/0/51342/ea956a50-683a-312f-d06a-14569ac2e7f0.png)

ホストの振り分け方法を設定する機能は今のところありません．
また，どのようにホストを振り分けているのかは，僕の方ではよくわかっていません．



## プライベートレジストリ
docker のイメージをアップロードできるプライベートリポジトリを作成できます．
![rancher-features410.png](https://qiita-image-store.s3.amazonaws.com/0/51342/143a72b9-59fc-6145-174e-65368feeefca.png)

この機能は，v0.11 で実装されたようです．


# 実装予定の機能
以下ではこれから実装する予定の機能について紹介します．
## ボリュームに関する機能
ボリューム関連の機能として，以下の機能を実装する予定のようです．

* ボリュームのスナップショットの取得する機能
* スナップショットをS3のようなオブジェクトストレージへバックアップする機能
* スナップショットからボリュームを作成する機能

## ネットワークに関する機能
ネットワーク関連の機能として，以下の機能を実装する予定のようです．

* セキュリティグループ
* ロード・バランシング


# おわりに
今回は，Rancher が提供する機能について，まとめてみました．
Rancher は現在絶賛開発中という状況であり，これから新しい機能がどんどん実装されるだろうと思います．
また，開発途上故に，実装している機能の中でも挙動が怪しいものも多いのが現状です．