2014-04-13追記 お手軽に試したい方は @yungsang さんのVagrantfileをお勧めします
コメントにも書きましたが、現時点でCoreOSをvagrantで試すには、公式のVagrantfileを使うよりYungSang/coreos-clusterを使うのがお勧めです!
今度は動くところまでこぎつけました
「CoreOS + Vagrant に etcd を使ってクラスタを構築する」を試してみた - Qiitaの記事の後、CoreOS 入門 - Qiitaという素晴らしい記事が書かれました。よくわかってないまま試したら出来ませんでしたーという記事に対して、見るに見かねて書いて下さりありがとうございます。識者の知識を共有してもらえたという意味では、結果的には良かったです。
で、もうそのままでいいかなーとも思ったのですが、やっぱりVagrantで試してみたいと思って再挑戦してみました。元記事ではetcdはホストマシン(OSX)で動かしてCoreOS 3台をVagrantで動かすという構成だったのですが、etcdもVagrant上のCoreOSで動かせば簡単なのでは、と思いついたのでそれで試しました。
core-00というホスト名のVMで172.17.8.100:4001でetcdを動かして、core-01〜core-03の3台はcore-00のetcdに繋ぎに行きます。
IPアドレスは以下のように設定しています。
- core-00: 172.17.8.100
- core-01: 172.17.8.101
- core-02: 172.17.8.102
- core-03: 172.17.8.103
Vagrant上のCoreOSでetcdを動かす
簡単に試せるようにGitHubにプロジェクトhnakamur/coreos-etcd-vagrantを作りました。作ったと言ってもcoreos/coreos-vagrantをフォークしてちょっと変更しただけです。Cloud-Configの設定方法はCustomize with Cloud-Configを参照しました。
起動手順は以下の通りです。
git clone https://github.com/hnakamur/coreos-etcd-vagrant/
cd coreos-etcd-vagrant
vagrant up
Vagrantでさらに3台のVMを立ち上げてクラスタリングする
user-dataではcoreos.etcd.discoveryにcore-00のetcdのURLを指定しています。それ以外はuser-data.sampleから変更なしです。
git clone https://github.com/coreos/coreos-vagrant
cd coreos-vagrant
cat <<'EOF' > user-data
#cloud-config
coreos:
etcd:
discovery: http://172.17.8.100:4001/v2/keys/machines
addr: $public_ipv4:4001
peer-addr: $public_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
runtime: no
content: |
[Unit]
Description=fleet
[Service]
Environment=FLEET_PUBLIC_IP=$public_ipv4
ExecStart=/usr/bin/fleet
EOF
NUM_INSTANCES=3 vagrant up
3台起動したら以下のようにfleetctlを実行してクラスタリングされていることを確認します。
$ vagrant ssh core-01
______ ____ _____
/ ____/___ ________ / __ \/ ___/
/ / / __ \/ ___/ _ \/ / / /\__ \
/ /___/ /_/ / / / __/ /_/ /___/ /
\____/\____/_/ \___/\____//____/
core@core-01 ~ $ fleetctl list-machines -l
MACHINE IP METADATA
b4e79fb3-a093-421e-a06d-7ae2f63cf7a8 172.17.8.103 -
681af189-b016-4d25-bd1b-fba970db540a 172.17.8.102 -
e436a060-0859-46c6-8ade-a5fc2ac508e5 172.17.8.101 -
うまく行きました!
試行錯誤したメモ
etcdを起動するVagrantfileではoverride-plugin.rbを古いバージョンに戻す必要があった
今回の再挑戦は、前回の記事「CoreOS + Vagrant に etcd を使ってクラスタを構築する」を試してみた - Qiitaのときにgit cloneしたcoreos/coreos-vagrantを使って作業していました。その後vagrant destroy -fでVMを削除して、フレッシュな環境でgit cloneもやり直してcoreos/coreos-vagrantの最新版にしたらCoreOSを起動してもetcdが起動されなくなってしまいました。
コミットaf12c67c7169ff303aa143346833fe1259a83013のoverride-plugin.rbではだめで、コミットadbbcef1af235336b9df7faf944764100e4cae2fのoverride-plugin.rbに戻せば動きました。ということで、https://github.com/hnakamur/coreos-etcd-vagrant/commit/65d3c79c8f5a123f793d9a7cbe9579ce68c94138 で古いバージョンに戻しています。
差分をきちんと理解したほうがいいのでしょうが、私の動機はCoreOSをちょっと触ってみたかっただけなので、そこまでは踏み込まないことにします。
vagrant upで起動しない時があった
vagrant upしたときにcore-01, core-02はすんなり起動したのにcore-03で接続タイムアウトになるという謎な現象も一度発生しました。
==> core-03: Waiting for machine to boot. This may take a few minutes...
core-03: SSH address: 127.0.0.1:2204
core-03: SSH username: core
core-03: SSH auth method: private key
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
core-03: Error: Connection timeout. Retrying...
あとしばらく放置していると勝手に?シャットダウンすることもありました。まあCoreOSはアルファ版ということで、私個人はすぐに使う予定もないので深追いしないことにします。
とりあえず変になった時はcore-00とcore01〜03の両方でvagrant destroy -fでVMを破棄して、core-00でvagrant up、core-01〜03でvagrant upで作りなおせばうまく行きました。