概述
SwarmKit是一个分布式集群调度平台,作为docker一个新的集群调度开源项目,它借鉴了许多k8s和mesos的优秀理念,也被docker公司寄予了厚望,内嵌到了docker daemon中。实际上它可以被看做Docker Swarm的2.0版本。
现在我们就来理解一下SwarmKit的基本概念模型和架构简介:
概念模型
Service(服务)
一个Service包含完成同一项工作的一组Task,它分为
Global(全局服务模式), 需要每个node上部署一个task实例,有点像kubernetes中的daemon set,用来部署类似gluster等分布式存储和fluented日志搜集模块这种类型的基础服务
Replicated(重复服务模式), 需要按照最终用户指定的数量尽可能在不同的节点上部署task的实例
Task(任务)
作为SwarmKit中的基本调度单元, Task承担了创建docker容器,并且运行指定命令的责任(docker run)。Task一旦被分配到目标机器,它就是不可修改的(immutable),它的结果只能是running或者failed。而且上在未来,Task的工作可以更灵活和插件化。
架构综述
Cluster(集群)
一个 cluster 由一组统一配置的的装有docker引擎的节点连接起来完成计算工作
Node(节点)
Node 是集群的基本组成单元,其身份分为Manager和Worker
Manager(管理器)
Manager 负责接收用户创建的 _Service_, 并且根据 service的定义创建一组task,根据task所需分配计算资源和选择运行节点,并且将task调度到指定的节点。而manager含有以下子模块:
type Manager struct {
...
Dispatcher *dispatcher.Dispatcher
replicatedOrchestrator *orchestrator.ReplicatedOrchestrator
globalOrchestrator *orchestrator.GlobalOrchestrator
taskReaper *orchestrator.TaskReaper
scheduler *scheduler.Scheduler
allocator *allocator.Allocator
...
}
Orchestrator(编排器)
Orchestrator负责确保每个service中的task按照service定义正确的运行
Allocator(资源分配器)
Allocator主要负责分配资源,而这种资源通常为全局的,比如overlay网络的ip地址和分布式存储,目前只是实现是vip地址分配。未来一些自定义资源也可以通过Allocator来分配。
Scheduler(调度器)
Scheduler负责将Service中定义的task调度到可用的Node上
Dispatcher(分发器)
Dispatcher直接处理与所有agent的连接, 这里包含agent的注册,session的管理以及每个task的部署和状态追踪。
除此之外,SwarmKit基于Raft算法在内存中维护集群的状态一致性,在一组Manager选出一个Leader。只有Leader处理所有的请求,其它的Manager只是把请求传给leader,起到了反向代理的作用。
Agent
Agent 负责管理Node,部署Task以及追踪Task的状态,并且将Task的状态汇报给Manager。Agent包含以下子模块:
type Agent struct {
...
node *api.Node
worker Worker
...
}
api.Node(节点状态)
api.Node 负责向Manager定期汇报所在节点实际状态. 当一个节点的这实际状态和期望状态不一致时,Manager会自动将服务中的任务调度到其他节点,以保证服务的正常运行。
Worker(任务处理器)
Worker 处理以下工作:
- 部署和启动Task
- Task状态追踪和汇报
- 对于部署在本机上的task内容及状态的持久化,
SwarmKit提供了两个可执行程序:swarmd和swarmctl。swarmd部署在cluster中的每一个node上,彼此间互相通信,组成cluster;而swarmctl则用来控制整个集群。 下图可以清楚地描述SwarmKit的内部机制(该图出自于https://pbs.twimg.com/media/Ckb8EMLVAAQrxYH.jpg)
Notice 该图中的GPRC应该为GRPC
阿里云容器服务完全兼容Docker原生的编排技术,目前支持Docker 1.11正式版本。它现在的容器化服务生命周期管理的方式和新的Swarm模式很接近。当Docker 1.12稳定版发布之后,我们会很快推出对SwarmKit的支持。
想了解更多容器服务内容,请访问 (https://www.aliyun.com/product/containerservice)