swarm集群搭建 及集群维护操作
准备3台均安装了docker的服务器 manager worker1 worker2
1.登录manager 初始化集群
[root@manager ~]# docker swarm init --advertise-addr 10.23.215.87
2.node节点加入集群 worker1 worker2登录后执行
[root@worker2 ~]# docker swarm join --token SWMTKN-1-4sazd33tdwk3b3mgzvijc8k7stpbofkkw0053zdtdgde0ls4q0-3li70azumzsmddhhtmtea1ow3 10.23.215.87:2377 This node joined a swarm as a worker.
3..登录manager查看集群信息,集群搭建完毕。
[root@manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 4tlp5w6pbuhbw1vdm5eyfgvht * manager Ready Active Leader 19.03.8 l01337gajltyxxcj4u877zzfm worker1 Ready Active 19.03.8 sfecygd6gj6vlw6luivury2bp worker2 Ready Active 19.03.8
常见操作
1.生产中需要使用多manger高可用,可以使用命令 docker node promote 将node 升级为manager. 下面可以看到worker1 worker2 随时准备接替 manger当leader(一般manger需要3个)
[root@manager ~]# docker node promote worker2 Node worker2 promoted to a manager in the swarm. [root@manager ~]# docker node promote worker1 Node worker1 promoted to a manager in the swarm.
2.如果需要将manager降级为node 可以使用命令docker node demote
[root@manager ~]# docker node demote worker1 Manager worker1 demoted in the swarm. [root@manager ~]# docker node demote worker2 Manager worker2 demoted in the swarm.
3.如果worker节点异常了,可以将节点调整为不可调度,使用命令node update --availability drain worker1 集群会将所有service里的在worker1副本进行驱离到其他的节点
1>.我先创建一个service
docker service create --name web --replicas=3 nginx
2>.查看service ,可以看到worker1上已经有一个nginx
3>.使用命令将worker1设置为不可调度,可以看到 原来在worker1上的副本已经漂移到其他节点上了,且是drain 状态
[root@manager ~]# docker node update --availability drain worker1 worker1
4.恢复worker1节点,可以使用命令docker node update --availability active worker1 但是service不会自动漂移过来。
[root@manager ~]# docker node update --availability active worker1 worker1
5.删除节点流程.首先要将节点设置为drain 状态 等待集群重新将service的副本分配到其他节点。然后使用命令删除
docker node rm worker1
如报错
Error response from daemon: rpc error: code = FailedPrecondition desc = node 91eqkew8rbf6kfkqmm5twlmq5 is not down and can't be removed 可以登录worker1 systemctl stop docker 后即可删除
6.删除的节点重新加入集群
1>.登录manager服务器查看加入集群命令docker swarm join-token manager
2>.在worker节点上先执行docker swarm leave --force (主要是这个机器已经加入过集群,需要退出来,新的节点不需要执行)
docker swarm leave --force
再接着执行刚查看加入集群的命令
docker swarm join --token SWMTKN-1-...........bw 10.23.215.87:2377
新节点需要加入,查看加入命令
docker swarm join-token manager