Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
swarm集群提供给用户管理集群内所有容器的操作接口与使用一台Docker主机基本相同。
1、节点
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
节点分为管理 (manager) 节点和工作 (worker) 节点。
管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。
工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。
来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7luF9SO-1582447613354)(https://github.com/gmg0829/Img/blob/master/dockerImg/swarm-diagram.png?raw=true)]
2、服务和任务
- 任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
- 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
- replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
- global services 每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。
来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gT9uYxLO-1582447613356)(https://github.com/gmg0829/Img/blob/master/dockerImg/services-diagram.png?raw=true)]
Swarm在scheduler节点(leader 节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.
1)Random
顾名思义,就是随机选择一个 Node 来运行容器,一般用作调试用,spread 和 binpack 策略会根据各个节点的可用的 CPU, RAM 以及正在运行的容器的数量来计算应该运行容器的节点。
2)Spread
在同等条件下,Spread 策略会选择运行容器最少的那台节点来运行新的容器,binpack 策略会选择运行容器最集中的那台机器来运行新的节点。使用 Spread 策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。
3)Binpack
Binpack 策略最大化的避免容器碎片化,就是说 binpack 策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。
- manager:192.168.124.129
- node:192.168.124.132
1、修改主机名,配置hosts文件
2、配置docker
编辑docker文件:/usr/lib/systemd/system/docker.service
修改ExecStart行为下面内容
重新加载docker配置
所有节点加上上面标记的部分,开启2375端口
3、所有节点下载swarm镜像文件
4、创建swarm并初始化
5、将node1加入到集群中
在node1下执行
6、管理节点查看集群节点状态
7、Swarm 的Web管理
浏览器访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ibiw3jB-1582447613356)(https://github.com/gmg0829/Img/blob/master/dockerImg/portainer.png?raw=true)]
1、布署服务前创建于个用于集群内不同主机之间容器通信的网络
2、创建服务(nginx为例)
3、在线动态扩容服务
4、节点故障
5、其它常用命令介绍