LoginSignup
10
6

More than 5 years have passed since last update.

docker swarmを試す(その1) 3台のmanagerを構成してみる。。

Last updated at Posted at 2016-11-24

docker swarmがちょっと前のバージョンからdocker本体に取り込まれたとのこと・・・
Kubernetesよりもこちらの方が設定が簡単なので、試してみることにしました。
まずは、Managerノードのクラスタリングを確認してみます。

環境

  • CentOS7.3(CentOS Linux release 7.3.1611を最小構成インストール、firewall停止、selinux-disabled) 3ノード
    • manager01 - 192.168.28.180(管理LAN) 192.168.100.180(サービスLAN)
    • manager02 - 192.168.28.181(管理LAN) 192.168.100.181(サービスLAN)
    • manager03 - 192.168.28.182(管理LAN) 192.168.100.182(サービスLAN)
    • worker01 - 192.168.28.183(管理LAN) 192.168.100.183(サービスLAN)
  • Docker version 1.13.0-rc7, build 48a9e53
    • dokcerは自動起動に設定してあります。

dockerのインストール

1台目のみ記載していますが、3台ともインストールします。(当然、クローンでも可能)
最新のつもりですが、rc7のようでした。

[root@manager01 ~]#  curl -fsSL https://test.docker.com/ | sh
+ sh -c 'sleep 3; yum -y -q install docker-engine'
warning: /var/cache/yum/x86_64/7/docker-testing-repo/packages/docker-engine-selinux-1.13.0-0.7.rc7.el7.centos.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
docker-engine-selinux-1.13.0-0.7.rc7.el7.centos.noarch.rpm の公開鍵がインストールされていません

Importing GPG key 0x2C52609D:
 Userid     : "Docker Release Tool (releasedocker) <docker@docker.com>"
 Fingerprint: 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d
 From       : https://yum.dockerproject.org/gpg
setsebool:  SELinux is disabled.
libsemanage.semanage_direct_install_info: Overriding docker module at lower priority 100 with module at priority 400.

(snip)
[root@manager01 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@manager01 ~]# systemctl start docker
[root@manager01 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2017-01-27 22:54:53 JST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 1065 (dockerd)
   Memory: 17.7M
   CGroup: /system.slice/docker.service
           ├─1065 /usr/bin/dockerd
           └─1071 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd -...

 1月 27 22:54:51 manager01 dockerd[1065]: time="2017-01-27T22:54:51.067403331+09:00" level=info msg="libcontainerd: new containerd process, pid: 1071"
(snip)
[root@manager01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

3台のmanagerで初期構成

1台目をmanagerでswarm initしますが、workerノードのjoinトークンは表示されますが、managerのトークンは表示されません。

[root@manager01 ~]# docker swarm init --listen-addr 0.0.0.0:2377 --advertise-addr 192.168.28.180
Swarm initialized: current node (rpt29x1yxumnj7ivl4fx68g3l) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-0dl2572g16uadcs332rvywgxiakuhj8qjy1h73wy3xbdy7sl6k-bs79rdoougdc7ry1lk8k5yuv0 \
    192.168.28.180:2377

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

ということで、manager用のjoinトークンをswarm initを実行した1台目で表示させます。

[root@manager01 ~]# docker swarm join-token manager 
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-0dl2572g16uadcs332rvywgxiakuhj8qjy1h73wy3xbdy7sl6k-3ex2di1vcarstw0m02ut476rs \
    192.168.28.180:2377

この時点では、manager01のみが参加していて、以下となっています。

[root@manager01 ~]# docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
rpt29x1yxumnj7ivl4fx68g3l *  manager01  Ready   Active        Leader

2台目、3台目をmanagerとして起動

1台目で確認したmanagerへのjoinトークンを使って、2台目、3台目を参加させます。

まずは、2台目

[root@manager02 ~]# docker swarm join \
>     --token SWMTKN-1-0dl2572g16uadcs332rvywgxiakuhj8qjy1h73wy3xbdy7sl6k-3ex2di1vcarstw0m02ut476rs \
>     192.168.28.180:2377
This node joined a swarm as a manager.

すると、以下となっています。manager02がReachableで参加しています。

[root@manager01 ~]# docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
rpt29x1yxumnj7ivl4fx68g3l *  manager01  Ready   Active        Leader
t4ri8ng3bagn8jlmpq1fx8vbq    manager02  Ready   Active        Reachable

さらに、3台目

[root@manager03 ~]# docker swarm join \
>     --token SWMTKN-1-0dl2572g16uadcs332rvywgxiakuhj8qjy1h73wy3xbdy7sl6k-3ex2di1vcarstw0m02ut476rs \
>     192.168.28.180:2377
This node joined a swarm as a manager.

すると。。。manager03もReachableで参加しています。

[root@manager01 ~]# docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
53n8pcstw7sgwgcvklj1m8u84    manager03  Ready   Active        Reachable
rpt29x1yxumnj7ivl4fx68g3l *  manager01  Ready   Active        Leader
t4ri8ng3bagn8jlmpq1fx8vbq    manager02  Ready   Active        Reachable

どうやら、3台でmanagerが構成できたようです。
managerの1台目(manager01)がLeaderになっています。

manager(Leader)を故障(ダウン)させてみる

manager01(Leader)を故障(ダウン)してみます。

[root@manager01 ~]# poweroff -nf

どうやら、manager03がLeaderへうまく昇格したようです。

[root@manager02 ~]# docker node ls
ID                           HOSTNAME   STATUS   AVAILABILITY  MANAGER STATUS
53n8pcstw7sgwgcvklj1m8u84    manager03  Ready    Active        Leader
rpt29x1yxumnj7ivl4fx68g3l    manager01  Unknown  Active        Unreachable
t4ri8ng3bagn8jlmpq1fx8vbq *  manager02  Ready    Active        Reachable

[root@manager03 ~]# docker node ls
ID                           HOSTNAME   STATUS   AVAILABILITY  MANAGER STATUS
53n8pcstw7sgwgcvklj1m8u84 *  manager03  Ready    Active        Leader
rpt29x1yxumnj7ivl4fx68g3l    manager01  Unknown  Active        Unreachable
t4ri8ng3bagn8jlmpq1fx8vbq    manager02  Ready    Active        Reachable

さらに故障を発生させてみる

さらに、manager03(Leader)を故障(ダウン)させてみます
manager02のみの構成となるはずですが、どうやら、構成ノードが1台になるとコマンドを受けつけないようです。
確かマニュアルのどこかに記載があったので、これは正しい動作かと思います。

[root@manager03 ~]# poweroff -nf

[root@manager02 ~]# docker node ls
Error response from daemon: rpc error: code = 4 desc = context deadline exceeded

ここで、manager01を再起動すると、構成ノードが1台から復帰するので、コマンドを受け付けるようになります

[root@manager02 ~]# docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
53n8pcstw7sgwgcvklj1m8u84    manager03  Ready   Active        Unreachable
rpt29x1yxumnj7ivl4fx68g3l    manager01  Down    Active        Reachable
t4ri8ng3bagn8jlmpq1fx8vbq *  manager02  Ready   Active        Leader

ということは、一端、3台で構成した後、全部停止した後、1台だけ起動してもコマンドは受け付けない??・・・・

確認してみます。

一旦、3台で正しく構成させます。

[root@manager02 ~]# docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
53n8pcstw7sgwgcvklj1m8u84    manager03  Ready   Active        Reachable
rpt29x1yxumnj7ivl4fx68g3l    manager01  Ready   Active        Reachable
t4ri8ng3bagn8jlmpq1fx8vbq *  manager02  Ready   Active        Leader

3台をシャットダウンで停止し、manager02のみを起動してみます。

[root@manager02 ~]# docker node ls
Error response from daemon: rpc error: code = 4 desc = context deadline exceeded
[root@manager02 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2017-01-27 23:28:17 JST; 24s ago
     Docs: https://docs.docker.com
 Main PID: 897 (dockerd)
   Memory: 55.4M
   CGroup: /system.slice/docker.service
           ├─897 /usr/bin/dockerd
           └─909 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --...

 1月 27 23:28:36 manager02 dockerd[897]: time="2017-01-27T23:28:36.722357627+09:00" level=info msg="6b703cf843000f40 received vote from 6b703cf843000f40 at term 46"
 1月 27 23:28:36 manager02 dockerd[897]: time="2017-01-27T23:28:36.722380099+09:00" level=info msg="6b703cf843000f40 [logterm: 37, index: 42] sent vote request to 774941a439e05ca9 at term 46"
 1月 27 23:28:36 manager02 dockerd[897]: time="2017-01-27T23:28:36.722406174+09:00" level=info msg="6b703cf843000f40 [logterm: 37, index: 42] sent vote request to 5d0a9a8ae474065d at term 46"
 1月 27 23:28:37 manager02 dockerd[897]: time="2017-01-27T23:28:37.663305003+09:00" level=error msg="Error getting nodes: rpc error: code = 4 desc = context deadline exceeded"
 1月 27 23:28:37 manager02 dockerd[897]: time="2017-01-27T23:28:37.663367503+09:00" level=error msg="Handler for GET /v1.25/nodes returned error: rpc error: code = 4 desc = contex...ine exceeded"
 1月 27 23:28:40 manager02 dockerd[897]: time="2017-01-27T23:28:40.722241813+09:00" level=info msg="6b703cf843000f40 is starting a new election at term 46"
 1月 27 23:28:40 manager02 dockerd[897]: time="2017-01-27T23:28:40.722317671+09:00" level=info msg="6b703cf843000f40 became candidate at term 47"
 1月 27 23:28:40 manager02 dockerd[897]: time="2017-01-27T23:28:40.722334987+09:00" level=info msg="6b703cf843000f40 received vote from 6b703cf843000f40 at term 47"
 1月 27 23:28:40 manager02 dockerd[897]: time="2017-01-27T23:28:40.722364236+09:00" level=info msg="6b703cf843000f40 [logterm: 37, index: 42] sent vote request to 5d0a9a8ae474065d at term 47"
 1月 27 23:28:40 manager02 dockerd[897]: time="2017-01-27T23:28:40.722390737+09:00" level=info msg="6b703cf843000f40 [logterm: 37, index: 42] sent vote request to 774941a439e05ca9 at term 47"
Hint: Some lines were ellipsized, use -l to show in full.

dockerは起動していますが、やはり、構成ノードが1台になるとコマンドを受けつけないようです。
ログがvote...がうんたら出てますので、やはり、構成ノードが足りないってことでしょうかね♪

最後の1台の場合、サービスの制御(createなど)はできないかもしませんが、確認してみます。

続く・・・

参考リンク

10
6
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
10
6