RancherOSをCDブートで運用

本記事はDocker Advent Calendar 2015の3日目の記事です。

# RancherOSをCDブートで運用

参考: [Rancher Documentation](http://docs.rancher.com/os/configuration/system-services/)

* [https://github.com/rancher/os/releases](https://github.com/rancher/os/releases)からrancheros.isoを使う。
* もしくは http://releases.rancher.com/os/latest/rancheros.iso
* ログインID:pass = rancher : rancher

## HDDにデータを保存

参考: [Booting from ISO](http://docs.rancher.com/os/running-rancheros/workstation/boot-from-iso/)

```bash:HDDにデータを保存
mkfs.ext4 -L RANCHER_STATE /dev/sda
reboot
```


## ネットワーク設定

* [Configuring RancherOS Networking](http://docs.rancher.com/os/configuration/networking/)

```diff:/usr/share/ros/os-config.yml
   network:
     dns:
       nameservers: [8.8.8.8, 8.8.4.4]
     interfaces:
-      eth*:
-        dhcp: true
+      eth0:
+        address: 10.10.10.2/24
+        gateway: 10.10.10.1
+        dhcp: false
```

もしくは/usr/share/ros/os-config.yml最終行に以下追記でもよい。
上の行に書いてある値を上書きしてくれる。

```bash:/usr/share/ros/os-config.yml
  #
  services_include:
    ubuntu-console: false
    debian-console: true
  network:
    interfaces:
      eth0:
        address: 10.10.10.2/24
        gateway: 10.10.10.1
        dhcp: false
```

```bash:
reboot
```

```bash:CLIからIPを指定する場合
ip addr add 10.10.10.2/24 dev eth0
ip route add default via 10.10.10.1
```

## debian-consoleに切り替える

```bash:service一覧を表示
sudo ros service list
```

https://raw.githubusercontent.com/rancher/os-services/v0.4.1/index.yml
のデータを表示する様子。

```bash:
ros service enable debian-console
reboot
```

```bash:他の端末からssh接続ができる。
ssh rancher@10.10.10.2
```

* passwordは rancher

### 注意点

```bash:
ros service disable debian-console -> 再起動
ros service enable debian-console -> 再起動
```

をするとdebian-consoleのデータが消えます。

## ubuntu-consoleに切り替える

* 一度素os-consoleに切り替えてからでないと、別のconsoleに切り替えられません。

```bash:
ros service disable debian-console
reboot
```

```bash:
ros service enable ubuntu-console
reboot
```

## sshd起動方法

* os-consoleの場合: /usr/sbin/sshd
* debian-consoleの場合
    * 自動で起動しました。

## サービス自動起動方法(debian-console)

```bash:試しにcronを入れてみる
sudo apt-get install -y cron
```

```diff:/etc/rc.local
+ /etc/init.d/cron start
  exit 0
```

## boot2dockerと各consoleのメモリ使用量比較

| console | メモリ | DISK | version |
|:--------|:-----|:-----|:-----| 
| boot2docker | 32M | - | - |
| RancherOS(os-console) | 268M | 195.8M | 0.4.1 |
| RancherOS(debian-console) | 93M |  | jessie |
| RancherOS(ubuntu-console) | 215M |  | trusty |


## マウント済みのHDD消去方法

```bash:/dev/sdaの先頭をゼロ埋めして強制再起動
dd if=/dev/zero of=/dev/sda bs=1M count=100
echo b > /proc/sysrq-trigger 
```

## rancher/server起動

* 手元の環境で実施した。

```bash:1GBの空き容量が必要
docker run -d -p 8080:8080 rancher/server
```

* 起動まで3分ほどかかる。http://10.10.10.2:8080 にアクセス
* Hostの追加。自身を登録するにはCustomをクリック。

![hostadd.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ee147fb2-5640-6ad1-7e5e-d97be030e94a.png)

### Containerの作成

![containers.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8f1899cf-7248-7610-09c4-6238a95776be.png)

![containers1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/704ff041-d5ed-56b2-9450-7269fd6e9859.png)

* この状態でDISK 2.8GB、メモリ829MBを使用した。

![services.png](https://qiita-image-store.s3.amazonaws.com/0/25728/fd4b5f76-ae2e-7f39-7567-28dfbc22e12e.png)

* Application Stackの作成も成功した。

### Load Balancer

![lbsetting.png](https://qiita-image-store.s3.amazonaws.com/0/25728/f24e63d5-e151-4034-c57d-539dbabd2464.png)

![lb.png](https://qiita-image-store.s3.amazonaws.com/0/25728/50471e47-a323-ad29-5e69-50179ed6e614.png)

![8082.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4a6dce01-83e2-96b1-ced5-084f8168c36b.png)


## dockerコマンドのシステム側とユーザ側

* システム側 : /usr/bin/system-docker
    * ユーザ側 : /usr/bin/docker

## コンテナを自動起動させるには(これは成功しなかった)

* [Quick Start Guide](http://docs.rancher.com/os/quick-start-guide/)
* [os-images/console.sh at master · rancher/os-images · GitHub](https://github.com/rancher/os-images/blob/master/src/docker/02-console/console.sh)

```bash:/opt/rancher/bin/start.shを作成
sudo mkdir -p /opt/rancher/bin/
sudo touch /opt/rancher/bin/start.sh
sudo chmod +x /opt/rancher/bin/start.sh
```

```bash:/opt/rancher/bin/start.sh
docker start afe249cf26d4
```

## まとめ

* RancherOS 上で rancher/server を使うと問題なく動いて良い。
* ホストOSをインストールしなくて良いので楽。
* debian, ubuntuコンソールが便利。これにAnsible使ってサービス投入もありかも。