Docker Swarm集群搭建

博文大纲

1.Docker Swarm简介及集群的作用。
2.实施部署Swarm集群。

一、Docker Swarm

Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在点击这里, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

Docker Swarm集群中的角色

Swarm:作用于运行docker engine(引擎)的多个主机组成的集群。
node:每一个docker engine都是一个node(节点),分为manager和worker。
manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager node,它们会自动协调并选举出一个Leader执行编排任务。但相反,不能没有manager node。
worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个work node,不过可以将它设置为manager-only node,让它只负责编排和管理工作。
service:用来定义worker上执行的命令。

二、部署Docker Swarm
部署前准备:

Docker01Docker02Docker03
Node01Node02Node03
192.168.2.60192.168.2.50192.168.2.80

关闭防火墙、禁用selinux、三台dockerhost区别主机名、时间同步。
Docker版本必须是:v1.12版本开始。

[root@node01 ~]# ntpdate time1.aliyun.com  #与阿里云的时间同步,可以使用ntpdate 192.168.2.60与主机时间同步。

开始部署
1.初始化集群,Docker01上:

[root@node01 ~]# docker swarm init --advertise-addr 192.168.2.60 		##--advertise-addr:指定其他node通信的地址。
Swarm initialized: current node (pjortjrcrucuihbz6uphl8qnu) is now a manager.

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

    docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-41wghyxhgc8bg9ipctcmw75bx 192.168.2.60:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
##当执行完上面的命令时,会返回上面的信息,这些信息提示信息给出的是,如果其他节点需要加入此节点,需要执行的命令,直接复制,对其主机执行即可加入集群。
如果想要添加work节点运行下面的命令:
docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-41wghyxhgc8bg9ipctcmw75bx 192.168.2.60:2377
PS:这里--token:令牌,密钥,默认保存24小时。只有24小时有效期。
如果想要添加manager节点:运行下面的命令:
docker swarm join-token manager

2.两台docker02和docker03加入集群:

Docker02:
[root@node02 ~]# docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-41wghyxhgc8bg9ipctcmw75bx 192.168.2.60:2377

This node joined a swarm as a worker.

Docker03:
[root@node03 ~]# docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-41wghyxhgc8bg9ipctcmw75bx 192.168.2.60:2377

This node joined a swarm as a worker.

当其他两个节点加入成功之后,我们可以在manager node上执行docker node ls 查看节点详情:

[root@node01 ~]# docker node ls		#这条命令只有manager node可以执行,worker node不可以执行。
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjortjrcrucuihbz6uphl8qnu *   node01              Ready               Active              Leader              18.09.0
045waz9m9j9xfuk3p21nnyl17     node02              Ready               Active                                  18.09.0
jtkz4zp2tp3f9ote21ohwhmgs     node03              Ready               Active                                  18.09.0

#这里的*号代表当前所在的节点。
可以看出,node01是leader(领导者嘛)。

3.将docker02和docker03提升为manager node,然后再将02和03恢复到worker node。(怎么灵活应用)

[root@node01 ~]# docker node promote node02
[root@node01 ~]# docker node promote node03
[root@node01 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjortjrcrucuihbz6uphl8qnu *   node01              Ready               Active              Leader              18.09.0
1emp6dh2iawsgy8700fdswk5d     node02              Ready               Active              Reachable           18.09.0
39yu0s3ykz21gcphr53j7lp1y     node03              Ready               Active              Reachable           18.09.0

这时候docker02和docker03也是manager node了,也可以使用另一种方法:
首先docker02和docker03申请离开集群:

Docker02:
[root@node02 ~]# docker swarm leave 	#申请离开一个集群,之后查看节点状态会变成down,然后可以通过manager node将其删除。
Node left the swarm.

Docker03:
[root@node03 ~]# docker swarm leave 
Node left the swarm.

回到docker01的leader上,删除节点:

[root@node01 ~]# docker node rm node02
node02
[root@node01 ~]# docker node rm node03
node03

重新生成令牌:docker01上:

[root@node01 ~]# docker swarm join-token manager

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

    docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-c6ccobdctfzuit8mue3zafe60 192.168.2.60:2377

上面的信息,也是告诉我们,如果想要成为manager node,可以执行上面信息中的命令。
#docker swarm join-token [manager | worker]生成令牌,可以是manager身份或worker身份。

在docker02和docker03上执行上述命令,然后再次查看节点详情:

Docker02:
[root@node02 ~]# docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-c6ccobdctfzuit8mue3zafe60 192.168.2.60:2377

This node joined a swarm as a manager.

Docker03:
[root@node03 ~]# docker swarm join --token SWMTKN-1-4zz7hmub1du7b9xtpc57tdo9rd74dci0ly7eaj8fmyjluvurr5-c6ccobdctfzuit8mue3zafe60 192.168.2.60:2377

This node joined a swarm as a manager.

执行完成后,其他节点也可以查看节点详情了:

[root@node03 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjortjrcrucuihbz6uphl8qnu     node01              Ready               Active              Leader              18.09.0
1emp6dh2iawsgy8700fdswk5d     node02              Ready               Active              Reachable           18.09.0
39yu0s3ykz21gcphr53j7lp1y *   node03              Ready               Active              Reachable           18.09.0

恢复docker02和docker03为work:
直接在leader(docker01)上执行:

[root@node01 ~]# docker node demote node02

Manager node02 demoted in the swarm.

[root@node01 ~]# docker node demote node03

Manager node03 demoted in the swarm.

查看节点详情:

[root@node01 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
pjortjrcrucuihbz6uphl8qnu *   node01              Ready               Active              Leader              18.09.0
1emp6dh2iawsgy8700fdswk5d     node02              Ready               Active                                  18.09.0
39yu0s3ykz21gcphr53j7lp1y     node03              Ready               Active                                  18.09.0

当然也可以使用生成令牌的方法降级为work。(这里就不再演示了)

4.部署docker swarm集群网络:
overlay:覆盖型网络。

[root@node01 ~]# docker network create -d overlay --attachable docker

#--attachable:这个参数必须要加,否则不能用于容器。
在创建网络的时候,我们并没有部署一个存储服务,比如consul,那是因为docker swarm自带存储。

5.部署一个图形化webUI界面。

[root@node01 ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
dockersamples/visualizer   latest              f6411ebd974c        11 months ago       166MB
#镜像可以通过docker下载镜像。

运行图形化webUI界面容器:

[root@node01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.2.60 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer

然后可以通过浏览器访问验证:IP:8080
在这里插入图片描述
这样就可以很清楚的看清节点的信息及状态。
如果访问不到网页,需要开启路由转发,执行下面两条命令:

echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p

6.创建services:

[root@node01 ~]# docker service create --replicas 5 --network docker  --name web1 -p 80 nginx:latest

#--replicas:副本数量。
大概可以理解为:一个副本等于一个容器。

查看service:

[root@node01 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
j0a5resb13r6        web1                replicated          5/5                 nginx:latest        *:30003->80/tcp

回到网页查看详情:
在这里插入图片描述
设置manager node不参加工作:

[root@node01 ~]# docker node update node01 --availability drain 
node01

再次回到网页查看:
在这里插入图片描述
查看service信息:

[root@node01 ~]# docker service ps web1

当然还可以增加容器的数量和减少容器的数量:

增加容器:
[root@node01 ~]# docker service scale web1=8

切换网页查看:
在这里插入图片描述

减少容器:
[root@node01 ~]# docker service scale web1=3

在这里插入图片描述
总结:
Docker Swarm基础命令总结:

离开集群:
docker swarm leave

删除节点:
docker node rm node02			#这里注意,只有申请离开集群的node才可以删除。

生成令牌,可以是manager身份或worker身份:
docker swarm join-token [manager | worker]

降级为work与升级为manager:
docker node demote(降级):将swarm节点的manager降级为work
docker node promote(升级):将swarm节点的work升级为manager

Service基础命令:

查看service列表:
docker service ls

查看service信息:
docker service ps xxx

增加容器与减少容器:
docker service scale web1=8
docker service scale web1=3			#等号后接容器的数量。

设置manager node不参加工作:

docker node update node01 --availability drain 
可以设置三个参数:
active"|"pause"|"drain		#活跃”|“暂停”|“不工作

本博文结束,感谢观看,记得点个赞,谢谢!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十一ღ.

你的鼓励就是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值