Rancher最速セットアップ理論 プロジェクトR

この記事は「[Rancher Advent Calendar 2017](https://adventar.org/calendars/2436)」の 11日目の記事です。

# ACT.1 プロジェクトR
そもそも何で最速へのこだわりが生まれたのかから話した方がいいのかもしれない。私が Rancherを使う理由はそもそもが一時的な開発環境や検証環境、情報系のサービス運用で、本番環境での利用は想定していない（[そっちは工夫してネイティブクラウドインフラで簡単に構築する方法を模索中](https://github.com/nmrmsys/amibake)）であるなら Rancherサーバの構築はいつでもどこでもランチャリング、最小の手間で最速に展開出来るべきであろうと、こうして Rancher最速セットアップ理論を探求する日々、プロジェクトRは始まったのである。

# ACT.2 全開! セットアップバトル
きっかけは [CloudFormationのテンプレートで YAMLが使える](https://qiita.com/CkReal/items/1c6f02ce55167a511231)ようになったのを知った時だった。AWS使いの私は Terraformや Ansibleでのインフラ構築も何度か試してみたが、どこかまどろっこしく、どうやらそれは構成情報をクラウドプラットフォーム組み込みでは無く、別建てで管理しないといけない部分にあるのだと理解はしたが、やはり JSONは見るのは苦痛、記述するのはもっと苦痛で、他のツールで採用している YAMLを見ては、あーこれが CloudFormation使えればコメントが書けるのに思い悩む日々だったのだ。さっそく、[最小構成の Rancherサーバ、Dockerホストを構築する CloudFormationテンプレート RancherMini](https://github.com/nmrmsys/cloudformation/tree/master/RancherMini)を作ってみて、さらにそれを AWS CLIからコマンド一発でスタック作成・削除する便利スクリプトまで仕上げた所で、[これはイケる、勝ちにいける](https://nmrmsys.github.io/slides/I-Want-to-Rancher-More-Easily-with-AWS.html)ぞと（実際には AWS Marketplaceの Rancher on RancherOSのAMIを使うには事前サブスクリプション登録が必要など問題はあったのですが）

# ACT.3 Rancher塾最強の2.0
そーこうしているうちに、[Rancherの新バージョン2.0](https://techlog.supersoftware.co.jp/2017/12/06/rancher-2-0-preview-2dehe-gaqi-dai-dekisouka/)が発表され、メインオーケストレーション環境が Kubernetesになるなど、イチからか、またイチからか。。。と思いつつ、今の私の利用方法からして、でもまあ騒ぐほどでもないかと、ある程度落ち着くまで一旦様子見をキメ込む事にした。

# ACT.4 二つのテクニック
最初のテンプレートを作ってから、また幾日かが過ぎ、その間 [Rancherでサービスをテスト運用しつつ、カスタムカタログを作ってみたり](https://nmrmsys.github.io/slides/TICK-Stack-Loooooosely-ServerMonitoring-by-TimeSeriesDB.html)していたのだが、どうやら [RancherOSには cloud-initでの初期セットアップの仕掛け](https://qiita.com/FoxBoxsnet/items/cf02c62e5f402fc4a835)があるらしい、cloud-initの設定なら確か CloudFormationのテンプレートに書けたはず、と調べ始めると。。。[RancherOSのシステムサービスは全て Dockerコンテナで出来ている](http://rancher.com/docs/os/v1.1/en/boot-process/built-in-system-services/)、カスタムサービスも作成可能で既に Rancherサーバのサービスも有る、という驚愕の新事実が判明！

それらの知見を元に、AWS Marketplaceのサブスクリプション登録が不要な素の RancherOSコミュニティAMIから cloud-initの設定 #cloud-config で Rancherサーバのサービスを起動し、[起動スクリプトで自分をホスト登録](http://rancher.com/docs/os/v1.1/en/configuration/running-commands/)する（試験環境なら大丈夫、Rancherなら出来るよ！）というプランが発足した。

# ACT.5 最速へのスタートライン
そうして、生み出されたのがこの[新生 RancherGT-Rテンプレート](https://github.com/nmrmsys/cloudformation/tree/master/RancherGT-R)、今回はただ最速のみに特化したタイムアタック仕様、継続利用など一切考えないデフォルトのインスタンスタイプが c4.8xlargeのモンスターテンプレートだぁ！（※だいたい1時間200円ちょい掛かる廃課金レートなのでご利用は計画的に）、このテンプレートで Rancherサーバを起動すると、おおよそ 2分くらいで使える様になります。ただ現状、まだ一つ課題が残っていて、最初のホスト追加でサーバURLを設定する手順があって、その WebAPIまでは突き止めたのですが、CSRFチェックが入ってて、それの突破までやろうとは思ってたのですが、時間が足りなくて間に合わず、今は手動で登録が終わって registrationUrlが取れるのを検知してから、エージェントをインストールしてホスト追加するようにしてます。

# 編集後記
ところで、何でこんな話になってたんだっけ？、ああそうか[これ](https://www.slideshare.net/cloretsblack/rancher20/13)にサブリミナルされてたのか　－終わりー

# 参考文献
- [CloudFormationとTerraformの使用感〜2017年7月版〜](https://qiita.com/CkReal/items/1c6f02ce55167a511231)
- [Rancher 2.0 Preview 2で何が期待できそうか](https://techlog.supersoftware.co.jp/2017/12/06/rancher-2-0-preview-2dehe-gaqi-dai-dekisouka/)
- [RancherOS cloud-config.yml メモ](https://qiita.com/FoxBoxsnet/items/cf02c62e5f402fc4a835)
- [Configuring RancherOS](http://rancher.com/docs/os/v1.1/en/configuration/)
- [System Services](http://rancher.com/docs/os/v1.1/en/system-services/adding-system-services/)
- [Built-in System Services](http://rancher.com/docs/os/v1.1/en/boot-process/built-in-system-services/)
- [Running Commands](http://rancher.com/docs/os/v1.1/en/configuration/running-commands/)
- [Rancher2.0のコンテナ間通信を可視化してみた](https://www.slideshare.net/cloretsblack/rancher20)