swarm にノードを参加

1つめの sawrm を作成した後は、単一の Docker Engine 上に swarm モードが動いています。swarm に対してノードを追加し、swarm モードの利点を完全に活かします。

  • worker ノードの追加はキャパシティを増やします。サービスを swarm にデプロイ時、worker ノードか manager ノードかに関わらず、Engine は利用可能なノード上にサービスをデプロイします。swarm に worker ノードを追加すると、manager raft 合意による影響を受けることなく、swarm で処理できるタスクの規模を拡大します。
  • manager ノードは耐障害性を向上します。manager ノードが処理するのは、 swarm に対するオーケストレーションとクラスタ管理機能です。manager ノード間では、単一のリーダーノード(leader node)がオーケストレーション・タスクを調整します。もしもリーダーノードがダウンすると、残った manager ノードが新しいリーダーを選出(elect)し、オーケストレーションと swarm 状態の維持を再開します。デフォルトでは、 manager ノードでもタスクを実行します。

swarm に対してノードを追加する前に、ホストマシン上には Docker Engine 1.12 以上のインストールが必須です。

Docker Engine が swam に参加するには、 docker swarm join コマンドで得られる join-token (参加トークン)に依存します。ノードはこのトークンを参加時のみ使います。トークンが後ほど更新されてしまうと、既存の swarm ノードに参加できなくなります。 join コマンドの表示や、swarm join トークンの更新 をご覧ください。

注釈

Docker Engine は非 FIPS ノードでも、 FIPS 有効化した swarm クラスタに参加できます。

FIPS 環境と混在している環境では、アップグレードやステータスの変更が簡単ですが、 Docker はプロダクションで FIPS 混在は推奨しません。

worker ノードとして参加

worker ノードに対する参加トークンを含む join コマンドを取得するには、 manager ノード上で以下のコマンドを実行します。

$ docker swarm join-token worker

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

swarm に参加する worker 上で、先ほど出力したコマンドを実行します。

$ docker swarm join \
  --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  192.168.99.100:2377

This node joined a swarm as a worker.

docker swarm join コマンドは以下の処理を行います。

  • 現在のノード上の Docker Engine を swarm モードに切り替えます
  • manager に対して TLS 証明書をリクエストします
  • マシンのホスト名をノード名にします
  • swarm トークンに基づいて、 manager がリッスンするアドレスにある swarm に、現在のノードを参加します
  • 現在のノードを Active の availability に設定します。つまり、スケジューラからのタスクを受信可能にします
  • 現在のノード上に ingress オーバレイ・ネットワークを拡張します

manager ノードとして参加

docker swarm join の実行時に manager トークンを渡すと、Docker Engine は worker モードと同じように swarm モードに切り替わります。また、manager ノードは raft 合意にも参加します。新しいノードは Reachable (到達可能)になり、既存の manager ノードは swarm Leader のままです。

高可用性を実現するためには、Docker が推奨するのはクラスタごとに3または5つの manager ノードです。swarm モードの manager ノードは Raft を使ってデータを共有するため、manager の数は奇数である必要があります。swarm では manager ノードの半数が利用可能であれば、クォーラム機能を継続できます。

swarm マネージャの詳細や swarm の管理については、 Docker Engine の swarm の管理と運用 をご覧ください。

manager ノードとして参加するトークンを含む join コマンドを表示するには、manager ノード上で以下のコマンドを実行します。

$ docker swarm join-token manager

To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
    192.168.99.100:2377

新しい manager ノード上でコマンドの出力を実行し、swarm に参加します。

$ docker swarm join \
  --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
  192.168.99.100:2377

This node joined a swarm as a manager.