Update 2014-06-28
: IDCFクラウドにCoreOSクラスタを構築する - Part1: CoreOSの準備Update 2014-07-10
: IDCFクラウドにCoreOSクラスタを構築する - Part2: CoreOSのディスカバリUpdate 2014-07-15
: IDCFクラウドにCoreOSクラスタを構築する - Part3: クラスタをセットアップUpdate 2014-07-17
: IDCFクラウドにCoreOSクラスタを構築する - Part4: 367.1.0のissueUpdate 2014-07-19
: IDCFクラウドにCoreOSクラスタを構築する - Part5: 再セットアップUpdate 2014-08-18
: IDCFクラウドでCoreOSをISOからインストールする
Dockerコンテナのプロダクション運用を考えると、2014-05-23にCoreOSの正式サポートを発表したGCE、
OrchardやStackdockのDocker-as-a-Service
、DigitalOceanやVultrなどのVPSが候補になります。
特にGCEはインスタンス起動がとても速く、gcutilでuser-dataにcloud-configを渡せるのでCoreOSの作成がとても簡単です。
何回かIDCFクラウドでもCoreOSを使いたくて、ディスクやISOへのインストールを試しましたが、失敗してしまいました。BeagleBoneBlack
へUbuntuをインストールしている間に、ディスクにインストールする方法がわかってきたので、また試してみます。
TL;DR
IDCFクラウド上でもCoreOSが動きました!VagrantやGCEで試していたクラスタ構築も次回試します。
はじめに
ディスクへのインストール手順はいつのまにか更新されていました。
ただ、CoreOSのドキュメントは全体的にちょっとインデックスがわかりづらいです。
idcf-compute-apiを便利に使うために、非同期ジョブの終了をポーリングして待機するスクリプトを用意しました。
|
実行権限をつけておきます。
$ chmod u+x ~/bin/waitjob |
ディスクの準備
作成するディスクのタイプを確認します。
$ idcf-compute-api listDiskOfferings -t=id,name |
80GBのディスクを作成します。
$ waitjob $(idcf-compute-api createVolume \ |
作成したディスクを作業マシンにアタッチします。
$ waitjob $(idcf-compute-api attachVolume \ |
一度作業マシンをrebootします。
$ sodo reboot |
reboot後に、fdiskでアタッチしたディスクを確認します。80GBが2つありますが、/dev/sdaはブートディスクなので
今回追加したディスクは、/dev/sddになります。
$ sudo fdisk -l | grep Disk |
インストールスクリプトの実行
CoreOSのインストールスクリプトをダウンロードします。
$ cd ~/coreos_apps/ |
cloud-configを用意します。
CoreOSはパスワード認証でSSH接続ができないため、ssh_authorized_keysに接続用の公開鍵を記述します。
#cloud-config |
coreos-installを実行します。-cオプションで先ほど作成したcloud-configを指定します。
$ sudo ./coreos-install -d /dev/sdd -C beta -c ./config |
CoreOSをインストールしたディスクを作業マシンにmountして中身を確認します。
$ sudo mkdir /coremnt |
cloud-configは、/var/lib/coreos-install/user_data
にインストールされています。
$ sudo cat /coremnt/var/lib/coreos-install/user_data |
テンプレートの作成
ディスクを作業マシンからデタッチして、一度スナップショットを作成してからテンプレートを作成します。
確認のためmountしたCoreOSのディスクをumountします。
$ sudo umount /coremnt |
ディスクを作業マシンからデタッチします。
$ waitjob $(idcf-compute-api detachVolume \ |
スナップショットの取得をします。
$ waitjob $(idcf-compute-api createSnapshot \ |
事前にテンプレートを作成するときのOSタイプを確認します。
何でもよいですが、Other (64-bit)
を使うことにします。
$ idcf-compute-api listOsTypes -c | grep 'Other Linux (64-bit)' |
最後に、テンプレートの作成をします。
$ waitjob $(idcf-compute-api createTemplate \ |
インスタンスの作成
予め作成するインスタンスのタイプを確認します。
今回はM4 ( 2CPU / 4GB )で作成します。
$ idcf-compute-api listServiceOfferings | jq '.listserviceofferingsresponse | .serviceoffering[] | select(.name == "M4") | {id,displaytext}' |
インスタンスの作成をします。
$ waitjob $(idcf-compute-api deployVirtualMachine \ |
SSHでログインして確認
作業マシンからSSHで接続します。CoreOSのユーザー名はcore
です。
$ eval `ssh-agent` |
dockerとfleetのバージョンを確認します。
$ docker -v |
まとめ
RedHatがProject Atomicを発表して、軽量OSとコンテナクラスタの分散管理は非常におもしろくなっています。Datacenter-as-a-Computer
を目指そうとすると、ChromeOSを参考にしているCoreOSの方が楽しそうです。
DartやGoも勉強中なので。