前言:nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信
文章目录
一、Nova概述
1.Nova体系结构
2.Nova重要组件
1)nova API
- nova-api组件实现了RESTful API功能,是外部访问Nova的唯一途径。接收外部的请求并通过Message Queue将请求发送给其他的服务组件,同时也兼容EC2 API,所以也可以用EC2的管理工具对nova进行日常管理
2)nova scheduler
- nova scheduler模块在openstack中的作用是决策虚拟机创建在哪个主机(计算节点)上。决策一个虚拟机应该调度到某物理节点,需要分为两个步骤:
- 过滤(filter),过滤出可以创建虚拟机的主机
- 计算权值(weight),根据权重大小进行分配,默认根据资源可用空间进行权重排序
NOTE
- 除了nova-conductor可以访问数据库之外,因为nova-scheduler是只读数据库,而nova-api对数据库的操作有Policy保护,所以它们也都是可以访问数据库的。但是最好还是仅通过nova-conductor来访问数据库
3)nova-api-metadata
- 从实例中接收元数据请求。nova-api-metadata服务通常在nova-network安装时使用的是多宿主模式运行
4)nova-compute
-
负责虚拟机的生命周期管理,创建并终止虚拟机实例的工作后台程序hypervisor api。例如:
- XenAPI for XenServer/XCP
- libvirt for KVM or QEMU
- VMwareAPI for VMware
-
基本上,守护进程接受来自队列并执行一系列系统命令,例如启动kvm实例并更新数据库中的状态
5)nova-placement-api
- 跟踪每个计算提供者的仓库和使用情况
6)nova-conductor模块
- 计算节点访问数据的中间件,nova-compute服务和数据库之间的中间件。它消除了对云数据库的直接访问。官方建议:不要将它部署到nova-compute服务运行
7)nova-consoleauth守护进程
- 用于控制台的授权验证,授权控制台代理提供的用户令牌。此服务必须运行用于控制台代理工作。您可以运行任何类型的代理,而不是集群配置中的单nova-consoleauth服务
8)nova-novncproxy守护进程
- VNC代理,提供用于通过vnc连接访问运行实例的代理。支持基于浏览器的客户端客户端
9)nova-spicehtml5proxy守护进程
- 提供一个代理,通过一个SPICE连接访问运行实例。支持基于浏览器的html 5客户端
10)nova-xvpvncproxy守护进程
- 提供用于通过vnc连接访问运行实例的代理。支持一个特定于服务器的java客户机
11)Queue
- 在守护进程之间传递消息的中心。通常使用RabbitMQ也可以用另一个基于AMQP的消息队列,例如ZeroMQ
12)SQL database
-
存储大部分构建时间和运行时状态,用于云基础设施,包括:
- 可用实例类型
- 使用实例
- 可用网络
- 项目
-
理论上,OpenStack计算可以支持任何数据库。SQLite3数据库用于测试和开发工作,mysql,MariaDB和postgresql
3.Nova创建虚拟机流程
- 流程大致如下:
- 用户发送http请求至nova api,nova api会把这个请求放到mq;
- nova scheduler从消息队列里获取到请求,开始决定由哪个计算节点去执行请求,后把结果存放到消息队列里;
- nova compute从消息队列里知道了由哪个节点去执行请求后,分派该节点去执行用户请求并返回结果至消息队列;
- 具体执行过程中产生的一些中间态信息(比如虚机的运行状态、bdm信息等)通过nova conductor保存到数据库
来源:CSDN
作者:changz丶
链接:https://blog.csdn.net/weixin_45724795/article/details/104758801