一. Scheduler的作用就是在创建实例(instance)时,为实例选择出合适的主机(host)。这个过程分两步:过滤(Fliter)和计算权值(Weight)
1. 过滤:
过滤掉不符合我们的要求,或镜像要求(比如物理节点不支持64bit,物理节点不支持Vmware EXi等)的主机,留下符合过滤算法的主机集合。
2. 计算权值
通过指定的权值计算算法,计算在某物理节点上申请这个虚机所必须的消耗cost。物理节点越不适合这个虚机,消耗cost就越大,权值Weight就越大,调度算法会选择权值最小的主机。
二. 过滤策略
Filter算法在nova-scheduler中是通过oslo.config.cfg模块从nova.conf配置文件中动态获取的,应用了Python的反射机制,在运行时刻决定初始化所选择的filter算法。
OpenStack支持多种过滤策略,均在/nova/scheduler/filters包下:
1. CoreFilter:根据CPU数过滤主机
2. RamFilter:根据指定的RAM值选择资源足够的主机
3. AvailabilityZoneFilter:返回创建虚拟机参数指定的集群内的主机
4. JsonFilter:根据JSON串指定的规则选择主机
三. 目录结构
1. /nova/scheduler/filter_scheduler.py:继承于类Scheduler,实现基于主机过滤器选取主机节点方式的调度器
2. /nova/scheduler/host_manager.py: 描述了跟调度器操作相关的主机的实现,其中,HostState类描述了从主机获取相关数据和状态的一些实现,HostManager类描述了跟调度器操作相关的一些主机管理实现
3. /nova/weights.py:实现了跟计算权值相关的方法
四. 分析调度_schedule方法
该方法对应在/nova/scheduler/filter_scheduler.py中
# 调度方法,返回一系列满足要求的主机(host)
def _schedule(self, context, request_spec, filter_properties)
1. 信息初始化
# 返回带有admin标志设置的context的版本
elevated &#