2015年11月27日金曜日

CoreOSでクラスタ構成を組む(etcd2 + fleet)

以下、参考URL

https://coreos.com/fleet/docs/latest/launching-containers-fleet.html

「コンテナはフォアグラウンドで何か動いていないとすぐに落ちる」という前提を理解していなかったので

ExecStart=/usr/bin/docker run --name -it test centos:6 と実行してすぐに落ちる!と首をかしげていました・・・。

参考URLそのままで簡単に構成できます。

①クラスタ対象のコンテナをサービス化するファイルを作成
②fleetctl start コマンドでコンテナ登録

CoreOSクラスタの任意のホストで下記ディレクトリに移動します。


cd /etc/systemd/system


コンテナを起動するためのserviceファイルを作成します。


vi test.service



[Unit]
Description=test
After=docker.service
Requires=docker.service 

#↑実行後にDockerサービスを要求、起動する

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test #実行前にtestコンテナがある場合は停止
ExecStartPre=-/usr/bin/docker rm test #実行前にtestコンテナがある場合は削除
ExecStartPre=/usr/bin/docker pull centos:6 #実行前にcentos:6イメージをダウンロード
ExecStart=/usr/bin/docker run --name test centos:6 top -b #コンテナ[test]を[centos:6]イメージで実行しtop コマンドを実行
ExecStop=/usr/bin/docker stop test #fleetctl stopコマンドでtestを停止する

以下コマンドでfleetでtestコンテナを起動します。


fleetctl start test.service


以下コマンドでfleetでtestが起動していることを確認します。


fleetctl list-units
UNIT            MACHINE                         ACTIVE          SUB
test.service    1e0536bd.../192.168.159.140     active          running


discovery.ioサービスを使用したetcd2クラスタ3台構成では残り1台になるとfleetに登録しているクラスタが停止しました。
どこかでクラスタは4台推奨と書いてあった気がします。

さらに高可用性クラスタ(同じコンテナイメージを複数立てる)を構成する場合は[X-Fleet]オプションを追加します。


[Unit]
Description=test2
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test2
ExecStartPre=-/usr/bin/docker rm test2
ExecStartPre=/usr/bin/docker pull centos:6
ExecStart=/usr/bin/docker run --name test2 centos:6 top -b
ExecStop=/usr/bin/docker stop test2

[X-Fleet]
Conflicts=test2@*.service


以下コマンドでfleetでtest2コンテナを3台起動します。


fleetctl start test2@1.service
fleetctl start test2@2.service
fleetctl start test2@3.service


以下コマンドでfleetでtest2が起動していることを確認します。


fleetctl list-units
UNIT            MACHINE                         ACTIVE          SUB
test2@1.service 708896cf.../192.168.159.139     active          running
test2@2.service c8fce403.../192.168.159.141     activating      start-pre #起動中でした
test2@3.service 1e0536bd.../192.168.159.140     active          running

docker pullでイメージを引っ張るので本番環境ではdockerイメージを格納した共有サーバ的なものが必要になるんですね。
まだまだ勉強が必要です。

0 件のコメント:

コメントを投稿