欢迎来到虚拟机的世界,如果我们将Openstack环境里运行在各个无力节点上的各种服务看座生命体,而不是死的指令集合,那么就是一个虚拟机的世界。

Openstack的计算组件,也就是Nova项目实现了虚拟机世界的抽象,控制者一个个虚拟机的状态变迁与生老病死,管理者它们的资源分配。

Nova的体系结构

Nova主要由API、Compute、Conductor、Scheduler四个核心服务组成,它们之前通过AMQP消息队列进行通信

API上进去Nova的HTTP借口,Compute和VMM(虚拟机管理器)交互来进行虚拟机并管理虚拟机的生命周期,Scheduler从可用池中选择最合适的计算节点来创建新的虚拟机实例,Conductor为数据库的访问提供一层安全保障,Scheduler只是读取数据库的内容,API则由Policy保护,因此它们都可以直接操作数据库,但是社区还是希望涉及数据库的操作都通过Conductor

以创建虚拟机为例,首先用户执行novaclient提供的用于创建虚拟机的命令,API服务间听到novaclient发送的HTTP请求并且将它转换成AMQP消息,通过消息队列调用Conductor服务,Conductor服务通过消息队列接受到任务之后,做一些准备工作(例如汇总虚拟机参数等),再通过消息队列告诉Scheduler去选择一个满足虚拟机创建要求的主机,Conductor拿到Scheduler提供的目标主机之后,会要求Compute服务创建虚拟机

并不是所有的业务流程都像虚拟机那样需要所有的服务,比如删除虚拟机时,不需要Scheduler服务,API通过消息队列告诉Compute删除指定虚拟机,Computed通过Conductor更新数据库即完成业务的流程

1.Nova源码目录结构

看到这里的想法是Openstack从入门到劝退

在一个城市里面寻找一个地方 最快的方法是打开地图,所以对新人来说,这里面最重要的文件是setup.cfg,作为Openstack的源码地图,setup.cfg文件就是浏览代码时候最为依仗的文件,它引导我们去认识一个新的项目,并了解它的代码结构

 [entry_points]
console_scripts =
nova-api = nova.cmd.api:main
nova-api-metadata = nova.cmd.api_metadata:main
nova-api-os-compute = nova.cmd.api_os_compute:main
nova-compute = nova.cmd.compute:main
nova-conductor = nova.cmd.conductor:main
nova-manage = nova.cmd.manage:main
nova-novncproxy = nova.cmd.novncproxy:main
nova-policy = nova.cmd.policy:main
nova-rootwrap = oslo_rootwrap.cmd:main
nova-rootwrap-daemon = oslo_rootwrap.cmd:daemon
nova-scheduler = nova.cmd.scheduler:main
nova-serialproxy = nova.cmd.serialproxy:main
nova-spicehtml5proxy = nova.cmd.spicehtml5proxy:main
nova-status = nova.cmd.status:main

每个setup.cfg文件的"entry_points"中都有会个比较特殊的组,或者说namespace。

console.scripts中的文件在部署的时候会生产执行文件,它也是入口文件

 # nova/compute/rpcapi.py
@profiler.trace_cls("rpc")
class ComputeAPI(object):
def live_migration(self, ctxt, instance, dest, block_migration, host,
migration, migrate_data=None):
version = '5.0'
client = self.router.client(ctxt)
# 获取目标机的RPC Client
cctxt = client.prepare(server=host, version=version)
# RPC cast主要用于异步任务,比如创建虚拟机,在创建过程可能需要很长时间
# 如果使用RPC call会等待 显然对性能有很大影响,csta()第二个参数是
# RPC调用对函数名,后面的参数将作为参数被传入该函数
cctxt.cast(ctxt, 'live_migration', instance=instance,
dest=dest, block_migration=block_migration,
migrate_data=migrate_data, migration=migration)

类ComputedAPI中的函数即为Compute服务提供给RPC调用的接口,其他服务调用前需要使用这个模块,比如

 # nova/conductor/tasks/live_migrate.py
class LiveMigrationTask(base.TaskBase):
def __init__(self, context, instance, destination,
block_migration, disk_over_commit, migration, compute_rpcapi,
servicegroup_api, query_client, report_client,
request_spec=None):
super(LiveMigrationTask, self).__init__(context, instance)
...
self.compute_rpcapi = compute_rpcapi
def _execute(self):
....
return self.compute_rpcapi.live_migration(self.context,
host=self.source,
instance=self.instance,
dest=self.destination,
block_migration=self.block_migration,
migration=self.migration,
migrate_data=self.migrate_data)

类ComputeAPI只是暴露给其他服务的RPC调用接口,Compute服务的RPC Server接受RPC请求后,真正完成任务的是nova.compute.manager

# nova/compute/manager.py
class ComputeManager(manager.Manager):
"""Manages the running instances from creation to destruction.""" target = messaging.Target(version='5.10')
def _do_live_migration(self, context, dest, instance, block_migration,
migration, migrate_data):
...

从ComputeAPI到ComputeManager的过程即是RPC调用过程

Openstack计算Nova组件的更多相关文章

  1. OpenStack 的Nova组件详解

    Open Stack Compute Infrastructure (Nova) Nova是OpenStack云中的计算组织控制器.支持OpenStack云中实例(instances)生命周期的所有活 ...

  2. openstack中Nova组件简解

    一.Nova组件概述 计算节点通过Nova Computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信. Nova位于Openstack架 ...

  3. openstack中Nova组件images的全部python API 汇总

    感谢朋友支持本博客.欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  4. openstack中nova组件Hypervisors、Floating_ips的全部python API 汇总

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  5. openstack中Nova组件Networks的全部python API 汇总

    感谢朋友支持本博客.欢迎共同探讨交流.因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  6. OpenStack—nova组件计算服务

    nova介绍: Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. 用 ...

  7. Nova 组件详解 - 每天5分钟玩转 OpenStack(26)

    本节开始,我们将详细讲解 Nova 的各个子服务. 前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个.今天先讨论 nova-api 和 nova-cond ...

  8. 五、OpenStack—nova组件介绍与安装

    一.nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...

  9. OpenStack 计算服务 Nova介绍和控制节点部署(七)

    介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点nova-c ...

随机推荐

  1. ES6-Set与Map数据结构

    Set 实例的属性和方法 Set类似与数组,但是成员值唯一没有重复! let arr = [3, 5, 2, 2, 5, 5]; let unique = [...new Set(arr)]; // ...

  2. Algorithms第3章及少量习题

    第三章的主要思想就是DFS.讲了图上的DFS操作,然后讲了各种应用.这章默认图都是用邻接矩阵存的. procedure explore(G, v) Input: G = (V, E) is a gra ...

  3. GCD实现多个定时器,完美避过NSTimer的三大缺陷(RunLoop、Thread、Leaks)

    定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时.支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NS ...

  4. 《自动化平台测试开发-Python测试开发实战》第2次印刷

    书籍货源比较紧张.紧张啊,如此短的时间,已经第2次印刷.第2次印刷. 第2次印刷. 同时该书已确认与台湾出版社合作翻译成繁体版,甚至有可能与国外出版社合作翻译成英文版. 2018年7月 第1次印刷 2 ...

  5. The difference between applicationContext.xml in Spring and xxx-servlet.xml in SpringMVC

    一直搞不明白两者的区别.如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 因为 ...

  6. 量化投资学习笔记31——《Python机器学习应用》课程笔记05

    用分类算法进行上证指数涨跌预测. 根据今天以前的150个交易日的数据,预测今日股市涨跌. 交叉验证的思想:将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层 ...

  7. Oracle密码验证函数与Create Profile

    今天看到了一个oracle密码函数的东西,就在网上找文档自己做测试,刚开始看不懂,最后做完记录一下 密码函数的作用就是要将用户密码进行限制,比如申请一个网站的账号的时候,密码会要求你不少于8位,必须要 ...

  8. 程序小白如何快速开发OA办公系统

    对于企业开发oa办公系统,成本高,周期长.有些企业花高价购买,购买后受制于软件商,很多功能只能按原来设计需求走,无法升级或者升级慢.这些由于软件商的开发效率低难以及时地响应企业的需求变化,所以就有可能 ...

  9. Ambari2.7.4+HDP3.1.4安装 Centos7离线安装

    一. Ambari等简单介绍 1.1Ambari Ambari是一种基于Web的工具,支持Apache Hadoop集群的创建 .管理和监控. Ambari已支持大多数Hadoop组件,包括HDFS. ...

  10. 6,HDFS HA

    目录 HDFS HA 一.HA(High Availability)的使用原因 二.HA的同步 三.HA的自动容灾 HDFS HA 一.HA(High Availability)的使用原因 1.1 在 ...