それでは、Swarmクラスタによるオーバレイネットワークを実際に構築してみましょう。まずは、Swarmクラスタのマネージャノードを構築します。
以下では、ホストOSのn0121、n0122、n0123のrootユーザーのコマンドプロンプトをそれぞれ「n0121 #」「n0122 #」「n0123 #」で表すとします。Swarmクラスタのマネージャノードの作成は、dockerコマンドに「swarm init」を付与します。さらに、「--advertise-addr=」オプションを付与し、SwarmマネージャノードがワーカノードにホストOSとSwarmのAPIによる通信を行う際に利用されるアドレスを記述します。今回はマネージャノードのIPアドレスを指定しています。
n0121 # docker swarm init --advertise-addr=172.16.1.121
この状態で、Swarmクラスタに登録されたノードを確認します。Swarmクラスタに登録されたノードを確認するには、dockerコマンドに「node ls」を付与して実行します。
n0121 # docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 5ownu2cgmq58hd8ia2tistq74 * n0121 Ready Active Leader
すると、物理サーバ1号機のn0121が登録されていることが分かります。1号機のn0121がマネージャノードの場合は、「MANAGER STATUS」列に「Leader」と表示されます。
次に、n0122とn0123でワーカノードを起動します。ワーカノードを起動するには、クラスタに参加するためのトークンという文字列を得る必要があります。このトークンが同一のノードとして一つのクラスタを形成します。まずは、マネージャノードでワーカノード参加のためのトークンを表示します。
n0121 # docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-1y881q5hkrpynj7uhd0ahhj5ue24049vg82vnu6jwh6yyl3tcd-emxpycaai05khj37leoj7w4zi \ 172.16.1.121:2377
上記の「--token」以降に表示されている長い文字列が今回構成するSwarmクラスタのトークンです。このトークンを使ってワーカノードをクラスタに参加させます。上記に出力された「docker swarm join」以降のテキストの内容をそのままワーカノードにコピー&ペーストして実行します。ノードn0122をSwarmクラスタにワーカノードとして参加させてみしょう。
n0122 # docker swarm join \ > --token SWMTKN-1-1y881q5hkrpynj7uhd0ahhj5ue24049vg82vnu6jwh6yyl3tcd-emxpycaai05khj37leoj7w4zi \ > 172.16.1.121:2377 This node joined a swarm as a worker.
同様に、n0123をSwarmクラスタにワーカノードとして参加させます。
n0123 # docker swarm join \ > --token SWMTKN-1-1y881q5hkrpynj7uhd0ahhj5ue24049vg82vnu6jwh6yyl3tcd-emxpycaai05khj37leoj7w4zi \ > 172.16.1.121:2377 This node joined a swarm as a worker.
上記よりワーカノードは、マネージャノード(172.16.1.121)の2377番ポートで通信することが分かります。ワーカノードがSwarmクラスタに参加できているかをマネージャノード側で確認します。
n0121 # docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 0gijcr6pvjveceuira0q5iv9h n0122 Ready Active 5ownu2cgmq58hd8ia2tistq74 * n0121 Ready Active Leader 9tma9o8v8qu8z97n3duhafbhw n0123 Ready Active
マネージャノードn0121にワーカノードのn0122とn0123が登録されましたので、Swarmクラスタが構築できました。
Copyright © ITmedia, Inc. All Rights Reserved.