Docker发布集群工具SwarmKit

2016 年 6 月 15 日

最近 Docker 公司开源了 Docker 集群管理和容器编排工具 SwarmKit,其主要功能包括节点发现、基于 raft 算法的一致性和任务调度等。

基本概念

服务器上运行 SwarmKit 工具的 swarmd 命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个 _ 节点 _。SwarmKit 将节点分为两类:

  • 工作节点负责通过执行器运行任务。SwarmKit 的默认执行器为 Docker 容器执行器(Docker Container Executor);
  • 管理节点负责接收和响应用户的请求,将集群状态调节成最终状态。

用户可以动态调整节点的角色。

任务被组合成为服务,服务定义了任务类型和任务运行和更新的方式(如任务运行数量、启动间隔等)。

特性

服务编排

SwarmKit 在服务编排方面的特性主要有:

  • 服务状态一致性:SwarmKit 会不断对比服务期望状态和实际状态,发现二者不符时(如服务扩容、节点失效),SwarmKit 会自动将服务中的任务调度到其他节点。
  • 服务类型:目前 SwarmKit 支持两种服务类型
    • 复制型服务(Replicated Services),针对这类服务 SwarmKit 会在节点上启动期望数量的副本;
    • 全局服务(Global Services),这类服务 SwarmKit 会在所有可用几点上启动一个任务 ;
  • 配置项升级:用户可以在任何时候修改服务的一个或多个配置。当配置被修改后,SwarmKit 会协调升级服务中的所有任务,默认的升级策略是批量同时升级。目前支持的升级策略选项有:
    • 并行度:定义并行更新的任务数量 ;
    • 延迟:设置一组更新完成之后的最小等待时间。当配置升级时,SwarmKit 会重启任务,并且等待任务状态为运行中,再等待配置的延迟后,继续执行后续的更新批次 ;
  • 重启策略:用户可以定制重启的条件、延迟和最大尝试次数。SwarmKit 会检测任务状态,并按照这些配置进行重启,同时 SwarmKit 会决定是否在不同节点启动任务,避免失效节点对服务产生影响。

调度

SwarmKit 在调度功能上功能有:

  • 资源感知:SwarmKit 能够感知节点上的资源,并以此分配和执行任务。
  • 资源约束:用户可以通过约束表达式,将任务约束到符合表达式的节点上。对节点的约束条件包括节点 ID、名称和标签等。
  • 调度策略:目前 SwarmKit 实现的调度策略是在满足约束条件的前提下,尽可能的分配到负载最低的节点。

集群管理

SwarmKit 对于集群及其节点的管理支持:

  • 状态存储:SwarmKit 在内存中维护集群的状态,并能够在集群状态发生异常时迅速作出调整 ;
  • 拓扑状态管理:SwarmKit 支持通过 API 或者命令行动态修改节点角色 ;
  • 节点管理:SwarmKit API 支持用户修改节点状态。例如可以将节点状态设置为中止(Paused),以避免在该节点上创建新的任务;或者设置为枯竭(Drained)状态,除了禁止创建新任务外,当前节点上的其他任务也会被调度到其他节点上。

总结

相比于之前的 Swarm,这次发布的 SwarmKit 使用更加方便,无需再依赖外部协调软件进行服务发现。同时对容器运行进行了抽象,API 更加间接。SwarmKit 特性和其他服务编排框架如 mesos,kubernetes 等比较类似,目前 SwarmKit 还在活跃开发中,能否攻城略地,让我们拭目以待吧。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 6 月 15 日 19:005429

评论

发布
暂无评论
发现更多内容

专业级沙箱与恶意样本的自动化分析

京东智联云开发者

云计算 监控 虚拟化

数据库JDBC:PreparedStatement

大规模数据处理学习者

JDBC SQL预处理 PrepareStatement

OpenShift 4 监控技术栈解析

东风微鸣

Kubernetes Prometheus openshift 可观察性 Thanos

DDIA 读书笔记(4)多节点数据复制方案

莫黎

读书笔记

聊点缓存——Part 1

姜雨生

redis 缓存

【原创】Spring Boot集成Mybatis的玩法

田维常

spring Boot Starter

Spring Boot 如何快速实现定时任务

田维常

spring Boot Starter

想不通(关于人生的突发奇想)

干啥啥不行的赢

Scrapy中process_request返回request和None的区别

LLLibra146

Python 爬虫 python 爬虫 Scrapy

智能驾驶看湘江:中国智能网联汽车产业的“长沙样本”

脑极体

【原创】Spring Boot一口气说自动装配与案例

田维常

spring Boot Starter

一站式低延迟直播连麦解决方案

anyRTC开发者

音视频 WebRTC 直播 RTC sdk

scrapy学习之爬虫练习平台爬取

LLLibra146

爬虫 python 爬虫 Scrapy

【原创】Spring Boot 如何手写stater

田维常

spring Boot Starter

【原创】Spring Boot终极篇《上》

田维常

spring Boot Starter

架构师训练营第七周作业

邓昀垚

哭了,前阿里P8见我spring太烂,把系列合集甩在了我脸上

周老师

scrapy学习之爬虫练习平台3

LLLibra146

Python 爬虫 python 爬虫 Scrapy

scrapy学习之爬虫练习平台4

LLLibra146

Python 爬虫 python 爬虫 Scrapy

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

spring Boot Starter

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

spring Boot Starter

【原创】Spring Boot 过滤器、监听器、拦截器的使用

田维常

spring Boot Starter

YOLODet--YOLO系列网络结构图(YOLOv5,YOLOv4,PPYOLO,YOLOv3)

wuzhihao7788

学习 AI 目标追踪

Spring Boot 集成 Druid 监控数据源

田维常

spring Boot Starter

【原创】Spring Boot终极篇《下》

田维常

spring Boot Starter

YOLODet 最强PyTorch版的YOLOv5、YOLOv4、PP-YOLO、YOLOv3复现

wuzhihao7788

学习 AI 目标追踪

scrapy学习之爬虫练习平台5

LLLibra146

Python 爬虫 python 爬虫 Scrapy

scrapy学习之爬虫练习平台2

LLLibra146

Python 爬虫 python 爬虫 Scrapy

复盘逆袭之路!三个月时间深造,怒斩拼多多、字节、蚂蚁金服破50W年薪Offer(含自学路线图)

Java架构追梦

Java 学习 架构 面试 数据结构与算法

芯片破壁者(十九):显卡的战国与帝国

脑极体

Docker发布集群工具SwarmKit-InfoQ