RancherOS の ISO をさくらのクラウドでセットアップする手順

[さくらインターネットのアドベントカレンダー その２](http://qiita.com/advent-calendar/2016/sakura2) の枠が空いていたのと、昨日参加した Rancher Meetup Tokyo #2 で「日本語の Rancher 情報を増やしましょう！」という呼びかけがあり、急遽投稿することにしました。


## 概要

RancherOS の ISO の紹介と、さくらのクラウド上で RancherOS を使えるようにするまでをまとめました。

## RancherOS とは？

Docker を使うことに特化した軽量 OS の１つです。Rancher と連携することもできますが、純粋に Docker 事項環境としても利用可能な特長があります。

* Docker がすぐに利用可能
* ISO イメージのサイズが軽量な Linux ディストリビューション
* 複数の Docker バージョンの切り替えに対応
* 複数の Linux ディストリビューションのコンソールを切り替え可能

この中でも注目すべきは後者の２つです。RancherOS では、全てのデーモン（サービス）がコンテナ化されており、System Docker というシステム管理用 Docker 上で動作します。そして、その上に私たち一般ユーザが使うための Docker が提供されており、この環境をコンソールと呼びます。

コンソールもコンテナとして提供されています。そのため、Linux ディストリビューションはデフォルトはbusyboxですが、CentOS、Debian、Fedora、Ubuntuに切り替えられます。また複数の Docker 実行環境の切り替えも同様に可能となっています。これらの操作は、全てコマンドライン上で行います。

## さくらのクラウドで使うには？

RancheOS は ISO イメージが配布されています。ダウンロードした後、さくらのクラウドに ISO イメージをアップロードし、仮想サーバの起動時に ISO イメージを読み込み起動します。その後、サーバ上のディスクに RancherOS をセットアップする流れです。

基本的にどのような仮想化システムないしクラウド基盤上でも動作します。さくらのクラウドの場合は、次の利点があります。

* コンソールがあるため、ブート時に様々なオプションが選べます。
* DHCP 起動に対応しているため、ISO イメージで起動直後からネット経由でセットアップできます。

### ISO イメージのアップロード

アップロードする前に、RancherOS の ISO イメージを GitHub からダウンロードします。

* https://github.com/rancher/os/releases

今日現在は `Release v0.7.1` が安定版のため、 [v0.7.1 の ISO イメージ　rancheros.iso](https://github.com/rancher/os/releases/download/v0.7.1/rancheros.iso) をダウンロードします。

次に、さくらのクラウドのコントロールパネルにログインして「IaaS」から「ISOイメージ」を選びます。画面右上の「追加」をクリックし、名前を「RancherOS v0.7.1」など任意の名称を入れ、「作成」を押します。

作成が完了すると、画面に

* ホスト名
* ユーザ名
* パスワード

が表示されますので、エディタに控えておきます。

それから、WinSCP など FTP クライアントを起動して、表示されたサーバにログインします。クライアントが WinSCP であれば、接続時の設定を次のようにします。

* 転送プロトコル：FTP
* 暗号化：明示的な TLS/SSL 暗号化
* ポート番号：21

クライアントで接続したら、接続したディレクトリ（ルート）に `rancheros.io` をアップロードします。アップロードが完了したら、再びクラウドのコントロールパネルに戻ります。先ほどの「ISOイメージ」の詳細画面で、画面右上に「FTPを完了」とありますので、こちらをクリックします。

以上の動作で、RancherOS の ISO イメージが登録できます。正常に登録されていれば、次の画像のように表示されます。

![os1.png](https://qiita-image-store.s3.amazonaws.com/0/13002/f490e01c-0b47-aade-67c3-699a185d370f.png)


## RancherOS の ISO で仮想サーバの起動

次に「サーバ」に移動します。画面右上の「追加」ボタンをクリックします。もし「シンプルモード」であればチェックを外して詳細モードに切り替えます。それから、必要項目を入力していきます。

「1. サーバプラン」は、 RancherOS の初期セットアップ時には 1GB のメモリが必要です。とりあえず試すのであれば仮想コア「1コア」メモリ「1GB」で十分でしょう。
 
「2. ディスク」は「新規ディスクを作成」が選ばれたまま、必要に応じて「SSDプラン」か「標準プラン」を選びます。次に「ディスクソース」を「ブランク（空のディスク）」にします。そして、「ISOイメージを使う」から先ほど登録した RancherOS 用の ISO イメージをセットアップします。

![os2.png](https://qiita-image-store.s3.amazonaws.com/0/13002/9ffe3d31-d085-2202-3b6e-6a14d5ba4fb6.png)


あとは画面をスクロールし、「6.サーバの情報」で「名前」に文字を入れます。これはコントロールパネル上に表示するための名前であり、任意の文字を入力します。

そして「7.その他のオプション」で、キーボードが US 配置の場合はキーボードのオプションにチェックを入れておきます。

最後に「作成」ボタンを押すと、作成が始まります。起動が終わるまで待ちます。

![os3.png](https://qiita-image-store.s3.amazonaws.com/0/13002/e4c27018-72be-ac8a-edc4-8e5a0e0e59ad.png)


## RanchreOS をディスクにインストール

起動したら、次はセットアップです。一覧画面でホスト名の部分をダブルクリックすると詳細画面が表示されます。「コンソール」のメニューを押すと出てくるがめんが、ISO イメージを使って仮想サーバを起動した画面です。画面をクリックすると、すぐ OS が操作できます。

このままコンソール上で作業しても構いませんが、使い慣れたターミナルがあれば、リモートから SSH でログインする事もできます。その場合 `sudo passwd rancher` コマンドを実行し、セットアップ時用の一時的なパスワードを設定します。パスワード設定後は `ssh -l rancher <IPアドレス>` で、リモートからログイン可能です。IP アドレスを確認するには、サーバ一覧画面、もしくは「NIC」のメニューからも確認できます。

ログイン後（あるいはコンソール上から）、`cloud-config.yml` ファイルを開きます。

```
$ vi cloud-config.yml
```

このファイルの中に、ホスト名（OS上で認識する自身のホスト名）と、SSH 公開鍵（~/.ssh/id_rsa.pub など）を入力します。以下はホスト名を `sakurancher` としていますが、任意の名称に設定できます。

```cloud-config.yml
hostname: sakurancher
ssh_authorized_keys:
  - ssh-rsa AAAA（省略）
```

作成が終わったら、インストールコマンドを実行します。

```
sudo ros install -c cloud-config.yml -d /dev/vda
```

途中の確認項目は `y` を都度入力します（-f オプションを付けると -y の入力を省略できますが、自動的に再起動がかかります）。

最後に再起動（reboot）を訊ねてきますので、`y` を入力します。

```
Continue with reboot [y/N]: y
```

それから再度 SSH で接続を試みますが、`.ssh/known_hosts` から最後の行を消しておきます（SSHサーバの鍵情報が変わるため、接続時に警告が出るためです）。

あとは、`rancher` ユーザで再び接続を試みます。

```
$ ssh -l rancher 59.106.216.199
The authenticity of host '59.106.216.199 (59.106.216.199)' can't be established.
ECDSA key fingerprint is SHA256:ZWd/NCWacovbf5lP4WzEQedRxhZoSrjW8PnUQNmxCiU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '59.106.216.199' (ECDSA) to the list of known hosts.
[rancher@sakurancher ~]$
```

これで RancherOS が使えるようになりました。あとは `rancher` ユーザのままコンテナの起動が可能です。 nginx サーバを起動し、ブラウザから Nginx コンテナの画面が表示されるかどうかを確認しましょう。

```
$ docker run -itd -p 80:80 nginx
```

なお、ISO イメージはまだサーバに取り付けれたままの状態です。取り外す場合はサーバを停止する必要がありますので、ご注意ください。

## 補足

今回は「やってみた系」記事のため、手順だけをつらつら書きました。RancherOS は他にも細かなセットアップや調整どころがありそうです。調べたらまたどこかで皆さんと共有したいと思っています。

## リファレンス

* Custom Console on RancherOS
 * https://docs.rancher.com/os/
* GitHub
 * https://github.com/rancher/os

## さいごに

アドベントカレンダーはまだまだ続きます。明日は @s-miyaza@github さんの KUSANAGI についてです。楽しみですね！
また、これまでの投稿もありますので、ご興味がありましたらご覧ください。そして、「その２」は枠がまだありますので、我ぞと思われる方は、是非ご登録を！

* さくらインターネット Advent Calendar 2016 - Qiita
 * http://qiita.com/advent-calendar/2016/sakura
* さくらインターネット（その２） Advent Calendar 2016 - Qiita
 * http://qiita.com/advent-calendar/2016/sakura2