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 件のコメント:
コメントを投稿