文档章节

Docker Swarm的前世今生

CodeSheep
 CodeSheep
发布于 06/19 07:10
字数 1734
阅读 1457
收藏 28

心静只需一杯茗



概述

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

注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 小心心 来订阅 ↓ ↓ ↓

CodeSheep · 程序羊



初出茅庐之:经典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模型相比,它加入了如下特性:

  • 重新设计的一套独立的API和模型体系
  • 使用了自己的CLI(swarmd命令负责管理,swarmctl命令用于控制)
  • 节点管理、服务模型更加自然,提供编排和调度服务
  • 将过去Swarm依赖的外部集群一致性存储组件Etcd的核心部分内置化

然而此时的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就是:

  • 基于Swarmkit编写
  • 支持服务模型以及服务发现、路由和负载均衡等新功能
  • 使用Docker原生态的CLI命令
  • 集成到了Docker engine中(强大的 docker swarm 命令)


对比总结

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

四者之间的关系

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

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

1. 创建集群

  • SwarmKit方式:swarmd
  • SwarmMode方式:docker swarm init

2. 往集群中添加节点

  • SwarmKit方式:swarmd --hostname worknode --join-addr [IP:端口] --join-token [Token]
  • SwarmMode方式:docker swarm join --token [token] [IP:端口]

3. 查看集群节点信息

  • SwarmKit方式:swarmctl node ls
  • SwarmMode方式:docker node ls

4. 创建服务

  • SwarmKit方式:swarmctl service create --name [服务名] --image [镜像名]
  • SwarmMode方式:docker service create --name [服务名] [镜像名]

5. 服务扩容

  • SwarmKit方式:swarmctl service update [服务名] --replicas [副本数目]
  • SwarmMode方式:docker service scale [服务名]=[副本数目]

6. 服务(镜像)升级

  • SwarmKit方式:swarmctl service update [服务名] --image [镜像名]
  • SwarmMode方式:docker service update [服务名] --image [镜像名]

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



后记

作者更多的SpringBt实践文章在此:


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



作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep,欢迎订阅 ⬇️⬇️⬇️

CodeSheep · 程序羊


© 著作权归作者所有

共有 人打赏支持
CodeSheep

CodeSheep

粉丝 166
博文 55
码字总数 78053
作品 0
南京
程序员
私信 提问
加载中

评论(5)

OSC_hzOkiS
OSC_hzOkiS
After I finished reading your article, I have a question for you.
黄图哥
黄图哥
就觉得桌面太牛逼
刘油
刘油
服务发现感觉还是etcd Consul什么的好些
CodeSheep
CodeSheep

引用来自“zhengzhx”的评论

没用过K8S,感觉docke swarm也挺强大的。

@HysenZheng 是的呢
HysenCheng
HysenCheng
没用过K8S,感觉docke swarm也挺强大的。
d4d#9 玩Docker只要浏览器就够了,PWD是一个神奇的网站

本文是d4d系列的第9篇,在这一篇中给大家介绍一个学习Docker最为快捷高效的方式,你不需要自己搭建环境,也不用担心把自己的开发环境搞乱,你需要的只是一个浏览器,就可以立即开始学习Docke...

leixu
04/28
0
0
席慕容:回 眸

前世,我频频回眸 挥别的手帕飘成一朵云 多少相思多少离愁 终成一道水痕送我远走 今生, 我寻觅前世失落的足迹 跋山涉水走进你的眼中 前世的五百次回眸 换得今生的一次擦肩而过 我用一千次回...

陌尘_9353
2017/12/24
0
0
周立功:“芯片—终端—云”生态系统

12月10日,50几位广州的Linuxer在广州心田庄园举行了Linux workshop。四大主题演讲,蜗窝大侠郭健主持。 这是周立功老师的演讲slides。 周立功老师激情演讲中: 往期精选 陈莉君教授: 回望踏...

jus3ve
2017/12/13
0
0
吴章金: Ftrace 实现原理与开发实践

12月10日,50几位广州的Linuxer在广州心田庄园举行了Linux workshop。四大主题演讲,蜗窝大侠郭健主持。 这是吴章金老师的演讲slides。 吴章金老师激情演讲中: 往期精选 陈莉君教授: 回望踏...

jus3ve
2017/12/14
0
0
宋宝华: Linux系统性能剖析的模型和方法

12月10日,50几位广州的Linuxer在广州心田庄园举行了Linux workshop。四大主题演讲,蜗窝大侠郭健主持。 这是宋宝华老师的演讲slides。 广州Linuxer workshop活动影像: 往期精选 让天堂的归...

jus3ve
2017/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
昨天
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
昨天
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
昨天
2
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
昨天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部