Docker Swarm 的前世今生

2018-06-19 07:08:19 +08:00
 hansonwang99


概述

在我的《 Docker Swarm 集群初探》一文中,我们实际体验了 Docker Swarm 容器集群技术的魅力,与《 Kubernetes 实践录》一文中提到的 Kubernetes 集群技术相比,Docker Swarm 没有 Kubernetes 显得那么厚重,因此可以认为是更加轻量级的容器集群技术,这也就意味着上手更加方便快捷,使用起来也要省事很多。作为 Docker 集群技术三(或“四”)架马车之一的 Docker Swarm,它从一开始便是 Docker 官方的“亲儿子”,发展到现在也经历了很多阶段和迭代。作者在学习的过程中也了解了一点其发展历史,发现有几个概念还是挺容易混淆的,因此撰写成文,是梳理,也是总结。



初出茅庐之:经典 Swarm

早在 2014 年底,Docker 公司就设计了容器集群的方案组合:Machine + Swarm + Compose。其中 Machine 主要用于快速创建 Docker 运行环境,其支持在创建出来的节点上自动部署 Swarm,此时的 Swarm 我们称为 “经典 Swarm ”,它是一款整合跨节点网络的集群式容器服务,其利用 Docker 守护进程的 API,将多节点的计算资源进行汇总,并提供兼容 Docker 的运行 API,使用者只需要在执行 Docker 命令工具时,用--host 参数将目标设置为 Swarm 服务的 IP 和端口,即可操作整个容器集群。

当然此时的 Swarm 局限性较大,比如:

于是就有了下面的 SwarmKit 的诞生。



发展壮大之:SwarmKit

在 2016 年 2 月,Docker 公司开始了一个名叫 SwarmKit 的项目。而恰在 Docker 1.12 RC 之前的一段时间,Docker 发布了 Swarmkit,这是一个独立的、开源的容器编排项目。SwarmKit 不同于一开始的经典 Swarm,它从一开始就重新设计了一套独立的 API 和模型体系,并且采用独立的客户端命令行工具:swarmctl

和上面的经典 Swarm 模型相比,它加入了如下特性:

然而此时的 SwarmKit 并没有提供诸如服务发现、负载均衡和路由等功能。尽管如此,SwarmKit 其实已经是我们今天广泛使用的 Docker Swarm 集群技术的基石。



厚积薄发之:Swarm Mode

Swarm Mode 则更进一步,它在 Docker 1.12 版本开始为大家所周知,一个 docker swarm命令 红遍大江南北,这个所谓的 Swarm Mode 其实就是我们今天所广泛使用的 Docker Swarm 集群技术。

然而 Swarm Mode 并不是一个全新的东西,也并不是一个全新的模式,而是站在 SwarmKit 的巨人肩膀上发展起来的,是 Docker 中的一组与集群相关功能的统称而已。Docker 将 SwarmKit 的核心模块内嵌于 Docker 的后台服务之中,通过不同的命令允许使用者同时以“本节点”和“本集群”这两种视角来操作整个集群,增加了集群的管理、节点的管理、服务的管理和编排等等一系列高级特性,就像在我的《 Docker Swarm 集群初探》一文中体验的那样。

因此总结一下 Swarm Mode 就是:



对比总结

如果用一张图来表示 Docker、经典 Swarm、SwarmKit、Swarm Mode 四个概念之间的关系,则大致可以如下图所示:

正如图中所示,SwarmKit 和 Swarm Mode 重叠的部分表示的是相应的项目之间存在代码层面的互相引用或组件形式的依赖,其实 Swarm Mode 所创建的集群本质上并无异于 SwarmKit 集群。

更细致一点,我们从 SwarmKit 和 Swarm Mode 二者在一些常用命令操作上的比较来看看二者的区别和联系:

1. 创建集群

2. 往集群中添加节点

3. 查看集群节点信息

4. 创建服务

5. 服务扩容

6. 服务(镜像)升级

从命令行操作来看,Swarm Mode 其实非常类似于 SwarmKit,然而前者更加靠近 Docker 原生态圈的命令,因此更加人性化。



后记

如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:



2415 次点击
所在节点    程序员
6 条回复
artandlol
2018-06-19 07:20:51 +08:00
还是多研究研究 k8s 比较实在
sdrzlyz
2018-06-19 08:36:46 +08:00
。。。不是已经凉了?自己玩玩尚可,生产没人用啊
letv
2018-06-19 08:50:40 +08:00
桌子上是两个 21:9 的显示器?
broadliyn
2018-06-19 09:11:20 +08:00
表带不错。。。lz 是基佬。。。。。?:doge。。
mritd
2018-06-19 09:16:06 +08:00
然而我选择了 k8s
hansonwang99
2018-06-19 09:44:37 +08:00
mark

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/463960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX