在我的《 Docker Swarm 集群初探》一文中,我们实际体验了 Docker Swarm 容器集群技术的魅力,与《 Kubernetes 实践录》一文中提到的 Kubernetes 集群技术相比,Docker Swarm 没有 Kubernetes 显得那么厚重,因此可以认为是更加轻量级的容器集群技术,这也就意味着上手更加方便快捷,使用起来也要省事很多。作为 Docker 集群技术三(或“四”)架马车之一的 Docker Swarm,它从一开始便是 Docker 官方的“亲儿子”,发展到现在也经历了很多阶段和迭代。作者在学习的过程中也了解了一点其发展历史,发现有几个概念还是挺容易混淆的,因此撰写成文,是梳理,也是总结。
早在 2014 年底,Docker 公司就设计了容器集群的方案组合:Machine + Swarm + Compose。其中 Machine 主要用于快速创建 Docker 运行环境,其支持在创建出来的节点上自动部署 Swarm,此时的 Swarm 我们称为 “经典 Swarm ”,它是一款整合跨节点网络的集群式容器服务,其利用 Docker 守护进程的 API,将多节点的计算资源进行汇总,并提供兼容 Docker 的运行 API,使用者只需要在执行 Docker 命令工具时,用--host 参数将目标设置为 Swarm 服务的 IP 和端口,即可操作整个容器集群。
当然此时的 Swarm 局限性较大,比如:
于是就有了下面的 SwarmKit 的诞生。
在 2016 年 2 月,Docker 公司开始了一个名叫 SwarmKit 的项目。而恰在 Docker 1.12 RC 之前的一段时间,Docker 发布了 Swarmkit,这是一个独立的、开源的容器编排项目。SwarmKit 不同于一开始的经典 Swarm,它从一开始就重新设计了一套独立的 API 和模型体系,并且采用独立的客户端命令行工具:swarmctl
和上面的经典 Swarm 模型相比,它加入了如下特性:
swarmd
命令负责管理,swarmctl
命令用于控制)然而此时的 SwarmKit 并没有提供诸如服务发现、负载均衡和路由等功能。尽管如此,SwarmKit 其实已经是我们今天广泛使用的 Docker Swarm 集群技术的基石。
Swarm Mode 则更进一步,它在 Docker 1.12 版本开始为大家所周知,一个 docker swarm
命令 红遍大江南北,这个所谓的 Swarm Mode 其实就是我们今天所广泛使用的 Docker Swarm 集群技术。
然而 Swarm Mode 并不是一个全新的东西,也并不是一个全新的模式,而是站在 SwarmKit 的巨人肩膀上发展起来的,是 Docker 中的一组与集群相关功能的统称而已。Docker 将 SwarmKit 的核心模块内嵌于 Docker 的后台服务之中,通过不同的命令允许使用者同时以“本节点”和“本集群”这两种视角来操作整个集群,增加了集群的管理、节点的管理、服务的管理和编排等等一系列高级特性,就像在我的《 Docker Swarm 集群初探》一文中体验的那样。
因此总结一下 Swarm Mode 就是:
docker swarm
命令)如果用一张图来表示 Docker、经典 Swarm、SwarmKit、Swarm Mode 四个概念之间的关系,则大致可以如下图所示:
正如图中所示,SwarmKit 和 Swarm Mode 重叠的部分表示的是相应的项目之间存在代码层面的互相引用或组件形式的依赖,其实 Swarm Mode 所创建的集群本质上并无异于 SwarmKit 集群。
更细致一点,我们从 SwarmKit 和 Swarm Mode 二者在一些常用命令操作上的比较来看看二者的区别和联系:
1. 创建集群
swarmd
docker swarm init
2. 往集群中添加节点
swarmd --hostname worknode --join-addr [IP:端口] --join-token [Token]
docker swarm join --token [token] [IP:端口]
3. 查看集群节点信息
swarmctl node ls
docker node ls
4. 创建服务
swarmctl service create --name [服务名] --image [镜像名]
docker service create --name [服务名] [镜像名]
5. 服务扩容
swarmctl service update [服务名] --replicas [副本数目]
docker service scale [服务名]=[副本数目]
6. 服务(镜像)升级
swarmctl service update [服务名] --image [镜像名]
docker service update [服务名] --image [镜像名]
从命令行操作来看,Swarm Mode 其实非常类似于 SwarmKit,然而前者更加靠近 Docker 原生态圈的命令,因此更加人性化。
如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:
1
artandlol 2018-06-19 07:20:51 +08:00 via iPhone
还是多研究研究 k8s 比较实在
|
2
sdrzlyz 2018-06-19 08:36:46 +08:00 via Android
。。。不是已经凉了?自己玩玩尚可,生产没人用啊
|
3
letv 2018-06-19 08:50:40 +08:00 via Android
桌子上是两个 21:9 的显示器?
|
4
broadliyn 2018-06-19 09:11:20 +08:00
表带不错。。。lz 是基佬。。。。。?:doge。。
|
5
mritd 2018-06-19 09:16:06 +08:00 via iPhone
然而我选择了 k8s
|
6
hansonwang99 OP mark
|