RancherOS on IDCFクラウド(CloudStack)で格安Dockerクラスタを組みたい

- PackerでIDCFクラウド(CloudStack + VMware)向けのRancherOS OVAテンプレートを作りました。
- 格安Dockerクラスタが組めそうな気がしています。

## 動機

- 日本国内に設置できるクラウドでコスパ暫定一位のIDCFクラウドLight.S1インスタンス[^1]を使ってRancherクラスタを組みたかった
    - 実現すればおそらくAWSのSpot InstanceやGCPのPreemptible VMと同等以上に安上がりに[^2]
- 次点でVultr[^3]があったが、RancherOSのインストールには最低1.5GBのRAMが必要[^4]で最小構成ではインストールできなかった
    - Rancher Serverダッシュボード経由のエージェント追加でもこのボトルネックがある模様
    - VultrではISO/iPXE以外の方法でアップロード/インストールできなかった
        - ISOブートと`RANCHER-STATE`をうまく使えばワンチャンあったかも知れないが、手元ではうまくいかず...
- IDCFクラウドの内部はCloudStack + VMwareとのこと
- 手元でVMwareイメージを作りきってテンプレート登録すればいけるのではないか→できました

## 成果物

- OVA: http://s.k2i.ooo/rancheros-0.7.1-idcfcloud.ova
    - ディスク5GB(Light.S1で300円/月)
- src: [2k0ri/rancheros\-packer\-vmware\-cloudstack](https://github.com/2k0ri/rancheros-packer-vmware-cloudstack)
    - macOS上にVMware Fusion、vmx→ova変換のために `ovftool` + [drscream/packer-post-processor-ovftool](https://github.com/drscream/packer-post-processor-ovftool)が必要です。
    - VMware以外のハイパーバイザー用に作りたい、という場合は[`files/cloud-config.yml`](https://github.com/2k0ri/rancheros-packer-vmware-cloudstack/blob/master/files/cloud-config.yml)を参考にしていただければ。
        - CloudStackのDHCPサーバの特定→user-dataとSSH Keyの取得・反映を行うスクリプトを配備しています。

## テンプレート登録

- [`cs`](https://github.com/exoscale/cs) コマンド経由でIDCFクラウド(東日本、東日本２リージョン)に登録する場合は下記のコマンドで。
    - 事前に`~/.cloudstack.ini`にAPIキー・シークレットの登録を行ってください。
    - 下記以外のネットワークの場合は`zoneid`を変更してください。

### 東日本(`newton` ネットワーク)

```sh
CLOUDSTACK_ENDPOINT="https://compute.jp-east.idcfcloud.com/client/api" \
cs registerTemplate \
name="RancherOS 0.7.1" displaytext="RancherOS 0.7.1" \
format=OVA hypervisor=VMWare passwordenabled=false \
ostypeid="c20faebd-4ada-11e4-bd06-005056812ba5" \
zoneid="01738d49-2722-4788-891e-848536663c6e" \
url="http://s.k2i.ooo/rancheros-0.7.1-idcfcloud.ova"
```

### 東日本2(`lux` ネットワーク)

```sh
CLOUDSTACK_ENDPOINT="https://compute.jp-east-2.idcfcloud.com/client/api" \
cs registerTemplate \
name="RancherOS 0.7.1" displaytext="RancherOS 0.7.1" \
format=OVA hypervisor=VMWare passwordenabled=false \
ostypeid="a9707ed7-9a71-11e6-83f7-1e00d4000471" \
zoneid="95c8746d-57b3-421f-9375-34bea93e2a3d" \
url="http://s.k2i.ooo/rancheros-0.7.1-idcfcloud.ova"
```

## TODO

- user-dataに`rancher.services`を書き足せば自動でマスター/エージェントの起動までいけるハズ[^5][^6]
- RancherサーバにまだCloudStackドライバーが無いので、コントリビュートのチャンス？
    - Rancher Labs CEOのChanさんはCloudStackの元中の人とのことだったので少し意外
- VMware周辺の環境はVagrantに閉じ込められたかも[^7]
- IDCFクラウドでの公開テンプレート登録が手続きが必要そうで敬遠しちゃってる

## 参考

- [VPS料金比較表 \(ssh可のみ\) \- Qiita](http://qiita.com/tukiyo3/items/a9c0827d0c9cf60587b2)
- [CoreOS のVMware\+CloudStack対応イメージ作成手順の紹介 \- IDCF Tech\-Blog](http://blog.idcf.jp/entry/cloud/coreos_2/)
- [coreos\-overlay/coreos\-base/oem\-cloudstack/files at master · coreos/coreos\-overlay](https://github.com/coreos/coreos-overlay/tree/master/coreos-base/oem-cloudstack/files)
- [How can I retrieve user\-data on CloudStack \- RancherOS \- Rancher Forums](https://forums.rancher.com/t/how-can-i-retrieve-user-data-on-cloudstack/2644)
- [CloudStack datasource support · Issue \#1255 · rancher/os](https://github.com/rancher/os/issues/1255)

[^1]: 1コア/1GB RAMで220円 + 20円*GB SSD、ただしPIP2本目以降は+500円/IP
[^2]: IPの少なさとオーバーヘッドをなんとかできればPreemptible VMなGKEといい勝負?
[^3]: 1コア/768MB RAM/15GB SSDで5.0USD/月
[^4]: [Booting from ISO](http://docs.rancher.com/os/running-rancheros/workstation/boot-from-iso/)
[^5]: [Adding System Services in RancherOS](https://docs.rancher.com/os/system-services/adding-system-services/)
[^6]: [Launch a RancherOS instance with cloud\-init \- RancherOS \- Rancher Forums](https://forums.rancher.com/t/launch-a-rancheros-instance-with-cloud-init/390)
[^7]: [PackerとESXiでPhotonのOVFを作る \- higeblog](https://www.higebu.com/blog/2015/12/09/make-photon-ovf-by-packer-with-esxi/#.WG5sQWSLRTY)