Docker : Docker Swarm を利用する2017/08/03 |
Docker Swarm を利用して、複数の Docker ホストでクラスター環境を構成します。
当例では以下の 3台の Docker ホストを使用して設定します。
Swarm クラスターではマネージャーノード [Manager nodes] とワーカーノード [Worker nodes] の二つの役割がありますが、 いずれの役割も複数ノード設定可能ですが、当例では以下のように node01 をマネージャーノード、その他をワーカーノードとして設定します。 -----------+---------------------------+--------------------------+------------ | | | eth0|10.0.0.51 eth0|10.0.0.52 eth0|10.0.0.53 +----------+-----------+ +-----------+----------+ +-----------+----------+ | [ node01.srv.world ] | | [ node02.srv.world ] | | [ node03.srv.world ] | | Manager | | Worker | | Worker | +----------------------+ +----------------------+ +----------------------+ |
[1] |
こちらを参照して全ノードで Docker サービスを起動しておきます。
|
[2] | マネージャーノードで Swarm クラスターの設定をします。 |
root@node01:~# docker swarm init Swarm initialized: current node (vcns353o59ye47zw5mi7dmdua) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2nz54ltw9rshwlkqrmrhm83yqjje6wdd94ymxrx_ zzt5h4qtuxn-au471rbfach5zq8niqygz7xsv 10.0.0.51:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. |
[3] | ワーカーノードから Swarm クラスターへの参加を実行します。 実行コマンドはマネージャーノードで swarm init した際に表示されたコマンドをそのまま実行すれば OK です。 |
root@node02:~# docker swarm join \ --token SWMTKN-1-2nz54ltw9rshwlkqrmrhm83yqjje6wdd94ymxrxzzt5h4qtuxn-au471rbfach5zq8niqygz7xsv \ 10.0.0.51:2377 This node joined a swarm as a worker. |
[4] | ワーカーノードが正常に Swarm クラスターに参加できていれば、マネージャーノードで node ls するとクラスター参加ノードの一覧が表示されます。 |
root@node01:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS tavuctuc6vhlccqk3fnl6nv2e node02.srv.world Ready Active vcns353o59ye47zw5mi7dmdua * node01.srv.world Ready Active Leader woeo3nhvlv3tin793n8k677v0 node03.srv.world Ready Active |
[5] |
Swarm クラスターが正常に設定できたら、次に Swarm クラスターで提供するサービスを設定します。
当例では、こちらの例で作成したような apache2 サービスを提供するコンテナイメージを利用して設定します。 コンテナイメージは全ノードで準備しておきます。ただし、当例では動作確認のため HTTP アクセス時の表示メッセージはノード毎に異なるものを設定しています。 |
[6] | コンテナイメージが準備できたら、マネージャーノードでサービスを定義します。 サービス起動後は、マネージャーノードの設定したポート宛てにアクセスすると、サービスに設定したレプリカのノード数分の Dockerノードが応答します。 クラスター内のノードへのアクセスはラウンドロビン方式で振り分けられるため、アクセスごとに応答ノードが切り替わります。 |
root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE web_server latest fc43f53a680b 6 seconds ago 296MB debian latest a20fd0d59cf1 10 days ago 100MB # レプリカ数 2 でサービスを新規作成する root@node01:~# docker service create --name swarm_cluster --replicas=2 -p 80:80 web_server:latest m7zmin5vo21qu7i3crkytxpq6 # サービスの一覧を表示する root@node01:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS m7zmin5vo21q swarm_cluster replicated 2/2 web_server:latest *:80->80/tcp # サービスを調査する root@node01:~# docker service inspect swarm_cluster --pretty ID: m7zmin5vo21qu7i3crkytxpq6 Name: swarm_cluster Service Mode: Replicated Replicas: 2 Placement: UpdateConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-first RollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: Image: web_server:latest Resources: Endpoint Mode: vip Ports: PublishedPort = 80 Protocol = tcp TargetPort = 80 PublishMode = ingress # サービスの稼働状況を表示する root@node01:~# docker service ps swarm_cluster ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ixth3hy90ufk swarm_cluster.1 web_server:latest node02.srv.world Running Running about a mi.. hze4wl2w8a18 swarm_cluster.2 web_server:latest node01.srv.world Running Running about a mi.. # マネージャーノードにアクセスして動作確認 # ラウンドロビン方式で各ノードへ振り分けられる root@node01:~# curl http://node01.srv.world/ node02 root@node01:~# curl http://node01.srv.world/ node01 root@node01:~# curl http://node01.srv.world/ node02 root@node01:~# curl http://node01.srv.world/ node01 |
[7] | 設定したサービスのレプリカ数を変更したい場合は以下のように設定します。 |
# レプリカ数を 3 に変更する root@node01:~# docker service scale swarm_cluster=3 swarm_cluster scaled to 3 root@node01:~# docker service ps swarm_cluster ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ixth3hy90ufk swarm_cluster.1 web_server:latest node02.srv.world Running Running 3 minute.. hze4wl2w8a18 swarm_cluster.2 web_server:latest node01.srv.world Running Running 3 minute.. lfi7vo0gvcf0 swarm_cluster.3 web_server:latest node03.srv.world Running Running 3 second.. # アクセスして動作確認 root@node01:~# curl http://node01.srv.world/ node02 root@node01:~# curl http://node01.srv.world/ node03 root@node01:~# curl http://node01.srv.world/ node01 |
Sponsored Link |