基于Swarm Docker虚拟化技术的集群环境分析_20170110

一、Swarm简介
Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker CLient均可以直接与Swarm通信。
Docker Swarm 是一个 Dockerized 化的分布式应用程序的本地集群,
它是在 Machine 所提供的功能的基础上优化主机资源的利用率和容错服
务。具体来说,Docker Swarm 支持用户创建可运行 Docker Daemon 的主机
资源池,然后在资源池中运行 Docker 容器。Docker Swarm 可以管理工作
负载并维护集群状态

二、Swarm 架构介绍
Swarm 作为一个管理 Docker 集群的工具,首先需要将其部署起来,
可以单独将 Swarm 部署于一个节点。 另外,自然需要一个 Docker 集群,集
群上每一个节点均安装有 Docker。 具体的 Swarm 架构图可以参照图 1,所
有的 Docker node 都会被当成一个调度候选对象。 类似于 OpenStack 中的
compute node。 Swarm 架构中最主要的处理部分自然是 Swarm 节点,Swarm
管理的对象自然是 Docker Cluster,Docker Cluster 由多个 Docker Node 组
成,而负责给 Swarm 发送请求的是 Docker Client。

三、Swarm 调度策略(个人认为这是一个研究点即基于Docker虚拟机的调度算法)
Swarm 目前有多种调度机制来对目前的 Docker host 做排序。用户可
以选择一种策略来决定 Swarm 节点的排序。当您运行一个新的容器的时
候,Swarm 通过用户的指定的策略,经过计算后会选择最佳的节点,最终
将容器放到这个节点上。 目前 Swarm 支持调度策略包括:Spread、 binpack、
random,如果用户不指定策略,Swarm 会指定一个默认的策略:spread 来调
度计算资源。
Spread、 binpack 策略均会根据当前 Cluster 中的所有 host 的 CPU、
RAM, 以及容器的数量来决定最终把用户新的 container 放在哪个节点
上。Random 策略比较简单,它不做任何计算,不关心 CPU 和 RAM。仅仅
是随机的来选择一个节点来将新的 container 放到节点上。所以 random
策略主要被用来做 debug,简单来说,它不太适合生产环境。Spread 和
binpack 也是有一定区别的。spread 策略用最少运行中的容器数量来决
定是否将容器放在该节点上。Binpack 策略则刚好相反。所以 spread 策
略和 binpack 各有优势。 当 Cluster 中的一个节点出现了异常,那么使用
spread 策略能使您仅仅丢失少量的容器。Binpack 的优势在于,它能使比
较大的容器能放在没有使用的节点上。这样的好处在于能有效避免碎片
化。
四、Swarm 命令
Swarm 架构图可以让大家对 Swarm 有一个初步的认识,比如 Swarm
的具体工作流程:Docker Client 发送请求给 Swarm;Swarm 处理请求并发
送至相应的 Docker Node;Docker Node 执行相应的操作并返回响应。除此
之外,Swarm 的工作原理依然还不够明了。深入理解 Swarm 的工作原理,
可以先从 Swarm 提供的命令入手。Swarm 支持的命令主要有 4 个:swarm
create、 swarm manage、 swarm join、 swarm list。
(一)swarm create
Swarm 中 swarm create 命令用于创建一个集群标志,用于 Swarm 管理
Docker 集群时,Docker Node 的节点发现功能。发起该命令之后,Swarm 会
前往 Docker Hub 上内建的发现服务中获取一个全球唯一的 token,用以
唯一的标识 Swarm 管理的 Docker 集群。
(二)swarm manage
Swarm 中 swarm manage 是最为重要的管理命令。一旦 swarm manage
命令在 Swarm 节点上被触发,则说明用户需要 swarm 开始管理 Docker 集
群。从运行流程的角度来讲,swarm 经历的阶段主要有两点:启动 swarm、
接收并处理 Docker 集群管理请求。
(三)swarm join
Swarm 的 swarm join 命令用于将 Docker Node 添加至 Swarm 管理的
Docker 集群中。从这点也可以看出 swarm join 命令的执行位于 Docker
Node,因此在 Docker Node 上运行该命令,首先需要在 Docker Node 上安
装 Swarm,由于该 Swarm 只会执行 swarm join 命令,故可以将其当成
Docker Node 上用于注册的 agent 模块。
(四)swarm list
Swarm 中的 swarm list 命令用以列举 Docker 集群中的 Docker Node。
Docker Node 的信息均来源于 Swarm 节点上注册的 Docker Node。而一

Docker Node 在 Swarm 节点上注册,仅仅是注册了 Docker Node 的 IP 地址
以及 Docker 监听的端口号。 使用 swarm list 命令时,需要指定 discovery 的
类型,类型包括:token、 etcd、 file、 zk 以及。 而 swarm list 并未罗列 Docker 集
群的动态信息,比如 Docker Node 真实的运行状态,或者 Docker Node 在
Docker 集群中扮演的角色信息。
五、总结
Swarm 的架构以及命令并没有很复杂,同时也为希望管理 Docker 集
群的 Docker 爱好者降低了学习和使用门槛。俗话说得好,没有一种一劳
永逸的工具,有效的管理 Docker 集群同样也是如此。缺乏场景来谈论
Swarm 的价值,意义并不会很大。 相反,探索和挖掘 Swarm 的特点与功能,
并为 Docker 集群的管理提供一种可选的方案,是 Docker 爱好者更应该参
与的事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值