Swarm へのノード参加

読む時間の目安: 2 分

Swarm を生成したら、それは単一の Docker Engine を Swarm モードにしたということです。 Swarm モードを最大限活用するには、Swarm にノードを追加していきます。

  • ワーカーノードは、これを追加することによって収容能力を増加させます。 Swarm に対してサービスをデプロイすると Engine は、ワーカーノード、マネージャーノードを問わず、利用可能なノードに対してタスクをスケジューリングします。 Swarm に対してワーカーノードを追加すると、Swarm のスケールが増加し、マネージャーの Raft 合意に影響することなくタスクを取り扱うことができます。
  • マネージャーノードは耐障害性能を向上させます。 マネージャーノードは Swarm においてオーケストレーション機能およびクラスター管理機能を実現します。 マネージャーの中では、リーダーとなるノードがオーケストレーションタスクを管理します。 リーダーノードが処理不能になると、残りのマネージャーノードの中から新たなリーダーが選出され、オーケストレーション機能と Swarm 状態を復元します。 デフォルトではマネージャーノードも通常のタスクを実行します。

Docker Engine が Swarm に参加する際には、docker swarm joinコマンドによって示される 参加トークン(join-token)を利用します。 ノードがトークンを利用するのはこの参加のときだけです。 この後にトークンのローテート操作を行っても、既存の Swarm ノードには影響しません。 Docker Engine の Swarm モード実行 を参照してください。

ワーカーノードとしての参加

ワーカーノード用に、参加トークンの表示も込みで join コマンドを表示するには、マネージャーノード上にて以下のコマンドを実行します。

$ 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
$ docker swarm join-token worker

Swarm にワーカーを追加するには、以下のコマンドを実行してください。

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

ワーカーノード上において、出力結果どおりのコマンドを実行して Swarm に参加します。

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

This node joined a swarm as a worker.
$ docker swarm join \
  --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  192.168.99.100:2377

このノードはワーカーとして Swarm に参加しました。

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

  • 現在のノードである Docker Engine を Swarm モードに切り替えます。
  • マネージャーに TLS 証明書を要求します。
  • マシンホスト名を使ってノード名を定めます。
  • Swarm トークンに基づくマネージャーのリッスンアドレスで、現在のノードを Swarm に参加させます。
  • 現在のノードの利用状態(availability)をActiveに設定します。 これはスケジューラーからのタスク受け入れが可能であることを意味します。
  • 現在のノードに対して、ingressオーバーレイネットワークを拡張します。

マネージャーノードとしての参加

docker swarm joinを実行してマネージャートークンを受け渡すと、Docker Engine はワーカーノードの場合と同様に、Swarm モードへの切り替えを行います。 マネージャーノードは Raft 合意(raft consensus)にも参加します。 新たに参加させたこのノードはReachable(到達可能)となりますが、Swarm のLeaderは、それまでのものがそのまま担当します。

Docker はクラスターの高可用性を実現するため、マネージャーノードを 3 つあるいは 5 つにより構成することが推奨されます。 Swarm モードにおけるマネージャーノードは Raft を利用してデータ共有を行うため、マネージャーノード数は奇数としなければなりません。 Swarm はマネージャーノードの半数以上の quorum(多数票)が得られれば、機能し続けることができます。

Swarm マネージャーと Swarm の管理に関する詳細は Docker Engine の Swarm 管理と保守 を参照してください。

マネージャーノード用に、参加トークンの表示も込みで join コマンドを表示するには、マネージャーノード上において以下のコマンドを実行します。

$ 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
$ docker swarm join-token manager

Swarm にマネージャーを追加するには、以下のコマンドを実行してください。

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

新たなマネージャーノード上において、出力結果どおりのコマンドを実行して Swarm に参加します。

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

This node joined a swarm as a manager.
$ docker swarm join \
  --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
  192.168.99.100:2377

このノードはマネージャーとして Swarm に参加しました。

さらに詳しく

guide, swarm mode, node