Friday, September 5, 2014

coreos x fleet x etcd (艦隊を組むぞ!)

みんな、丸太は持ったか!?
あのホラー系コメディ漫画、おわっちゃった件。

3〜4番煎じネタだけど、くだらないところで大いにはまったので書き残しておくよ。激しく時間を浪費した(;_;

coreos-vagrant

google、pivotal、vmware、dockerと蒼々たる巨人達がコンテナ技術で提携を発表したここ最近、相変わらずdockerが盛り上がってるので、てくてく後ろを着いていこうと思った。

googleはkubernetesとかいうコンテナ用クラスタ管理システムを公開していて、こちらも興味があるんだけど、自分がこの分野に疎すぎるので、今回はもう少し基本を学べるように見えるcoreosに付属するfleetというクラスタ管理プログラムを試してみる。

fleet

公式サイトを見て、更に自分でもちょっと触ってみた感じ、etcdというKey, Valueストアを介して複数の(仮想)マシンを連結、1のマシンとして扱うことができる。

外部からデプロイコマンドを打ったらクラスタを構成するマシンのどれか一つでdockerコンテナが立ち上がるって理解でいいんだろうか。死活管理も入っているように見えるが、この辺はまだ不勉強。

ともかくクラスタを構成できないと話にならない。手元のへぼいiMacでも大丈夫そうなcoreos-vagrantで試してみる。

yukaarybox:project yukaary$ git clone https://github.com/coreos/coreos-vagrant.git
yukaarybox:project yukaary$ cd coreos-vagrant

ここでconfig.rb.sampleuser-data.sampleからコピーして、config.rbuser-dataを作る。続いて編集。

変更箇所:config.rb

$num_instances=2
$update_channel='stable'
$expose_docker_tcp=2375
$vb_gui = false
$vb_memory = 512 
$vb_cpus = 1

仮想マシンを2つ立ち上げる、coreosはstableを使用、ホストマシンからdockerコマンドを打てるようにする、仮想マシンのスペックを調整、以上。

変更箇所:user-data

discovery: http://172.17.8.1:4001/v2/keys/machines

クラスタを構成する時に照会するetcdのキー名。デフォルトでは、coreos側がご親切に照会用のetcdサーバー(https://discovery.etcd.i
o/)を立ち上げてくれており、キーを発行してそちらを見ればOK!となっているが、封権的なこの日本社会では、なかなかこれが利用できる環境にない…。

仕方がないのでvirtualboxで立ち上げるcoreosより絶対先に存在しており、かつ、ゲストマシンから間違いなくアクセス可能なホストマシン(yukaarybox/iMAC)にdiscoverly役を担ってもらうことにする。上の172.17.8.1はゲストマシンから見たホストのIPアドレス。

このetcd、coreosの構成するsystemdなどと並ぶ一大要素らしい。

公式サイト(英語)を読むと、プロセスの起動順序を制御するためにunittargetという2つの概念を利用する、この発想は既存のcloudなんとかから得ていて、coreosにとって必要な要素だけを取り出してきたとか色々書いてある。

goで実装されているのでOSXにgoをまずはインストール。インストール先。etcdをインストールするときに環境変数GOPATHがないと怒られるので、適当なディレクトリに設定しておく。

~/.bash_profile

export GOPATH=/Users/yukaary/go

etcdをインストール。

$ go get github.com/coreos/etcd

コマンドが終了するとGOPATH/bin/etcdが出来ている。そのまま./etcdとすると起動しちゃうから騙されたんだけど、まともに動いてなかったorz。これでゲストマシンx2が連結してくれず数時間はまった黒歴史。

(これだからgithubのmasterは嫌なんじゃ〜〜〜〜。)

go getしたソースコードはGOPATH/srcの中にあるので、そこでまともに動いてくれそうなブランチかタグを調べてみる。

yukaarybox:etcd yukaary$ git tag
0
v0.1.0
v0.1.1
v0.1.2
v0.2.0
v0.2.0-rc0
v0.2.0-rc1
v0.2.0-rc2
v0.2.0-rc3
v0.2.0-rc4
v0.3.0
v0.4.0
v0.4.1
v0.4.2
v0.4.3
v0.4.4
v0.4.5
v0.4.6

v0.4.6。多分これだな…。

yukaarybox:etcd yukaary$ git checkout v0.4.6
yukaarybox:etcd yukaary$ go install $ go buildもいるのかな?ちょと分からない。

これでまともに動きそうなetcdが出来た。IPアドレス:ポートを指定して起動する。

./etcd -addr 172.17.8.1:4001

別ターミナルでVagrantを起動。

yukaarybox:coreos-vagrant yukaary$ vagrant up
...

ゲストマシン起動完了後、core-01, core-02でそれぞれ。

core@core-01 ~ $ fleetctl list-machines -l
MACHINE                 IP      METADATA
b29eb20a7acb4b6fac7dd7839d15ee08    172.17.8.101    -
b2aff8b7ea5d4663a70900f560376c23    172.17.8.102    -
core@core-02 ~ $ fleetctl list-machines -l
MACHINE                 IP      METADATA
b29eb20a7acb4b6fac7dd7839d15ee08    172.17.8.101    -
b2aff8b7ea5d4663a70900f560376c23    172.17.8.102    -

やったぜ。

Written with StackEdit.

No comments:

Post a Comment