全自主研发Docker容器调度引擎——Newbon

背景

大家所熟知的Docker容器调度引擎包括,K8S, Swarm, Mesos和Rancher,这些调度引擎都是开源的国外引擎,各有各的特点。在同客户和圈内人士沟通中,很多人直言国内容器创业公司大多只是将各种开源组件集成在一起,同质化严重,没有核心竞争力。作为国内第一批的容器创业公司——Ghostcloud精灵云,深知国内需要在容器的诸多领域拥有真正完全可控,同时具有核心竞争力的产品。因此,容器云平台最核心的调度引擎迫切需要一个完全可控,自主的产品,在这种背景下Newbon应运而生。Newbon取自“牛犇”的谐音,意在构建一个稳定的,牢固的容器调度引擎。接下来就简单介绍一下Newbon的实现细节,并通过一系列视频进行功能展示。

组成

Newbon包含几个核心部分:

  • Api-Server : 为UI和第三方集成提供调用接口。
  • Scheduler : 负责解释定义,收集数据和执行调度。
  • DNS/ETCD : 负责服务注册,服务发现,订阅和容器主机访问。
  • Executer :负责执行Server端下发命令。
  • Monitor : 负责监控主机和容器的各种状态。
  • Heapster : 负责健康检查。
  • Calico+ : 经过二次开发的基于Calico的网络插件。
  • Nginx : 七层负载均衡器。
  • HAProxy : 四层/七层负载均衡器。
  • Keepalive : 高可用组件。

典型逻辑结构

下面是典型的逻辑结构图:

 

20170214225436

 

最上层是高可用集群,中间接负载均衡器,底层接多个应用服务,从这幅图就能看出,Newbon从设计之初就支持高可用,负载均衡和弹性伸缩,以及多服务挂载。
接下来我们重点介绍下Newbon中负责解释定义,收集数据和执行调度的核心组件Scheduler。

Scheduler功能包括

  • 解释服务定义
  • 选择合适的节点创建容器
  • 监控节点和容器运行状态
  • 服务注册和注销
  • 自动扩容和缩容
  • 灰度升级(Rolling Upgrade)

 

服务发现,服务注册和注销

在容器调度引擎中,这三个过程可以说是最核心的地方。Newbon借鉴了多个调度引擎的优点,使用了ETCD和DNS并结合控制服务器来实现以下功能:

  • 创建服务后自动创建DNS记录用于访问相关容器:
  • A记录,通过域名访问单个容器和一组容器。
  • SRV记录,记录容器提供的服务协议、端口、优先级和提供服务的IP列表。
  • 容器状态健康后注册SRV信息:
  • 当容器停止或处于不健康状态时,会注销DNS A记录和SRV信息。

自动扩容和缩容

这一部分主要通过以下方式实现:

  • Agent monitor 模块实时监测容器cpu和内存使用情况:

定义性能指标阈值和容器运行上限和下限。

  • 扩容:

当容器平均性能指标超过阈值一段时间(1分钟)后启动自动扩容,创建更多容器以达到阈值要求的90%。
当没有主机资源运行新容器时,自动申请新主机(限公有云环境)。

  • 缩容:

当一段时间(3分钟)负载持续低于阈值80%启动缩容。
优先删除新创建容器和主机,以释放资源和降低运营成本。

K8S中文社区微信公众号
分享到:更多 ()