在继续介绍Nova虚拟机创建过程之前,我们来穿插一个很重要的内容,这就是Nova组件的“大脑”——Nova Scheduler(调度器)。它是我们后续分析虚拟机创建的基础。这个子服务的作用前面已经介绍过,从其名称也可以看出该子服务就是负责调度各子服务工作的。
Nova Scheduler属于RPC服务(至于什么是RPC服务可以关注我之前的文章),这篇文章我们先来分析一下Nova Scheduler的启动流程。
Nova Scheduler服务的启动脚本位于nova/bin/nova-scheduler文件
#加载配置项
CONF = cfg.CONF
CONF.import_opt('scheduler_topic','nova.scheduler.rpcapi')
if __name__ == '__main__':
config.prase_args(sys.argv) #加载控制台传入的参数
logging.setup("nova") #配置服务的日志文件
#定义Nova Scheduler服务对象
server = service.Service.create(binary='nova-scheduler',topic=CONF.scheduler_topic)
service.serve(server) #创建线程运行Nova Scheduler服务
service.wait() #启动Nova Scheduler服务线程
import_opt方法首先会加载nova.scheduler.rpcapi模块,然后再检查模块中是否定义了scheduler_topic配置项。查看该模块的代码。
rpcapi_opts = [cfg.StrOpt('scheduler_topic',
default='scheduler',
help='the topic scheduler nodes listen on'),]
可以看到nova.scheduler.rpcapi模块中定义了scheduler_topic的默认值为scheduler。
注:在Nova文件的许多