manage - Swarm マネージャの作成

動作条件:Swarm マネージャで manage を使う前に、 こちらのディスカバリのドキュメント に書かれているディスカバリ・バックエンドを構築します。

manage コマンドは Swarm マネージャを作成します。マネージャはクラスタに対するコマンド受信と、Swarm ノードにコンテナを割り当てる役割があります。高可用性クラスタ用に複数の Swarm マネージャの作成も可能です。

Swarm マネージャを作成するには、以下の構文を使います。

$ docker run swarm manage [OPTIONS] <discovery>

例えば、Swarm マネージャを manage で作成時に、他のマネージャと高可用性クラスタを形成するには、次のように実行します。

$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise 172.30.0.161:4000 consul://172.30.0.165:8500

あるいは、Swarm マネージャ作成時、Docker クライアントと Swarm ノード間で TLS 認証を有効にするには、次のように実行します。

$ docker run -d -p 3376:3376 -v /home/ubuntu/.certs:/certs:ro swarm manage --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem --host=0.0.0.0:3376 token://$TOKEN

引数

manage コマンドは引数を1つだけ指定できます。

<discovery> - ディスカバリ・バックエンド

Swarm マネージャを作成する前に、 ディスカバリ・トークンの作成ディスカバリ・バックエンドのセットアップ が必要です。

Swarm ノードの作成時、 <discovery> を使って以下のバックエンドを指定可能です。

  • token://<token>
  • consul://<ip1>/<path>
  • etcd://<ip1>,<ip2>,<ip2>/<path>
  • file://<path/to/file>
  • zk://<ip1>,<ip2>/<path>
  • [nodes://]<iprange>,<iprange>

それぞれの項目は:

  • <token> はDocker Hub のホステッド・ディスカバリ・サービスによって生成されるトークンです。このトークンを作成するには create コマンドを使います。
  • ip1ip2ip3 はディスカバリ・バックエンド用ノードの IP アドレスとポート番号を指定します。
  • path (オプション)はディスカバリ・バックエンドのキーバリュー・ストアのパスを指定します。複数のクラスタを1つのバックエンドで管理する場合は、各クラスタごとにキーバリューのペアを記述する必要があります。
  • path/to/file はSwarm マネージャとクラスタのメンバであるノード情報の一覧と、それぞれの静的な IP アドレスのリストを指定したファイルのパスを指定します。
  • iprange は特定のポート番号を利用する IP アドレスの範囲を指定します。

以下は <discovery> 引数の指定例です:

  • ディスカバリ・トークン: token://0ac50ef75c9739f5bfeeaf00503d4e6e
  • Consul ノード: consul://172.30.0.165:8500

<discovery> は環境変数 $SWARM_DISCOVERY でも指定可能です。

より詳しい情報やサンプルについては、 Docker Swarm ディスカバリ をご覧ください。

オプション

manage コマンドには以下のオプションがあります:

strategy - スケジュール先のストラテジ

--strategy "<値>" を使い、 Docker Swarm スケジューラに対して何のストラテジを使うか指定します。

"値" の場所には:

  • spread - 最も利用可能なリソースが多い Swarm ノードに対し、各コンテナを割り当てます。
  • binpack - 割り当てられた Swarm ノードのリソースが溢れる前に、別のノードに割り当てます。
  • random - ランダムな Swarm ノードにコンテナを割り当てます。

デフォルトでは、スケジューラは spread ストラテジを使います。

より詳しい情報はや例は Docker Swarm ストラテジ をご覧ください。

--filter-f - スケジューラ・フィルタ

--filter <値> もしくは -f <値> で、コンテナを作成・実行時、どのノードを使うかを Docker Swarm スケジューラに対して指定します。

<値> の場所には:

  • health - ディスカバリ・バックエンドと通信可能な実行中ノードを使います。
  • port - コンテナにポートを割り当てるために、適切なポート番号が利用可能なノード(つまり、他のコンテナやプロセスにポートが専有されていない環境)を使います。
  • dependency - 依存関係を宣言しているコンテナの場合、依存関係のあるコンテナが起動しているノードを使います。
  • affinity - アフィニティが宣言されたコンテナの場合は、アフィニティが同一のノードを使います。
  • constraint - 制約(constraint)が宣言されたコンテナの場合は、同一の制約を持つノードを使います。

複数のスケジューラ・フィルタを使うには、次のようにします。

--filter <value> --filter <value>

より詳しい情報や例は Swarm フィルタ をご覧ください。

--host , -H - リッスンする IP/ポート

--host <IP>:<ポート> もしくは -H <ip>:<ポート> を使い、マネージャがメッセージを受信するための IP アドレスとポート番号を指定します。 ip の部分に 0 を使うか省略したら、manager はデフォルトのホスト IP を使います。例: --host=0.0.0.0:3376 または -H :4000

--host は環境変数 $SWARM_HOST でも指定できます。

--replication - Swarm マネージャ複製の有効化

高可用性クラスタでは、プライマリとセカンダリ・マネージャ間で、Swarm マネージャの複製(レプリケーション)を可能にします。プライマリからセカンダリにクラスタ情報のミラーを複製します。つまりプライマリ・マネージャで障害が起これば、セカンダリがプライマリ・マネージャになれます。

--replication-ttl - リーダー障害発生時のロック解除時間

--replication-ttl "<遅延>s" を使い、遅延時間を秒で指定します。これはセカンダリ・マネージャがプライマリ・マネージャがダウンまたは到達可能と通知する時間です。この通知をトリガとして、セカンダリ・マネージャの誰がプライマリ・マネージャになるのか選出されます。デフォルトの遅延は 15 秒です。

--tls - TLS の有効化

--tls を使い TLS(トランスポート・レイヤ・セキュリティ)を有効化します。 --tlsverify を使う場合は --tls の使用は不要です。

--tlscacert - 証明局(CA) の公開鍵ファイルのパス

--tlscacert=<path/file> を使い証明局(CA)用の公開鍵(証明書)のパスとファイル名を指定します。例: --tlscacert=/certs/ca.pem 。指定したら、マネージャが信頼するのは、同じ証明局で署名された証明書を使っているリモート環境のみです。

--tlscert - ノードの TLS 証明書ファイルのパス

--tlskey を使い、マネージャの証明書(CAによって署名済み)のファイル名とパスを指定します。例: --tlskey=/certs/key.pem

--tlskey - ノードの TLS 鍵ファイルのパス

--tlskey を使いマネージャの秘密鍵(CAによって署名済み)のファイル名とパスを指定します。例: --tlskey=/certs/key.pem

--tlsverify - TLS を使いリモート環境を確認

--tlsverify を使いTLS 通信を有効化し、同一の証明局(CA)で署名された証明書を持っているマネージャ、ノード、クライアントのみ通信を許可します。 --tlsverify を使えば、 --tls を使う必要はありません。

--engine-refresh-min-interval - Engine の最小リフレッシュ間隔を指定

--engine-refresh-min-interval "<間隔>s" を使い、Engine を例フレッシュするまでの最小間隔を秒単位で指定します。デフォルトでは、この間隔は 30 秒です。

注釈

プライマリ・マネージャが Engine をリフレッシュするというのは、クラスタ上にある Engine の情報を更新することです。マネージャはこの情報を Engine が正常(healthy)かどうか決めるために使います。接続できなければ、マネージャは対象ノードを障害(unhealthy)とみなします。マネージャは指定した間隔ごとに再度 Engine 情報の更新を試みます。規定回数の再試行して Engine が応答するのであれば、再び Engine を正常(healthy)とみなします。もしそうでなければ、マネージャは再試行を停止し、対象の Engine を無視します。

--engine-refresh-max-interval - Engine の最大リフレッシュ間隔を指定

--engine-refresh-max-interval "<間隔>秒" を使い、リフレッシュまでの最大間隔を秒単位で指定します。デフォルトでは、この間隔は 60 秒です。

--engine-failure-retry - Engine のリトライ失敗回数

--engine-failure-retry "数値" を使い、Engine が障害とみなすまでの再試行の回数を指定します。デフォルトでは、3回再試行します。

--engine-refresh-retry - 廃止予定

廃止予定; --engine-failure-retry "数値" の代わりに --engine-failure-retry を使います。デフォルトは 3 です。

--heartbeat - ハートビート間隔

--heartbeat "<間隔>s" を使い、マネージャとプライマリ・マネージャ間のハードビート間隔を秒単位で指定します。ハードビートとはマネージャが正常で到達可能であるかを確認します。デフォルトでは、この間隔は 60 秒です。

--api-enable-cors , --cors - リモート API の CORS ヘッダを有効化

--api-remote-cors--cors を使い CORS (cross-origin resource sharing) ヘッダをリモート API に入れます。

--cluster-driver , -c - 使用するクラスタ・ドライバ

--cluster-driver "ドライバ"-c "<ドライバ>" を使い、使用するクラスタ・ドライバを指定します。 <ドライバ> に指定できるのは、以下のどちらかです。

  • swarm は Docker Swarm ドライバです。
  • mesos-experimental は Mesos クラスタ・ドライバです。

デフォルトは swarm ドライバです。

Mesos ドライバの利用に関する詳しい情報は、 Using Docker Swarm and Mesos をご覧ください。

--cluster-opt - クラスタ・ドライバのオプション

複数のクラスタ・ドライバのオプションを --cluster-opt <値> --cluster-opt <値> のような形式で指定できます。

<値> の場所に入る項目は以下の通りです:

  • swarm.overcommit=0.05- リソースをオーバー・コミットする割合(パーセント)を指定します。デフォルト値は 0.05 であり、5パーセントを意味します。
  • swarm.createretry=0 - コンテナ作成に何度失敗すると障害とみなすかを指定します。デフォルトの値は 0 回の再試行です。
  • mesos.address= - バインドする Mesos のアドレスを指定します。このオプションは環境変数 $SWARM_MESOS_ADDRESS でも指定できます。
  • mesos.checkpointfailover=false - Mesos のチェックポインティング(checkpointing)を有効化します。これは、以前まで使っていたエクゼキュータの状態が復旧したら、スレーブが再接続できるようにします。この時、ディスク I/O を消費します。このオプションは環境変数 $SWARM_MESOS_CHECKPOINT_FAILOVER でも指定できます。デフォルト値は false (無効)です。
  • mesos.port= - Mesos がバインドするポートを指定します。このオプションは環境変数 $SWARM_MESOS_PORT でも指定できます。
  • mesos.offertimeout=30s - Mesos がタイムアウトと判断する秒を指定します。このオプションは環境変数 $SWARM_MESOS_OFFER_TIMEOUT でも指定できます。デフォルトの値は 30s です。
  • mesos.offerrefusetimeout=5s - Mesos がリソースの再利用ができないと判断する秒を指定します。このオプションは環境変数 $SWARM_MESOS_OFFER_REFUSE_TIMEOUT でも指定できます。デフォルトの値は 5s です。
  • mesos.tasktimeout=5s - Mesos のタスク作成までのタイムアウトを秒で指定します。このオプションは環境変数 $SWARM_MESOS_TASK_TIMEOUT でも指定できます。デフォルトの値は 5s です。
  • mesos.user= - Mesos フレームワークのユーザ名を指定します。このオプションは環境変数 $SWARM_MESOS_USER でも指定できます。

--discovery-opt - ディスカバリ・オプション

--discovery-opt <値> を使いディスカバリオプションを指定します。これには Consul や etcd ディスカバリ・サービスが使用する TLS ファイル(CA 公開鍵証明書、証明書、プライベート鍵)の指定も含みます。ディスカバリ・オプションは何度も指定できます。例:

--discovery-opt kv.cacertfile=/path/to/mycacert.pem \
--discovery-opt kv.certfile=/path/to/mycert.pem \
--discovery-opt kv.keyfile=/path/to/mykey.pem \

より詳しい情報は Docker Swarm ディスカバリ をご覧ください。

参考

manage — Create a Swarm manager
https://docs.docker.com/swarm/reference/manage/