基础知识
swarm是docker公司推出的一个docker容器编排工具。
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口
Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。
swarm集群搭建步骤
理论知识
结点的类型有两种:1.manager;2.worker
swarm的调度策略:
1.Random:随机选一个node去运行容器,一般做调试使用。
2.Spread:Spread策略会选择运行容器最少的那台节点来运行新的容器。该策略的优点是使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器
3.Binpack:binpack策略会选择运行容器最集中的那台机器来运行新的节点。给策略的优点是能最大化的避免容器碎片化。
默认情况下,使用的是spread调度策略。
若镜像中没有输出端口(EXPOSE),则用service去启动该镜像,则会导致容器服务正常退出。
只要worker结点的主机有一台开启了某个服务,则其余的机器不开启此服务也可以进行该服务
步骤
第一步:搭建前的环境准备
1.修改主机名(需要永久修改主机名,且集群中的每台主机都需要配置)
[root@swarm-manage ~]# hostnamectl set-hostname swarm-manage
再查看/etc/hostname文件,此时可以看到主机名被永久修改了
2.关闭防火墙和selinux服务(集群中的每台主机都要设置)
[root@swarm-manage ~]# systemctl stop firewalld.service
临时修改selinux
[root@swarm-1 ~]# setenforce 0
永久修改selinux权限
[root@swarm-1 ~]# vim /etc/sysconfig/selinux
3.配置host文件(每台主机都需要配置)
[root@swarm-1 ~]# vim /etc/hosts
内容如下:主机名和ip地址如下,其中swarm-manage是manage结点,其他的3个都是worker结点。
将给文件远程传输给其余的结点
[root@swarm-1 ~]# scp /etc/hosts root@192.168.225.133:/etc/hosts
4.下载docker服务
[root@swarm-1 ~]# yum install docker -y
5.开启docker服务
[root@swarm-1 ~]# service docker start
第二步:构建集群
1.添加管理结点:
[root@swarm-1 ~]# docker swarm init --advertise-addr 192.168.0.134
2.将其余worker结点添加进入该集群:
docker swarm join \
--token SWMTKN-1-05uj3ze006ukp1y5zp5p6j45y3oxhltlhv9lrlvyg33ehijwi1-bd5oyt6qh5ecfmrt7belq6uee \
192.168.225.134:2377
结果如下:可以看见,集群已经搭建成功
[root@swarm-manage ~]# docker node ls
注意事项/常见错误:
1.不能用hostname去修改主机名,这是临时修改的,没有写进/etc/hostname文件下,否则,集群搭建中会找不到主机名对应的主机
2.时钟要同步 ,否则与manage时钟不同步的结点是添加不了的
解决时钟同步问题
3.证书问题,如果添加结点时,时钟已经同步了,但是仍然报错误:
此时就可以按此方法解决: 解决证书问题
4.selinux要关闭