程序员

docker swarm 1.12 集群

2016-08-16  本文已影响0人  _一叶_

准备

1.至少两台虚拟机(ip能够互相ping通)

2.docker版本至少1.12

3.打开必要端口

创建集群

在其中一台机器上执行docker swarm init --advertise-addr <MANAGER-IP>创建集群

$ docker swarm init --advertise-addr 192.168.190.136
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

To add a manager to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
    192.168.99.100:2377

只有有了token就很容易加入集群,token至少每6个月要更换一次,执行命令 swarm join-token --rotate来更换token。

Docker使用Raft一致性算法管理集群节点,关于Raft可参考:http://www.open-open.com/lib/view/open1436599774864.html

加入集群

在其它机器上运行加入集群的命令,该命令在创建集群时会显示

$ docker swarm join \
  --token  SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  192.168.99.100:2377

This node joined a swarm as a worker.

如果你忘记了加入命令,可以在manager节点上执行以下命令获取:

$ docker swarm join-token worker

To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

注意:并不是管理节点越多可伸缩性和规模就越大,有时候却恰恰相反,建议集群最多7个管理节点。当有3个管理节点时,最多容许失效1个管理节点;当有5个时,最多容许同时失效2个;当有n个时,最多容许失效(N-1)/2个。建议基数个管理节点。

离开集群

在要离开的节点执行(如果是manager需要加--force,否则返回错误警告):

$ docker swarm leave

Node left the swarm.

然后再在管理节点上执行命令docker node rm <NODE>,将该节点从node-list中删除。

查看节点

1. 查看集群所有节点

$ docker node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
46aqrk4e473hjbt745z53cr3t    node-5    Ready   Active        Reachable
61pi3d91s0w3b90ijw3deeb2q    node-4    Ready   Active        Reachable
a5b2m3oghd48m8eu391pefq5u    node-3    Ready   Active
e7p8btxeu3ioshyuj6lxiv6g0    node-2    Ready   Active
ehkv3bcimagdese79dn78otj5 *  node-1    Ready   Active        Leader

AVAILABILITY可用状态:

MANAGER STATUS管理者状态:

2. 查看指定节点详情

//不加--pretty返回json格式
$ docker node inspect self --pretty

ID:         ehkv3bcimagdese79dn78otj5
Hostname:       node-1
Status:
 State:         Ready
 Availability:      Active
Manager Status:
 Address:       172.17.0.2:2377
 Raft Status:       Reachable
 Leader:        Yes
Platform:
 Operating System:  linux
 Architecture:      x86_64
Resources:
 CPUs:          2
 Memory:        1.954 GiB
Plugins:
  Network:      overlay, host, bridge, overlay, null
  Volume:       local
Engine Version:     1.12.0-dev

更新节点

1. 更新节点状态

// drain, pause, active
$ docker node update --availability drain node-1

node-1

2. 添加和删除节点标签

节点标签:方便节点组织,约束服务,限制服务调度

//--label-add 参数支持<key>和<key>=<value>
$ docker node update --label-add foo --label-add bar=baz node-1

node-1

3. 提升和降级节点

必须保持基数管理节点

$ docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

$ docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

和以下命令功能相同,但更方便

docker node update --role manager node-3 node-2
docker node update --role worker node-3 node-2
上一篇 下一篇

猜你喜欢

热点阅读