ノードの動作

Docker Engine 1.12 において導入された Swarm モードでは、1 つあるいは複数の Docker Engine からなるクラスター、つまり Swarm と呼ぶものが生成できるようになりました。 1 つの Swarm はいくつかのノードから構成されていて、物理マシン仮想マシンを問わず、Docker Engine 1.12 またはそれ以降が Swarm モードにおいて稼動します。

ノードには マネージャーワーカー という 2 つの種類があります。

Swarm モードクラスター

Swarm モード概要重要な考え方 をまだ読んでいない方は、ざっと目を通してください。

マネージャーノード

マネージャーノードはクラスター管理タスクを取り扱います。

  • クラスター状態の管理。
  • サービスのスケジュール管理。
  • Swarm モードの HTTP API endpoints の提供。

マネージャーにおいては Raft を利用することによって、Swarm 全体を一貫した状態に保ちながら、そこに稼動するサービスをすべて管理します。 テスト目的であれば、1 つのマネージャーからなる 1 つの Swarm を実行することも可能です。 もっともただ 1 つのマネージャーしか持たない Swarm においてマネージャーが処理に失敗すると、サービスは稼動し続けますが、復旧のためにはもう 1 つ新たなクラスターを生成しなければなりません。

Swarm モードが持つ耐障害性(fault-tolerance)機能を活用するために、Docker では高可用性に関する開発方針に従って、奇数のノードを用意することを推奨しています。 複数のマネージャーを用意しておけば、マネージャーノードの 1 つに障害が発生しても、システムダウンをさせずに復旧することが可能になります。

  • Swarm 内に 3 つのマネージャーがあれば、最大で 1 つのマネージャーの障害に耐えられます。
  • Swarm 内に 5 つのマネージャーがあれば、最大かつ同時に 2 つのマネージャーの障害に耐えられます。
  • Swarm 内に N 個のマネージャーがあれば、最大で (N-1)/2 個のマネージャーの障害に耐えられます。
  • Docker では、1 つの Swarm に対して最大 7 つのマネージャーを持つことを推奨します。

    重要事項 より多くのマネージャーを加えたからといって、スケーラビリティーや性能が向上するわけでは ありません。 一般的には、増やさないのが正しいことです。

ワーカーノード

ワーカーノードも Docker Engine のインスタンスです。 その唯一の目的はコンテナーを稼動させることです。 ワーカーノードは、Raft の分散状態の中には含まれず、スケジュール決定や Swarm モード HTTP API の提供も行いません。

1 つの Swarm においてマネージャーノードを 1 つだけとすることは可能ですが、1 つのマネージャーノードも存在しないところに 1 つだけワーカーノードを生成することはできません。 デフォルトで、マネージャーは同時にワーカーとしても動作します。 1 つのマネージャーノードしか持たないクラスターにおいては、docker service create といったコマンドを実行すると、スケジューラーはタスクのすべてをローカルの Engine に配置することになります。

複数ノードから構成される Swarm において、マネージャーに対してスケジューラーがタスクの割り当てを行わないようにするには、マネージャーノードの利用状態(availability)を Drain に設定します。 スケジューラーは Drain モードに設定されたノード上ではタスクを停止し、Active モードのタスクにはタスクをスケジューリングします。 スケジューラーは、利用状態が Drain であるようなノードに対しては、一切タスクを割り振ることはありません。

コマンドラインリファレンスの docker node update を参照して、ノードの利用状態の変更方法について確認してください。

ロールの変更

docker node promote を実行すれば、ワーカーノードをマネージャーノードに昇格させることができます。 たとえば、1 つのマネージャーノードを保守目的でオフラインとした場合には、別のワーカーノードを昇格させることが必要になる場合があります。 node promote を参照してください。

マネージャーノードをワーカーノードに降格させることもできます。 node demote を参照してください。

さらに詳しく

  • Swarm モードの サービス の動作について。
  • Swarm モードにおける PKI 動作について。
docker, container, cluster, swarm mode, node