环境说明
wulaoer.org节点名master
slave备用节点
node节点
节点下线
上个swarm集群搭建已经熟悉了,但是会发现一个问题就是slave节点查看不了集群的状态。这是因为swarm把所有的状态都集中在swarm中,对于集群的操作也只有在master中操作。在swarm集中中没有自动删除的操作。比如下面的集群中有几个节点已经关闭了,但是集群不会自动让它删除掉。
[root@wulaoer.org ~]# docker node ls #查看所有节点 ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS k6ix0xulqcaaqhv0bcj8tisni Down Active 43qcjj96pacpzs4pgb9403uln slave Down Active u3jy3y5ug87nydm0a8dv1vnc6 node Down Active 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader
slave服务已经down了,还在集群中呢,如果想删除需要手动操作,先在集群中去掉。
[root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS k6ix0xulqcaaqhv0bcj8tisni Down Active 43qcjj96pacpzs4pgb9403uln slave Down Active u3jy3y5ug87nydm0a8dv1vnc6 node Down Active 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader [root@wulaoer.org ~]# docker node update --availability drain node node [root@wulaoer.org ~]# docker node update --availability drain k6ix0xulqcaaqhv0bcj8tisni #使用了ID k6ix0xulqcaaqhv0bcj8tisni [root@wulaoer.org ~]# docker node update --availability drain 43qcjj96pacpzs4pgb9403uln 43qcjj96pacpzs4pgb9403uln [root@wulaoer.org ~]# docker node update --availability drain d9y1htqapmcomxh3nni4ezyqu d9y1htqapmcomxh3nni4ezyqu [root@wulaoer.org ~]# docker node update --availability drain u3jy3y5ug87nydm0a8dv1vnc6 u3jy3y5ug87nydm0a8dv1vnc6 [root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS k6ix0xulqcaaqhv0bcj8tisni Down Drain 43qcjj96pacpzs4pgb9403uln slave Down Drain u3jy3y5ug87nydm0a8dv1vnc6 node Down Drain 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader
在swarm集群中,node的acailability状态可以为active或drain,active可以接受manager节点的任务,drain不能接收,也就是下线。前面状态已经Down了,后面还接受manager的任务,那处理的请求都是错误的。这里注意下线可以使用HOSTNAME也可以使用ID,使用HOSTNAME时如果一个服务上有两个节点就会找不到,这时就需要使用ID删除。
删除节点
节点已经下线了,我们就删除这些不需要的服务,然后重新加入集群中,记住一定要先下线后删除,或者状态Down的时候直接删除。
[root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS k6ix0xulqcaaqhv0bcj8tisni Down Drain 43qcjj96pacpzs4pgb9403uln slave Down Drain u3jy3y5ug87nydm0a8dv1vnc6 node Down Drain 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader [root@wulaoer.org ~]# docker node rm k6ix0xulqcaaqhv0bcj8tisni k6ix0xulqcaaqhv0bcj8tisni [root@wulaoer.org ~]# docker node rm 43qcjj96pacpzs4pgb9403uln 43qcjj96pacpzs4pgb9403uln [root@wulaoer.org ~]# docker node rm d9y1htqapmcomxh3nni4ezyqu d9y1htqapmcomxh3nni4ezyqu [root@wulaoer.org ~]# docker node rm u3jy3y5ug87nydm0a8dv1vnc6 u3jy3y5ug87nydm0a8dv1vnc6 [root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader
现在只有一个master节点了,我在把其他节点加到swarm集群中,这时需要master提供一个token,只有token才能加入到集群中,注意:网络要同,端口开放,端口号就是安装的时候指定的端口号。master生成一个集群token,在master节点上退出集群不能在用这个命令加入集群,如果有问题可以重启docker,节点退出集群可以加入master就只有使用备用节点加入了,不能直接进入。
[root@wulaoer.org ~]# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2lkmd746a5tmadwaz7oflows917xx4as9vd7k3bqdc4h6c45jj-15eqv433gcx3q2xvuzl0jr31x 10.211.55.144:2377
然后根据这个token加入到集群中,下面使用slave上执行上面的命令加入到集群中。
[root@node ~]# docker swarm join --token SWMTKN-1-2lkmd746a5tmadwaz7oflows917xx4as9vd7k3bqdc4h6c45jj-15eqv433gcx3q2xvuzl0jr31x 10.211.55.144:2377 This node joined a swarm as a worker. [root@slave ~]# docker swarm join --token SWMTKN-1-2lkmd746a5tmadwaz7oflows917xx4as9vd7k3bqdc4h6c45jj-15eqv433gcx3q2xvuzl0jr31x 10.211.55.144:2377 This node joined a swarm as a worker. [root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS kbmc6jjkjiddihs0vus6s8pcg slave Ready Active lsyr5gbm5xdxaxvy338gfdctp node Ready Active 36ye417p5cjq8ungest0czppd * wulaoer.org Ready Active Leader
这时所有节点都已经加入到集群中,不过这里注意如果加入集群出现下面的报错
[root@slave ~]# docker swarm join --token SWMTKN-1-2lkmd746a5tmadwaz7oflows917xx4as9vd7k3bqdc4h6c45jj-15eqv433gcx3q2xvuzl0jr31x 10.211.55.144:2377 Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable
这是matser节点的防火墙没有关闭,如果是线上可以开启端口即可。
增加master节点
我们上面只有一个master节点,但是如果master节点出现问题,整个如何就不可能使用了。我们需要增加一个备用的master,一旦正在运行的master节点出现问题,备用master顶起原master的任务。增加备用master需要先在master上增加创建一个master的token。
[root@wulaoer.org ~]# docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-3s1u7tzxbznhq1iimj9dpxrihqomsdjjmym3260vnss3s2yy87-9hf5ij4jsnsmwk0v7ai1a9kxr 10.211.55.144:2377
然后在另一个没有节点的服务上直接加入集群。
[root@slave ~]# docker swarm join --token SWMTKN-1-3s1u7tzxbznhq1iimj9dpxrihqomsdjjmym3260vnss3s2yy87-9hf5ij4jsnsmwk0v7ai1a9kxr 10.211.55.144:2377 This node joined a swarm as a manager.
如果已经加入到集群的节点想上升到备用节点可以在master节点上
[root@wulaoer.org ~]# docker node promote node Node node promoted to a manager in the swarm. [root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j75ti7ezbco0l8x0fedxziz7c slave Ready Active Reachable 18.03.1-ce y8d967fnrw6n5duw9q15pt08q node Ready Active Reachable 18.03.1-ce 7mvsuiqnl3bin46iqo5ja5dsz * wulaoer.org Ready Active Leader 18.03.1-ce
这里有一个原master的状态为Leader的节点,增加了两个Reachable节点,我们尝试一下把原master服务的docker关闭掉,看看备用master是否能够自动跳转到leader的状态。
[root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j75ti7ezbco0l8x0fedxziz7c slave Ready Active Reachable 18.03.1-ce y8d967fnrw6n5duw9q15pt08q node Ready Active Reachable 18.03.1-ce 7mvsuiqnl3bin46iqo5ja5dsz * wulaoer.org Ready Active Leader 18.03.1-ce [root@wulaoer.org ~]# systemctl stop docker
我直接把master的节点docker关闭了,看看另外两个节点已经接管了Leader的任务。
[root@slave ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j75ti7ezbco0l8x0fedxziz7c * slave Ready Active Leader 18.03.1-ce y8d967fnrw6n5duw9q15pt08q node Ready Active Reachable 18.03.1-ce 7mvsuiqnl3bin46iqo5ja5dsz wulaoer.org Unknown Active Unreachable 18.03.1-ce
原Reachable已经变成Leader了,这里建议Reachable节点一定要是个奇数,如果只有一台不能通过Raft的机制进行选择。如果条件不允许只有一台,只有重启docker,不要退出集群,切记。
如果不重启docker退出swarm集群,会出现多个managers的报错,如下:
[root@slave ~]# docker node ls Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.
有人说这个报错是版本的一个bug,我原来是安装的是17.12.1版本的,现在换了18.03.1版本的还是一样。这个应该和版本没有关系。注意,这里重启docker不能使用restart,必须使用stop停掉之后再start,不然Leader转移不过去。
退出swarm集群
如果集群的节点不想使用了,想退出集群的节点,需要先下线,在退出集群的节点。然后在master节点上删除退出集群的节点。看下面的例子:
[root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j75ti7ezbco0l8x0fedxziz7c slave Down Active Unreachable 18.03.1-ce y8d967fnrw6n5duw9q15pt08q node Ready Active Reachable 18.03.1-ce 7mvsuiqnl3bin46iqo5ja5dsz * wulaoer.org Ready Active Leader 18.03.1-ce [root@wulaoer.org ~]# docker node demote j75ti7ezbco0l8x0fedxziz7c Manager j75ti7ezbco0l8x0fedxziz7c demoted in the swarm. [root@wulaoer.org ~]# docker node rm j75ti7ezbco0l8x0fedxziz7c j75ti7ezbco0l8x0fedxziz7c [root@wulaoer.org ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION y8d967fnrw6n5duw9q15pt08q node Ready Active Reachable 18.03.1-ce 7mvsuiqnl3bin46iqo5ja5dsz * wulaoer.org Ready Active Leader 18.03.1-ce
我先在slave节点的docker关闭了,然后在master节点上降级Reachable节点,然后直接删除即可。
swarm集群token
如果我们的集群运行一段时间需要在加个节点,而且以前创建的token忘记了。那就查看token,然后在没有加入过swarm集群的节点上运行,或者删除的节点强制退出集群在加入集群。
[root@wulaoer.org ~]# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-0ij78tc6m2x1md1v5pwkgb3anhtseoeftupie4rtzpdslc6oik-8fg3j7elzekbwz91jmhupbxrc 10.211.55.144:2377 [root@slave ~]# docker swarm leave --force #强制退出集群 Node left the swarm. [root@slave ~]# docker swarm join --token SWMTKN-1-0ij78tc6m2x1md1v5pwkgb3anhtseoeftupie4rtzpdslc6oik-8fg3j7elzekbwz91jmhupbxrc 10.211.55.144:2377 This node joined a swarm as a worker.
也可以只打印token
[root@wulaoer.org ~]# docker swarm join-token -q worker SWMTKN-1-0ij78tc6m2x1md1v5pwkgb3anhtseoeftupie4rtzpdslc6oik-8h7a4y1v118jpf2krx0wdqh1g
或者重置token
[root@wulaoer.org ~]# docker swarm join-token --rotate worker Successfully rotated worker join token. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-0ij78tc6m2x1md1v5pwkgb3anhtseoeftupie4rtzpdslc6oik-55h2ehs3am5v4qmuhon9j873e 10.211.55.144:2377
以上是针对swarm集群的操作方法,下个章节学习在swarm集群上部署应用的操作方法,期待一下吧。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏