..
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
新浪微博:@寻觅神迹
原文地址: https://sreeninet.wordpress.com/2016/07/14/comparing-swarm-swarmkit-and-swarm-mode/
本文系个人翻译,错漏之处请见谅。
====================================
Swarm、SwarmKit、Swarm mode 对比
Docker1.12的一个重大特性是提供了swarm mode。Docker结合swarm从1.6开始支持容器编排。
Docker1.12发布前几周,docker还开源了swarmkit,一个用于编排分布式系统的项目。
这三个项目让人颇为困惑,这篇博客中我和大家一起看下他们的相似之处以及区别。
我还会拿一个应用作为例子,来比较三者哪个更容易使用。
Docker swarm mode和swarm存在本质区别,但是却使用了swarm这个易于混淆的名字。
我觉得docker社区应该考虑换个名字。另外一点同样增加了这个混淆,native swarm会在1.12继续支持,从而提供兼容性。
这篇Blog中,我们使用“Swarm”表示老的swarm项目,“Swarmkit”表示新开源的swarmkit项目,“SwarmNext”表示docker swarm mode。
Swarm, SwarmNext and Swarmkit
下边是Swarm和SwarmNext的对比:
Swarm | SwarmNext |
---|---|
Separate from Docker Engine and can run as Container | Integrated inside Docker engine |
Needs external KV store like Consul, etcd | No need of separate external KV store |
Service model not available | Service model is available. This provides features like scaling, rolling update, service discovery, load balancing and routing mesh |
Communication not secure | Both control and data plane is secure |
Integrated with machine and compose | Not yet integrated with machine and compose as of release 1.12. Will be integrated in the upcoming releases |
下边是SwarmKit与SwarmNext的对比:
SwarmKit | SwarmNext |
---|---|
Plumbing opensource project | Swarmkit used within SwarmNext and tightly integrated with Docker Engine |
Swarmkit needs to built and run separately | Docker 1.12 comes integrated with SwarmNext |
No service discovery, load balancing and routing mesh | Service discovery, load balancing and routing mesh available |
Use swarmctl CLI | Use regular Docker CLI |
Sample Application
下边是一个非常简单的应用。该应用时一个高可用的web投票服务,可以通过client访问。
client的请求会被负载均衡到各个可用的web服务上。
应用使用overlay网络,我们将使用Swarm、SwarmNext、SwarmKit进行部署。
前提条件
本文中使用docker-machine0.8.0-rc1 ,docker1.12.0-rc3.
“smakam/myubuntu” 容器使用的是ubuntu系统,加下一些比如curl的工具来展示负载均衡。
使用Swarm进行部署
步骤:
+ 创建KV存储。这里使用consul。
+ 创建使用consul存储的docker实例。这里使用docker-machine创建。
+ 创建overlay网络。
+ 创建投票web系统的多实例以及client单实例。所有的web服务需要使用相同的网络别名,以便可以进行流量的负载均衡。
创建KV存储:
- 1
- 2
- 3
- 4
- 5
- 6
创建使用KV存储的Docker swarm 实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
创建overlay网络:
- 1
- 2
创建服务:
两个投票服务的容器,都是用相同网络别名“vote”,从而可以被作为一个服务来访问。
- 1
- 2
- 3
从client容器中访问vote web服务:
- 1
- 2
- 3
- 4
从上边可以看到,请求被均衡到了两个vote web服务。
使用SwarmNext进行部署
步骤如下:
+ 使用docker machine和1.12 RC3的docker创建两个docker实例。其中一个作为master节点,另外一个作为worker节点。
+ 创建overlay网络。
+ 基于overlay网络创建2个副本的web投票服务,1个副本的client服务。
创建两个docker实例:
- 1
- 2
设置node1为master节点:
- 1
node1同时作为woker节点运行。
设置node2为worker节点:
- 1
查看云运行的nodes:
- 1
- 2
- 3
- 4
创建overlay网络:
- 1
创建服务:
- 1
- 2
在这个例子中,本不需要把port映射到host上,但是我还是使用了。
使用docker1.12的routing mesh特性,将8080端口映射到了node1和node2上。
查看运行的服务:
- 1
- 2
- 3
- 4
从client容器连接web投票系统:
- 1
- 2
- 3
- 4
同样我们看到,client的请求被均衡到了两个web服务容器。
使用SwarmKit进行部署
步骤:
+ 使用docker-machine创建2node的cluster。Swarm集群虽然可以不适用KV存储。但是overlay网络需要KV存储。所以例子中我会使用KV存储。
+ 构建swarmkit并把二进制部署到swarm节点。
+ 创建2个node的swarm集群。
+ 创建overlay网络以及创建基于overlay网络的服务。
构建swarmkit:
这里在Go container中进行swarmkit的编译。
- 1
- 2
- 3
- 4
- 5
创建基于KV存储的Docker实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
拷贝swarmkit到node中:
- 1
- 2
- 3
- 4
- 5
- 6
创建swarm cluster:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
创建overlay网络和服务:
- 1
- 2
- 3
查看2node cluster:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
通过client容器连接web投票系统:
- 1
- 2
- 3
- 4
因为swarmkit没有负载均衡、服务发现能力,我们使用容器的IP来进行访问。
总结
SwarmNext(docker的swarm mode)相对于之前的swarm是一个重大的改进。将服务对象引入docker中,可以很容易的实现诸如
scaling、rolling update、service discovery、load balance、routing mesh的特性。
这样swarm可以在特性上更接近于kubernetes。
在1.12release中,docker支持SwarmNext和Swarm,之前将swarm用于生产环境的用户,可以进行升级。
SwarmNext目前还不能与compose、stoarge插件很好的集成,但是应该会在之后的版本增加这些能力。
从长期来说,swarm会被废弃,SwarmNext会成为docker的唯一编排方式。
将Swarmkit开源,有利于swarmkit的独立开发,以及第三方基于swarmkit开发分布式应用的编排系统。