Openstack私有云简介之Nova

一、Nova主要作用

  • Nova是负责提供计算资源的模块,也是openstack中的核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。

二、Nova的系统架构

在这里插入图片描述
部署架构特点:

  • 无中心结构
  • 各组件无本地持久化状态
  • 可水平扩展
  • 通常将nova-api、nova-scheduler、nova-conductor组件合并部署在控制节点上
  • 通过部署多个控制节点实现HA和负载均衡
  • 通过增加控制节点和计算节点实现简单方便的系统扩容

三、Nova的主要组件

Nova-api服务

  • 接收和相应来自最终用户的计算API请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。
  • nova-api 对接收到的 HTTP API 请求会做如下处理:
    1)检查客户端传人的参数是否合法有效
    2)调用 Nova 其他子服务的处理客户端 HTTP 请求
    3)格式化 Nova 其他子服务返回的结果并返回给客户端
  • 只要是跟虚拟机生命周期相关的操作,nova-api 都可以响应。大部分操作都可以在 Dashboard 上找到

Nova-api-metadata服务

  • 接收来自虚拟机发送的元数据请求。nova-api-metadata一般在安装nova-network服务的多主机模式下使用

Nova-compute(向外提供的端口为8774)

  • OpenStack 对实例的操作,最后都是交给 nova-compute
    来完成。它是一个持续工作的守护进程,通过hypervisor的api来创建和销毁虚拟机实例,nova-compute 与 Hypervisor 一起实现 OpenStack 对实例生命周期的管理。

  • nova-compute 的功能可以分为两类:
    1、定时向 OpenStack 报告计算节点的状态
    每隔一段时间,nova-compute 就会报告当前计算节点的资源使用情况和
    nova-compute 服务状态。可以查看日志 /var/log/nova/nova-compute.log
    2、实现实例生命周期的管理
    OpenStack 对实例最主要的操作都是通过 nova-compute实现的,包括实例的启动、关闭、重启、暂停、恢复、删除、调整实例大小、迁移、创建快照等。
    当 nova-scheduler 选定了部署实例的计算节点后,会通过消息中间件 RabbitMQ 向选定的计算节点发出创建实例的命令。
    该计算节点上运行的 nova-compute 收到消息后会执行实例创建操作。日志 /var/log/nova/nova-compute.log 会记录整个操作过程。

Nova-conductor

  • nova-compute 需要获取和更新数据库中实例的信息。但 nova-compute 并不会直接访问数据库,而是通过 nova-conductor 实现数据的访问
  • nova-conductor模块作用于nova-compute服务与数据库之间,避免了由nova-compute服务对云数据库的直接访问。他可以横向扩展,但是,不要将它部署在运行nova-compute服务的主机节点上

Nova-scheduler

  • nova-scheduler 解决如何选择在哪个计算节点上启动实例的问题。
  • 当创建实例时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor中,用户只需要指定用哪个 flavor 就可以了。nova-scheduler 会按照 flavor 去选择合适的计算节点。
  • OpenStack 的虚拟机调度策略主要是由 FilterScheduler ChanceScheduler 和实现的,其中FilterScheduler作为默认的调度器实现了基于主机过滤(filtering)和权值计算(weighing)的调度算法,而ChanceScheduler 则是基于随机算法来选择可用主机的简单调度器。
  • FilterScheduler调度过程分为两步:
    1、通过过滤(filtering)选择满足条件的计算节点(运行
    nova-compute)。
    2、通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建实例。

四、VM实例化流程

在这里插入图片描述

  1. 客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”。
  2. API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”。
  3. Scheduler(nova-scheduler)从 Messaging 获取到 API
    发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A。
  4. Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”。
  5. 计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler
    发给它的消息,然后在本节点的 Hypervisor 上启动虚机。
  6. 在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向
    Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。
发布了59 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42953006/article/details/104841185