Docker Swarm的前世今生

简介:

心静只需一杯茗


概述

在我的《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模型相比,它加入了如下特性:

  • 重新设计的一套独立的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 原生态圈的命令,因此更加人性化。



后记

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



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
数据安全/隐私保护 虚拟化 Docker
Docker Swarm 集群搭建
Docker Swarm 集群搭建
|
3月前
|
存储 负载均衡 网络协议
|
3月前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
当今,容器化技术已成为IT领域的热门话题,而容器编排工具是实现容器自动化部署和管理的关键。本文将比较两种主流的容器编排工具Kubernetes和Docker Swarm,并探讨它们的优缺点,以帮助你选择最适合自己的工具。
|
3月前
|
Kubernetes 应用服务中间件 nginx
Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署
Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署
45 1
|
4月前
|
网络协议 jenkins 调度
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
128 0
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
|
3月前
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。
|
4月前
|
NoSQL 网络安全 Redis
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
51 0
|
1月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
53 0
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
44 0