Rancher OSとRancherでDockerクラスタを組んでみた
こんにちは!加藤です。
勢いで買ったNUC4台と、RancherOS + Rancherで、 Dockerのクラスタを組んでみます。
これです!!!

Rancher OSとRancherについて
Rancher OSとは?
RancherOSは、Docker専用のOSで、主な特徴は、
-
OSのサイズが小さい
→v0.4.5時点で32.5MB(ただしSYSTEM DOCKER部分は含まれません) -
5〜10秒程度で起動
-
オープンソース
-
ntpd, syslog, consoleなど、Linuxカーネル以外の部分は出来るだけコンテナで動かすコンセプト
となっています。

出典:Rancher Labs.
http://rancher.com/rancher-os/
Docker専用コンテナといえば「CoreOS」が有名ですが、
CoreOSは、etcdやfleet等のクラスタを組むためのプログラムが内包されている関係上、
RancherOSに比べ、
-
初期インストール時の容量大きい
-
起動時間が少し長い
-
Intel NUC Kitと相性が悪く、起動しない・・・
などあり、今回はRancher OSを選択しました。
Rancherとは?
Rancherは、Dockerのコンテナとして配布されている、コンテナやクラスタを管理するツールです。
2016年3月29日にバージョン1.0に到達し、プロダクション環境でも使えるよ!というアナウンスが有りました。
Rancher Blog - Announcing Rancher 1.0 GA
http://rancher.com/announcing-rancher-1-0-ga/
主な特徴は、
-
オープンソース
-
LDAPログインなど、エンタープライズでの利用を想定
-
わかりやすいWebUIでコンテナ管理が出来る
-
各クラウドプロバイダに対し、のWebUI上でコンテナ操作〜クラスタ作成まで可能 Amazon EC2、Azure、DigitalOcean、exoscale、packet、rackspace、ubiquity hosting、vSphereに対応
-
Cattle, Kubernetes,Swarm,Mesos(v1.1.0-dev)などのクラスタ管理環境に対応
となっています。

出典:Rancher Labs.
http://rancher.com/announcing-rancher-1-0-ga/

Amazon EC2ホストを追加する画面
特に、WebUIがとても良く出来ていて、
作成したコンテナ構成をグラフィカルに表示したり、
設定ファイルの表示ができるので、勉強に役立ちます。
例えば、4種類のコンテナで構成されている環境を作成した場合、

リンクの状態を見ることが出来たり、

docker-conpose.ymlを出力できます。
めっちゃ便利!!!

クラスタ構築
インフラの俯瞰図
Intel NUC Kit4台あり、それぞれ、
-
IPは、192.168.1.201〜192.168.1.204
→ルーターのDHCPで設定(ルーターの、MACアドレスとIPを紐付ける機能を使用) -
ホスト名は、rancher1〜rancher4
としました。
また、ストレージの容量や、メモリの容量などのlabelを設定しておき、
コンテナの特性によりどのホストで起動させるかを指定出来るようにしておきます。

Rancher OSのインストール
では、早速RancherOSをインストールします。
4台のマシン全てで行ないます。
-
ISOのダウンロード 下記からISOファイルをダウンロードし、USBやCDのブードメディアを用意しておきます。
https://github.com/rancher/os -
1で作成したメディアで起動します。
-
起動後、手元のマシンからssh経由でログインします。
ユーザー名、パスワード共に、「rancher」が設定されています。 -
設定ファイルcloud-config.ymlを作成し、ホスト名と公開鍵を指定します。
先頭行の「#cloud-confg」も必要なので、気をつけて下さい。vi cloud-config.yml [source] #cloud-config hostname: rancher3 ssh_authorized_keys: - ssh-rsa AAAAB3……..
-
rosコマンドで、OSのインストール
sudo ros install -c cloud-config.yml -d /dev/sda
-
再起動
sudo reboot
簡単!
Rancherのインストール
今回、Rancherのコンテナは、rancher1(192.168.1.201)で動かすことにします。
rancher1(192.168.1.201)にsshで接続し、rancher/serverコンテナを起動します。
コンテナ起動後しばらくすると、http://192.168.1.201:8080/ でWebUIにアクセスできます。
sudo docker run --name rancher-server -d --restart=always -p 8080:8080 rancher/server
簡単!!
Rancherエージェントを設定
各マシン上でRancherエージェントコンテナを起動することで、WebUIで管理できるようになります。
WebUIのホスト追加画面で、各種パラメータを指定して生成されたコマンドを各マシン(rancher1〜rancher4)で実行します。
(rancher/serverをインストールしたマシンでは、4. のIP指定は必須です)
なお、Default Environmentは、コンテナ管理環境がCattleになっています。
Kubernetes環境などのEnvironmentに切り替えた後にエージェント用コンテナを起動することで、他のコンテナ管理環境になります。

sudo docker run -e CATTLE_AGENT_IP="192.168.1.201" -e CATTLE_HOST_LABELS='name=rancher1&type=storage' -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.1 http://192.168.1.201:18080/v1/scripts/1F5EAD35E6A71F……
簡単!!!
もし、最初からやり直したい場合は?
下記のコマンドで、不要になったDockerコンテナやイメージを削除出来ます。
docker rm -f `docker ps -a -q`
docker rmi `docker images -q`
Wordpressの環境を作ってみる
では早速、構築した環境でWebアプリケーションを動かしてみます。 とは言え、CATALOGでWordpressを選んで「Launch」するだけで終わりです。

すべてのコンテナが、Activeになれば完了です。

Wordpressの行の右側のポート番号(80)部分のリンクをクリックすると、Wordpressが動作していることが確認できます。

動作してますね〜!

折角なので、Wordpressのコンテナを1つから4つにスケールしてみます。
Wordpressの右の( i )をクリックすると、設定が表示されますので、Scale数を4変更します。

しばらくすると、4コンテナにスケールしました。

また、展開するマシンも適切に分散している事が確認できます。

まとめ
Rancher OSやRancherを使うことで、簡単にDockerのクラスタを組むことが出来ました。 慣れれば、OSのインストールから作業を開始しても、30分程度で環境構築が出来そうなほど簡単でした。
また、KubernetesやMesos、Swarmなどの環境もWebUIから簡単に環境構築が出来ますので、 ちょっと試してみたいという人にRancherは良い選択肢ではないかと思います。
ぜひ、お試しあれ!