Windowsでcoreos-vagrant,etcd,fleetを使う(3)

April 9, 2015

前回(http://ktrysmt.github.io/blog/setup-to-use-coreos-vagrant-in-windows-2/)の続き。

fleet

Windowsではfleetctlが使えないらしい。IssueはOpenなようだが。

しかたがないのでVagrantで別にLinuxを立ち上げ、そっちにfleetctlを入れてみる。

use vagrant

普段CentOSをよく使うのでなんとなくそれで。

$ mkdir -p /path/to/centos6
$ cd /path/to/centos6
$ vagrant init chef/centos-6.5
$ vagrant up
$ vagraht ssh

install golang

https://golang.org/dl/から目的のソースをダウンロード。 なるべく新しいもののほうがいいと思われる。 今回はhttps://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gzを選択。

install fleetctl

無事にCentOSにログインできたら以下を実行。バージョン番号が確認できればOK。

$ sudo -s
# cd ~/
# wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz --no-check-certificate
# tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
# touch ~/.bashrc
# echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
# source ~/.bashrc
# yum -y install git
# git clone https://github.com/coreos/fleet
# cd fleet
# ./build
# cp bin/fleetctl /usr/local/bin/
# fleetctl --version
fleetctl version 0.9.2+git

ひとまずCentOSからCoreOSにpingを打って疎通を確認する。 ゲートウェイIPと照らし合わせIPがBかCブロックまで同じならどのCoreOSマシンにもpingは通るはず。

ためしに2号機にpingしてみる。

# ping 192.168.66.102
PING 192.168.66.102 (192.168.66.102) 56(84) bytes of data.
64 bytes from 192.168.66.102: icmp_seq=1 ttl=64 time=1.30 ms
64 bytes from 192.168.66.102: icmp_seq=2 ttl=64 time=0.531 ms

確認できたら、fleetctl --endpoint http://192.168.66.102:4001 list-machines -l を実行してcoreos内部で実行した結果と同じ結果が取得できればOK。

環境変数をセットして楽をする。

$ export FLEET_ENDPOINT="http://192.168.66.102:4001"
$ fleetctl list-machines -l

ここまではhttp://qiita.com/voluntas/items/fc5b992fc3a579029566 とだいたい同じ。

トンネルするやり方だけ少し違う。

まずWindowsローカルに戻って、coreos-vagrantのVagrantfileがあるフォルダに移動。 その後鍵の場所を確認してそれをCentOSのVagrantfileがある場所にコピー。 コピーした鍵をCentOS内で使う。 ポート番号は22のデフォルトでOK。 CoreOS郡とCentOSは、この場合VirtualhostのゲートウェイIPとCブロックまで一緒にしてるので、同じネットワーク内にあるように振る舞ってくれる?という理解であってるかな。つまりポートフォワーディングする必要はない。

最初にpingしたのと同じ2号機(core-02)をそのまま使うことにする。

$ cd coreos-vagrant
$ cp $(vagrant ssh-config core-02 | sed -n "s/IdentityFile//gp") /path/to/centos6/

その後CentOS内で以下を実行。 Vagrantの鍵名はデフォルトではinsecure_private_keyだと思うのでそれをssh-add。

# eval `ssh-agent`
Agent pid 29342
# ssh-add /vagrant/insecure_private_key
Identity added: /vagrant/insecure_private_key (/vagrant/insecure_private_key)
# export FLEETCTL_TUNNEL="192.168.66.102"
# echo $FLEETCTL_TUNNEL
192.168.66.102

もう一度fleetctlを操作してみる。

# fleetctl list-machines -l

fleet unitを使ってサービスの起動やサービス内へのsshなどを体験。 fleetctl経由で人間がサーバを指定しなくとも勝手に適当なCoreOS内でサービスが一個起動するんだが、目の当たりにした時はなんというかちょっと感動した。

# fleetctl list-units
UNIT    MACHINE ACTIVE  SUB
# fleetctl submit ~/fleet/examples/hello.service
# fleetctl list-units
# fleetctl start hello.service
Unit hello.service launched on 096ba1be.../192.168.66.102
# fleetctl list-units
UNIT            MACHINE                         ACTIVE  SUB
hello.service   096ba1be.../192.168.66.102      active  running
# fleetctl status hello.service
   hello.service - Hello World
   Loaded: loaded (/run/fleet/units/hello.service; linked-runtime; vendor preset: disabled)
   Active: active (running) since Wed 2015-04-08 14:06:08 UTC; 1min 30s ago
 Main PID: 1743 (bash)
   CGroup: /system.slice/hello.service
           ├─1743 /bin/bash -c while true; do echo "Hello, world"; sleep 1; done
           └─1936 sleep 1

Apr 08 14:07:29 core-02 bash[1743]: Hello, world
Apr 08 14:07:30 core-02 bash[1743]: Hello, world
Apr 08 14:07:31 core-02 bash[1743]: Hello, world
Apr 08 14:07:32 core-02 bash[1743]: Hello, world
Apr 08 14:07:33 core-02 bash[1743]: Hello, world
Apr 08 14:07:34 core-02 bash[1743]: Hello, world
Apr 08 14:07:35 core-02 bash[1743]: Hello, world
Apr 08 14:07:36 core-02 bash[1743]: Hello, world
Apr 08 14:07:37 core-02 bash[1743]: Hello, world
Apr 08 14:07:38 core-02 bash[1743]: Hello, world
# fleetctl ssh hello.service
Last login: Wed Apr  8 14:07:38 2015 from 192.168.66.102
CoreOS stable (607.0.0)
core@core-02 ~ $
core@core-02 ~ $ ps aux |grep "Hello, world" | grep -v grep
root      1997  0.0  0.2  14052  3000 ?        Ss   14:08   0:00 /bin/bash -c while true; do echo "Hello, world"; sleep 1; done

あとはlist-units使ったりしてfleetを体験してみてください。

ただフェイルオーバーについて、サービスがVMをまたぐときにちょっと時間がかかった気がした。1分もかからなかったけど、数十秒ほどフェイルオーバーが完了するまで待たされた感じだった。

いきなりCoreOSをhaltしたから仕方ないのかな?いやでも突然ホストマシンが落ちることもあるので、そういった自体になってもサービスが落ちないようにしたいんだが、そこまでは無理なのかな。

プロダクションで使うときはどうするのだろう。nginx-proxyなんかを使うんだろうか。

このままではプロダクションで使えない気がするので、もう少し調べとく必要がありそう。

最後に、coreos-vagrantを上げたり下げたりしてると都度ssh-keygen -Rてきなことをしないといけないのでコピペ用にメモ。 bashrcやzshrcに貼っとくのがいいかも。

eval `ssh-agent`
ssh-keygen -R 192.168.66.101
echo "" > ~/.fleetctl/known_hosts
echo "" > ~/fleet/fixtures/known_hosts
ssh-add /vagrant/insecure_private_key
export FLEETCTL_ENDPOINT="http://192.168.66.101:4001"
export FLEETCTL_TUNNEL="192.168.66.101"
fleetctl list-machines

Reference



Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu