搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
技术学习(版主发帖区)
›
云技术学习
›
Nova
›
OpenStack Nova-scheduler组件的源码解析(1)
0
1
0
分享
OpenStack Nova-scheduler组件的源码解析(1)
tntzbzc
发表于 2014-11-18 18:04:08
[显示全部楼层]
阅读模式
关闭右栏
1
31538
问题导读
1.哪个文件实现了基于随即选取主机节点的方式的调度器?
2./nova/scheduler/manager.py文件作用是什么?
3./nova/scheduler/filters/affinity_filter.py定义了那四个过滤器?
关于Nova-scheduler服务的资料已经很多,而且弄明白后其原理也是很简单的,实现选取最优目标主机实际上就是两个步骤,过滤和称重。
先来说说Nova-scheduler组件的源码结构。
1.Nova-scheduler组件的源码结构图
2.Nova-scheduler组件的源码结构解析
/nova/scheduler/chance.py
这个文件中只有一个类ChanceScheduler,继承自类Scheduler,实现了基于随即选取主机节点的方式的调度器;
/nova/scheduler/filter_scheduler.py
这个文件中也只有一个类FilterScheduler,继承自类Scheduler,实现了基于主机过滤器选取主机节点方式的调度器;
/nova/scheduler/driver.py
这个文件中最重要的就是类Scheduler,是所有调度器实现都要继承的基类;
/nova/scheduler/host_manager.py
这个文件中有两个类的实现,都是描述了跟调度器操作相关的主机的实现,其中,类HostState描述了从主机获取相关数据和状态的一些实现,类HostManager描述了跟调度器操作相关的一些主机管理实现。
/nova/scheduler/manager.py
这个文件主要实现了一个类SchedulerManager,定义了若干需要通过调度器实现的主机管理操作。
/nova/scheduler/multi.py
这个文件主要实现了一个类MultiScheduler,实现了动态地选取调度器filter_scheduler.FilterScheduler或nova.scheduler.chance.ChanceScheduler。
/nova/scheduler/rpcapi.py
这个文件主要实现了一个类SchedulerAPI,实现了通过RPC通讯架构远程调用调度器相关的主机管理方法。
/nova/scheduler/schedeler_options.py
这个文件主要实现了一个类SchedulerOptions,实现了一些json格式文件的处理和时间戳的获取等方法。
/nova/scheduler/baremetal_host_manager.py
这个文件主要实现了当前域中主机的一些管理方法。
/nova/scheduler/filters/__init__.py
这个文件主要定义了一个类BaseHostFilter,描述了一个主机过滤器实现的基类;
/nova/scheduler/filters/affinity_filter.py
这个文件中定义了四个过滤器类:
DifferentHostFilter:选择与一个集合的虚拟机不同位置的主机;
SameHostFilter:选择与一组虚拟机相同位置的主机;
SimpleCIDRAffinityFilter:选择在同一IP段内的主机;
GroupAntiAffinityFilter:选择与一个集合的虚拟机不同位置的主机,集合中的每个元素都是一个虚拟机的组;
/nova/scheduler/filters/aggregate_instance_extra_specs.py
这个文件定义了一个过滤器类:AggregateInstanceExtraSpecsFilter
返回能够建立某一类型虚拟机的主机列表;
功能:将主机所属的aggregate的metadata属性,与创建虚拟机的instance_type中的extra_specs属性作比较;
同时,在extra_specs属性中,支持一些伪操作符(nova\scheduler\filters\extra_specs_ops.py),
比如extra_specs={'mem':'>= 512'},那么host所属的aggregate的metadata={'mem':'1024'}时,就允许创建虚拟机;
/nova/scheduler/filters/aggregate_multitenancy_isolation.py
这个文件定义了一个过滤器类:AggregateMultiTenancyIsolation
实现在特定的聚集中隔离租户;
如果host在具有"filter_tenant_id"的key值的元数据的聚合中,
则仅能够在这个租户的节点上建立虚拟机实例;
如果host不在具有"filter_tenant_id"的key值的元数据的聚合中,
则能够在所有的租户的节点上建立虚拟机实例;
/nova/scheduler/filters/all_hosts_filter.py
这个文件定义了一个过滤器类:AllHostsFilter
不经过过滤,返回所有主机host;
/nova/scheduler/filters/availability_zone_filter.py
这个文件定义了一个过滤器类:AvailabilityZoneFilter
通过可用的区域来过滤主机host;
功能:保证虚拟机所属的availability_zone与host所属的availability_zone一致;
如果创建时没有指定availability_zone,那么允许;
否则就看是否与host所属aggregate的metadata['availability_zone']匹配;
/nova/scheduler/filters/compute_capabilities_filter.py
这个文件定义了一个过滤器类:ComputeCapabilitiesFilter
功能:根据host的capabilities判断是否允许创建虚拟机;
将host->capabilities与虚拟机的instance_type->extra_specs作比较,
比较方法类似于AggregateInstanceExtraSpecsFilter;
/nova/scheduler/filters/compute_filter.py
这个文件定义了一个过滤器类:ComputeFilter
功能:根据主机capabilities的状态和服务的可用性过滤;
/nova/scheduler/filters/core_filter.py
这个文件定义了一个过滤器类:CoreFilter
基于主机的CPU内核数进行过滤;
如果剩余的内核数大于建立实例需要的内核数,则返回TRUE;
功能:看host上的vcpu个数能否满足创建虚拟机的instance_type中的vcpu个数;
根据CONF.cpu_allocation_ratio(默认是16)确定host上当前的vcpus_total;
/nova/scheduler/filters/disk_filter.py
这个文件定义了一个过滤器类:DiskFilter
基于磁盘使用率的主机host过滤;
功能:看host上的disk大小能否满足创建虚拟机的instance_type中的(root_gb + ephemeral_gb);
计算disk总量时,会根据CONF.disk_allocation_ratio计算;
/nova/scheduler/filters/image_props_filter.py
这个文件定义了一个过滤器类:ImagePropertiesFilter
通过符合实例镜像属性来进行计算节点主机的过滤;
功能:看虚拟机image->properties中某些属性是否在host的capabilities->supported_instances内;
属性包括:architecture、hypervisor_type、vm_mode;
如果image->properties中没有这些属性,则通过过滤;
如果有这些属性,而host->capabilities->supported_instances没有,返回False;
/nova/scheduler/filters/io_ops_filter.py
这个文件定义了一个过滤器类:IoOpsFilter
过滤掉有过多的I/O操作的主机host;
功能:根据主机的IO负载过滤;
IO负载由host->num_io_ops表示,与CONF.max_io_ops_per_host(默认是8)比较;
/nova/scheduler/filters/isolated_hosts_filter.py
这个文件定义了一个过滤器类:IsolatedHostsFilter
根据 “image_isolated”和 “host_isolated”标志选择主机;
这可以为一些特殊的hosts保留给指定的images;
这些hosts被称作isolated,所以运行在孤立hosts上的镜像也被称作isolated;
这个调度器检查是否image_isolated标志命名在实例规定和在host中的一致;
功能:如果没有配置CONF.isolated_images,当前host不在CONF.isolated_hosts中,返回True;
如果虚拟机image_ref在CONF.isolated_images中,且host在CONF.isolated_hosts中,返回True;
其他情况返回False;
/nova/scheduler/filters/json_filter.py
这个文件定义了一个过滤器类:JsonFilter
JsonFilter过滤器的实现;
根据简单的JSON字符串指定的规则选择主机;
这个过滤提供这个机会来写复杂的查询对于hosts能力过滤;
/nova/scheduler/filters/num_instances_filter.py
这个文件定义饿了一个过滤器类:NumInstancesFilter
过滤掉已经有太多实例的主机host;
选择那些host_state.num_instances
/nova/scheduler/filters/ram_filter.py
这个文件定义了一个过滤器类:RamFilter
只返回有足够可使用的RAM主机host;
根据指定的RAM值选择资源足够的主机;
与CoreFilter类似,CONF.ram_allocation_ratio=1.5;
/nova/scheduler/filters/retry_filter.py
这个文件定义了一个过滤器类:RetryFilter
跳过已经尝试过的节点;
/nova/scheduler/filters/trusted_filter.py
这个文件定义了一个过滤器类:TrustedFilter
支持Trusted Computing Pools,根据instance_type-> extra_specs-> trust:trusted_host,校验主机是否可信;
/nova/scheduler/filters/type_filter.py
这个文件定义了一个过滤器类:TypeAffinityFilter
TypeAffinityFilter过滤器的实现,它不允许一个主机上运行多余一种类型的虚拟机;
如果该主机上存在规格不为instance_type的虚拟机,返回False,也就是保证一个主机上只允许创建相同规格的虚拟机;
/nova/scheduler/weights/__init__.py
这个文件主要定义了一个方法all_weighers,实现了选取主机称重方法的调用。
/nova/scheduler/weights/least_cost.py
这个文件实现了一个主机称重方法,即:get_least_cost_weighers;
/nova/scheduler/weights/ram.py
这个文件实现了一个主机称重类,即:RAMWeigher;
下一篇:
OpenStack Nova-scheduler组件的源码解析(2)
博客地址:
http://blog.csdn.net/gaoxingnengjisuan
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
已有(1)人评论
电梯直达
正序浏览
superyongzhe
发表于 2017-12-7 19:22:51
很细致,谢谢分享!!!!!!!!!!!!!!!!!!!!!!!!!
回复
使用道具
举报
显身卡
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
tntzbzc
高级会员
关注
90
主题
666
帖子
19
粉丝
TA的主题
kafka小知识总结
2017-2-27
BDTC2015-京东-刘海锋-大规模内存数据库JIMDB:从2014到2016
2015-12-20
2015-中国大数据技术与产业发展报告及2016 年大数据发展趋势单项调研
2015-12-20
Redis中的持久化操作【分享】
2015-12-20
Redis中的主从复制
2015-12-20
24小时热文
矩阵分析引论罗家洪(第四版)
互联网大厂年终福利曝光:看看别人家老板怎
像高手一样发言:七种常见工作场景的说话之
携程允许员工春节回乡办公2个月
数据治理实施方案
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈