背景介绍

作为360公司的云计算解决方案,随着公司规模和需求的发展,目前有16个地区机房、29个集群,每个集群有云盘型、本地磁盘型、网络增强型等计算资源池。在这样一个大规模的多云环境中,有着上千台服务器和数以万计的虚拟机,并且时

刻有虚拟机创建请求和虚拟机释放请求到达。另外业务侧有按量计费、弹性伸缩、可抢占、部署集等业务类型以及虚拟机规格包括计算型、内存型、通用型、本地HDD型、本地SSD型和GPU型。

360云计算通过三层架构实现来实现多云管理,如图所示。云计算平台面向用户,提供的性能卓越、稳定可靠、弹性扩展的IaaS级别云计算服务。用户创建云服务器时,需要选择地域和可用区、实例规格、存储(云盘或本地盘)、镜像、网络和数量,360云平台会将用户的需求下发到云管平台。奥创云管平台作为的一个接入门户可以起到资源控制,收集底层计算资源,资源调度的作用。最底层的是各个机房的集群,根据不同的业务类型,比如共享型、企业级、本地磁盘型、网络增强型(dpdk)等通过标签划分不同的计算资源池,每个机房至少一个集群。

为了满足用户不同场景的计算需求,虚拟机提供了多种类型的套餐。

面对复杂的业务关系和底层集群的资源,奥创作为底层集群的一个接入门户,可以起到资源控制和调度的作用——虚拟机的放置既要考虑不同业务类型和套餐,考虑CPU、内存、磁盘、GPU等资源是否满足,还要考虑让每个计算节点的资源得到合理的利用,提高整个云环境的资源利用率降低成本。

nova-资源调度实现

当用户发起一个创建请求时,该请求会先在nova-api中处理。nova-api会对请求进行一系列检查,包括请求是否合法,配额是否足够,是否有符合要求的网络、镜像及虚拟机类型等。当检查通过后,nova-api就会为该请求分配一个唯一的虚拟机IP,并在数据库中新建对应的项来记录虚拟机的状态。然后,nova-api会将请求发送给nova-处理。它在接收到请求之后,会为nova-创建一个对象用来包装与调度相关的所有请求资料,然后远程调用nova-服务的接口。nova-则会通过接收到的对象,首先将对象转换成对象,并将该对象发送给进行一次预筛选,然后会根据数据库中最新的系统状态做出调度决定,并告诉nova-把该请求调度到合适的计算节点上。nova-在得知调度器的决定后,会把请求发送给对应的nova-服务。

nova-调度策略主要是由和实现的,其中作为默认的调度器实现了基于主机过滤()和权值计算()的调度算法,nova.conf中的选项用于配置可用的,默认是所有nova自带的都可以用于滤操作;而则是基于随机算法来选择可用主机的简单调度引擎。

奥创资源调度实现

nova-调度提供了虚机创建时的精准资源调度功能,但其无法提供虚机套餐资源剩余、资源池转换调度、多集群调度、部署集调度、按量计费套餐资源不足时驱散可抢占等功能。为此,需要在奥创实现这些功能。其调度过程如下。

1. 首先判断image和是否在idc机房,判断可用ip是否满足创建需求,最终可用为image//可用集群的交集。

2. 判读用户套餐是否部署集类型、是否超过部署集限制梳理。部署集是一种控制虚拟机实例分布的策略,在指定部署集中创建虚拟机时,会和处于同一部署集中的其他虚拟机严格按物理服务器打散,以保障在硬件故障等异常情况下的服务高可用性。

3. 根据用户角色修改套餐的,优先调度网络增强资源池和单numa的套餐。按量计费用户会存在4种套餐,其优先级为dpdk单numa、dpdk双numa、普通单numa、普通双numa套餐,比如v.c3.large的套餐候选套餐列表是{v.c3.large..dpdk, v.c3.large.dpdk, v.c3.large., v.c3.large};弹性伸缩用户转换成单numa套餐;可抢占用户仅支持双numa套餐;对于特殊用户业务进行特殊的套餐调整,比如大数据的可抢占需求。判断机房的可抢占式实例是否超过限制,如果当前机房可抢占实例数量大于等于数量限制,则调度失败。否则遍历各个集群进一步调度。

4. 遍历机房的集群,根据带有的trait标签确定计算资源池,获取满足条件的宿主机列表,再从数据库获取计算节点信息计算的满足度:遍历候选计节点,根据cpu、、numa、、pci设备计算能创建vm的数量,最终得到每个计算节点和集群能创建虚拟机套餐的数量。

5. 按量计费的实例请求,若资源不足时,触发驱散可抢占实例的检查,发现删除可抢占能满足用户需求,则下发驱散可抢占请求,优先满足按量计费用户的需求。可抢占实例请求,如果资源不足,则返回资源不足,调度失败。

目前奥创资源调度模块运行正常,服务各个机房,提供精准的numa级别的调度服务,保证了按量计费、弹性伸缩、大数据可抢占业务正常创建虚机,在每天累计创建虚机3700台,虚机成功率保持在99%以上。

存在的问题

1. 资源碎片化问题,由于虚拟机的创建顺序不一致,因此会存在某些计算节点如果落了一些小套餐的机器后,就无法落大套餐的机器了,长此以往会导致集群剩余的资源众多,但是只能落小套餐实例,无法创建大套餐的实例的问题。

2. 云管平台不能即时同步底层计算节点资源状况,但计算节点资源发现变化时,首先上报给nova,云管平台定时触发同步nova的信息,这存在时间差,导致调度计算不准确。

后续计划

1. 开发资源动态规整功能,将剩余资源多的服务器上的虚拟机迁移到剩余资源少的服务器上,尽可能地使虚拟机利用计算节点剩余少量CPU内存资源。

2. 优先单numa套餐为用户提供高性能虚机,双numa套餐底层实现numa不均衡分布,提高计算资源利用

3. 计算节点实时同步资源信息到

更多技术好文,请您搜索“360智汇云”