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 原生态圈的命令,因此更加人性化。
后记
如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:
- Docker容器可视化监控中心搭建
- 利用ELK搭建Docker容器化应用日志中心
- 利用K8S技术栈打造个人私有云系列连载文章
- Docker容器跨主机通信
- Spring Boot应用监控实战
- RPC框架实践之:Google gRPC
- RPC框架实践之:Apache Thrift
- 微服务调用链追踪中心搭建
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Unity之浅析 Entity Component System (ECS)
首先放出ECS官方文档 随着目前游戏对CPU性能要求的不断提升,单核高频的CPU对我们的帮助越来越有限。所以ECS(一种面向数据编程)多核心工作的方式也是大势所趋。 笔者对ECS的浅显理解就是 Entity 传统组件的集合,代替了GameObject的位置 Component 纯数据,不含有其他逻辑行为。;例如:旋转速度,缩放大小之类的 System 业务逻辑,根据组件的集合(Enitites)和纯数据(Components)编写对应的逻辑 下面是环境配置,笔者使用的版本为Unity 2018.2.0b8 (64-bit) 目前的ECS分为两种 Pure ECS 与 HyBridECS 区别主要就是Pure版的不能使用GameObjects 和 MonoBehaviours 下面的示例用的是Hybrid版本 工程文件下载 下载安装后把.Net版本换成4.6 然后安装对应的Packages包,这是一个unity的新功能,以后安装插件会更容易管理 拖拽出对应的Entity Debugge面板 在两个对应的模型上添加两个脚本 GameObjectEntity(Unity自带脚本,没有这个EC...
- 下一篇
湖北阿里云服务中心分享如何选择云服务器配置?
大家在选择阿里云服务器的时候知道他的配置应该怎么选择吗?怎么样的配置又是最合适的呢?下面我们就来跟随湖北阿里云授权服务中心武汉捷讯信息技术有限公司学习一下吧。 节点选择 现在阿里云ecs服务器都是采用BGP多线机房,品质差不多,仅仅只是位置不同而已,目前阿里云ECS服务器国内默认华东、华北、华南三个地域。 如上图所示,阿里云节点地区所对应的城市如下,华北地区:北京,天津,河北,山西,内蒙古;华东地区:上海,江苏,浙江,山东,安徽,华南地区:广东,广西,海南,福建。比如说如果你网站访问者大部分来自华南,那就可以选择广东、海南等。否则就选择别的区域,如果没有自己上方没有自己所在的地区 那么我们就近选择节点,丝毫不影响访问速度。 阿里云服务器ECS实例选择 实例选择其实就是CPU和内存以及规格的选择,加上场景配置的选择。这个需要根据用户对服务器规格的要求以及应用场景的需要来选择。如果有不清楚的地方,建议向相关的技术人员咨询。武汉捷讯信息技术有限公司是阿里云湖北区域授权服务商,欢迎大家咨询阿里云配置相关技术问题,咨询热线:027-87498031 3.阿里云ECS服务器镜像操作系统选择问题 这...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19