4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntu で Docker Swarm クラスタを組む。

Last updated at Posted at 2017-10-02

はじめに

Ubuntu 16.0.4 のサーバーを3台用意してそれを Docker Swarm でクラスタを組んだのでそれをまとめました。

docker-whales-transparent.png

構成

今回行う構成は3台とも manager&worker でクラスタを組む構成です。

イメージ
docker-swarm.png

Dockerインストール

とりあえず全てのサーバーに docker-engine をインストールします。

イメージ
スクリーンショット 2017-09-29 13.22.14.png

まず、aptをhttps越しで利用できるようにするためのライブラリをインストールします。

必要ライブライのインストール
$ sudo apt-get install apt-transport-https ca-certificates

次に docker のインストールに使うリポジトリを追加します。

リポジトリ追加
$ sudo vim /etc/apt/sources.list.d/docker.list

$ cat /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-xenial main
apt更新
$ sudo apt-get update

準備できたら docker-engine をインストールします。

dockerインストール
$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo apt-get install docker-engine

今回使うわけではないですが、docker compose もインストールしておきます。

composeインストール
$ apt-get install docker-compose

また、ubuntuユーザーで docker コマンドを使えるように dockerグループについしておきます。

グループ追加
$ sudo gpasswd -a ubuntu docker

追加したらログインし直して作業を進めます。

master(Leader) nodeの作成

今回は3台とも manager node にします。まずは managermaster となる1台を作成します。

イメージ
スクリーンショット 2017-09-29 14.21.34.png

manager(Leader)作成
$ docker swarm init 
Swarm initialized: current node (71uuiqwvlcizxln4bfk3gvr4a) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0ymf7p2vy09a15usvwbb6ya04hqg7b0aaupj0xp3vfy137nrhr-5k87wh49qn3j7ml6b8kxiz5t7 \
    172.31.17.88:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

ここで init した際に出てくるのは _worker_用の token です。今回は _manager_用の token が欲しいので以下のコマンドを実行して取得します。

manager用token取得
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0ymf7p2vy09a15usvwbb6ya04hqg7b0aaupj0xp3vfy137nrhr-0blrkkwxwghkddo7hk5tkcy2y \
    172.31.17.88:2377

これであとは各ノードとなるサーバーへログインし、追加していく作業となります。

nodeへの参加

それでは node-2 を先ほど作成した manager node に追加します。

イメージ
スクリーンショット 2017-09-29 13.26.12.png

manager(Leader)へnode追加
$ docker swarm join --token SWMTKN-1-0ymf7p2vy09a15usvwbb6ya04hqg7b0aaupj0xp3vfy137nrhr-0blrkkwxwghkddo7hk5tkcy2y 172.31.17.88:2377
This node joined a swarm as a manager.

これで、追加されました。残りの1台も同様に追加します。

もし、 manager ではなく worker として追加したい場合は --token オプションの値を worker のにしてあげるだけでOKです。

以上で完了です。それでは確認してみましょう。

node確認
$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
71uuiqwvlcizxln4bfk3gvr4a *   node-1              Ready               Active              Leader
musl2m94jqx7gb0fa953rd43j     node-3              Ready               Active              Reachable
nwhmqq24zkvgbxlbsq8zut4vo     node-2              Ready               Active              Reachable

ここで「*」が付いているのがコマンドを実行したnodeです。つまりここでは node-1docker node ls を実行したということです。
また、 MANAGER STATUSLeader となっているのがはじめに swarm init した master となる nodeReachable となっているのが追加した _node_となります。もし、 worker として node を追加した場合は、ここの項目は blank になります。

デプロイ

クラスタが組めたので、何かデプロイしてみます。
今回は nginx のコンテナをデプロイしてみました。

デプロイ
$ docker service create --replicas 1 --name web -p 80:80 nginx
zelm5elrp6czm1mtisk942ujx

デプロイができたらサービスを確認してみます。

デプロイ確認(サービス)
$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
zelm5elrp6cz        web                 replicated          1/1                 nginx:latest        *:80->80/tcp
デプロイ確認(コンテナ)
$ docker service ps web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
mjbwdr63zfyo        web.1               nginx:latest        node1               Running             Running 3 minutes ago                       

node1 で nginx コンテナが1台 web というサービス名で起動しているのが確認できました。
それではこのサービスをコンテナ3台にスケールしてみます。

スケール
$ docker service scale web=3
web scaled to 3
スケール確認
$ docker service ps web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
mjbwdr63zfyo        web.1               nginx:latest        node1               Running             Running 4 minutes ago                         
jmm52jos2vgl        web.2               nginx:latest        node3               Running             Running 8 seconds ago                       
sbpa751k6wwa        web.3               nginx:latest        node2               Running             Running 8 seconds ago                       

各nodeに1台ずつコンテナが起動しているのが確認できました。

おわりに

最近は kubernetes が盛り上がっているみたいですが、
Swarm もそんなに利用勝手は悪くなさそうです。 compose のymlもそのまま利用できますし、どれを使うかは場合によりけり何だろうなと思います。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?