English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swarm クラスタ管理

概要

Docker Swarm は Docker のクラスタ管理ツールです。Docker ホストプールを単一の仮想 Docker ホストに変換します。Docker Swarm は標準の Docker API を提供しており、Docker デーモンと通信しているすべてのツールが Swarm を使用して簡単に複数のホストに拡張できます。

サポートするツールには以下のようなものが含まれますが、これに限りません:

  • Dokku

  • Docker Compose

  • Docker Machine

  • Jenkins

原理

以下の図のように、swarm クラスタは管理ノード(manager)とワークノード(work node)で構成されています。

  • swarm mananger:クラスタ全体の管理業務を担当し、クラスタ設定、サービス管理など、クラスタに関連するすべての業務を担当します。

  • work node:つまり図の available node、タスク(task)を実行するためのサービスを運行する主な役割があります。

使用

以下の例では、Docker Machine と virtualbox を使用して説明しています。ホストが virtualbox をインストールしていることを確認してください。

1、swarm クラスタ管理ノード(manager)を作成します。

docker マシンを作成します:

$ docker-machine create -d virtualbox swarm-manager

swarm クラスタを初期化し、初期化を行うこのマシンはクラスタの管理ノードです。

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #ここでのIPは、マシンを作成した際に割り当てられたIPです。

上記の出力は、初期化が成功したことを示しています。以下の行をコピーして、ワークノードを追加する際に使用します:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、swarmクラスタのワークノード(worker)の作成

ここでは直接2台のマシンを作成し、swarm-worker1 とswarm-worker2 。

それぞれのマシンにログインし、前の手順で作成したクラスタに追加します、ここでは前の手順でコピーした内容を使用します。

以上のデータ出力は、成功が確認されたことを示しています。

上図では、前の手順でコピーした内容が長いため、自動的に切られますが、実際に実行されたコマンドは以下の通りです:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3、クラスタ情報の確認

管理ノードに入ると、docker infoを実行すると現在のクラスタの情報を確認できます。

$ docker info

赤い円の位置から、現在実行中のクラスタには3つのノードがあり、そのうち1つが管理ノードであることがわかります。

4、サービスをクラスタにデプロイする

注意:クラスタ管理に関連するどんな操作も、管理ノード上で行われます。

以下の例では、作業ノード上にhelloworldという名前のサービスを作成します、これはランダムに作業ノードに割り当てられます:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

5、サービスのデプロイメント状況の確認

helloworldサービスがどのノード上で実行されているかを確認する、現在はswarm上で実行されています。-worker1 ノード:

docker@swarm-manager:~$ docker service ps helloworld

helloworldデプロイメントの詳細情報を確認する:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6、クラスタサービスの拡張

上記のhelloworldサービスを二つのノードに拡張します。

docker@swarm-manager:~$ docker service scale helloworld=2

既に一つのノードから二つのノードに拡張されています。

7、サービスの削除

docker@swarm-manager:~$ docker service rm helloworld

削除されたか確認する:

8、ロールオーバーサービス

以下の例では、redis バージョンがどのように高バージョンにロールオーバーされるかを紹介します。

一つの 3.0.6 の redis 版本。

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

redis をロールバックアップグレードします。

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

図を確認すると、redis のバージョンが以下のようになります: 3.0.6 アップグレードして 3.0.7、サービスのアップグレードが成功しました。

9、新しいタスクを受け取るための某个ノードを停止

すべてのノードを確認:

docker@swarm-manager:~$ docker node ls

現在のすべてのノードは Active で、新しいタスクの割り当てを受け取ることができます。

ノードの swarm を停止-worker1:

注意:swarm-worker1 ステータスが Drain に変わります。クラスタのサービスには影響しませんが、swarm-worker1 ノードは新しいタスクを受け取らなくなり、クラスタの負荷能力が低下します。

以下のコマンドでノードを再アクティブ化できます:

docker@swarm-manager:~$ docker node update --availability active swarm-worker1