背景
大家所熟知的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 : 高可用组件。
典型逻辑结构
下面是典型的逻辑结构图:
最上层是高可用集群,中间接负载均衡器,底层接多个应用服务,从这幅图就能看出,Newbon从设计之初就支持高可用,负载均衡和弹性伸缩,以及多服务挂载。
接下来我们重点介绍下Newbon中负责解释定义,收集数据和执行调度的核心组件Scheduler。
Scheduler功能包括
- 解释服务定义
- 选择合适的节点创建容器
- 监控节点和容器运行状态
- 服务注册和注销
- 自动扩容和缩容
- 灰度升级(Rolling Upgrade)
服务发现,服务注册和注销
在容器调度引擎中,这三个过程可以说是最核心的地方。Newbon借鉴了多个调度引擎的优点,使用了ETCD和DNS并结合控制服务器来实现以下功能:
- 创建服务后自动创建DNS记录用于访问相关容器:
- A记录,通过域名访问单个容器和一组容器。
- SRV记录,记录容器提供的服务协议、端口、优先级和提供服务的IP列表。
- 容器状态健康后注册SRV信息:
- 当容器停止或处于不健康状态时,会注销DNS A记录和SRV信息。
自动扩容和缩容
这一部分主要通过以下方式实现:
- Agent monitor 模块实时监测容器cpu和内存使用情况:
定义性能指标阈值和容器运行上限和下限。
- 扩容:
当容器平均性能指标超过阈值一段时间(1分钟)后启动自动扩容,创建更多容器以达到阈值要求的90%。
当没有主机资源运行新容器时,自动申请新主机(限公有云环境)。
- 缩容:
当一段时间(3分钟)负载持续低于阈值80%启动缩容。
优先删除新创建容器和主机,以释放资源和降低运营成本。
评论前必须登录!
注册