nova-scheduler

nova-scheduler openstack Essex
run instance 调用过程:
1。消息队列消息驱动调度

nova.scheduler.manager.SchedulerManager.run_instance

2. 调用driver.schedule_run_instance
driver 通过读取nova.conf配置来动态import获得

if not scheduler_driver:
      scheduler_driver = FLAGS.scheduler_driver
self.driver = utils.import_object(scheduler_driver)

3. 假设使用nova.scheduler.filter_scheduler
则调用

nova.scheduler.filter_scheduler.FilterScheduler.schedule_run_instance

4. 调用过滤机制

hosts = self.host_manager.filter_hosts(hosts, filter_properties)

加载host filter fn,通过nova.conf来加载

             
def _choose_host_filters(self, filters):
    if filters is None:
        filters = FLAGS.scheduler_default_filters
    if not isinstance(filters, (list, tuple)):
            filters = [filters]
             .....
             .....

执行过滤:注意下面这一段代码:如果在启动虚拟机是添加availability_zone=”zone:hostname”字段,
则openstack会强制在此主机上创建虚拟机,不执行过滤机制,如果此主机不存在,报错。如果没有
availability_zone,或availability_zone=”zone”,则执行过滤策略。返回所有合法主机,如果没有
合法主机,虚拟机创建失败,否则进行weighted_host动作,选出一台虚拟机作为创建所在主机,

force_hosts = filter_properties.get('force_hosts', [])
if force_hosts:
    if not self.host in force_hosts:
        LOG.debug(_('Host filter fails for non-forced host %(host)s'),
                {'host': self.host})
        return self.host in force_hosts
for filter_fn in filter_fns:
    if not filter_fn(self, filter_properties):
        LOG.debug(_('Host filter function %(func)s failed for '
                 '%(host)s'),{'func': repr(filter_fn),'host': self.host})
        return False

关于availability_zone转换force_hosts过程,请查看nova.compute.api.API._create_instance中

         
#nova.compute.api.API._create_instance
if availability_zone:
    availability_zone, _x, host = availability_zone.partition(':')
if not availability_zone:
    availability_zone = FLAGS.default_schedule_zone
if context.is_admin and host:
    filter_properties = {'force_hosts': [host]}
else:
    filter_properties = {}

5。 创建虚拟机到对应节点上
发消息到对应主机上:

driver.cast_to_compute_host(context, weighted_host.host_state.host,
               'run_instance', instance_uuid=instance['uuid'], **kwargs)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值