nova介绍

Nova 负责维护和管理云环境的计算资源,Nova这个模块很重要,可以说是 OpenStack 的最核心的服务模块之一,以至于在 OpenStack 的初期版本里大部分的云系统管理功能都是由该模块负责管理的,只不过后来为了减轻该“车间主任”的压力,也便于功能分配管理,才把虚拟存储、网络等部分分离出来,而使该模块主要负责云虚拟机实例(Compute 或 Instance) 的生成、监测、终止等管理功能。

placement (用于服务追踪的user)

nova 相关进程介绍

Nova 的架构比较复杂,包含很多组件。 这些组件以子服务(后台 deamon 进程)的形式运行,可以分为以下几类:

  1. [root@yun2 log]# openstack compute service list
  2. +----+------------------+------+----------+---------+-------+----------------------------+
  3. | ID | Binary | Host | Zone | Status | State | Updated At |
  4. +----+------------------+------+----------+---------+-------+----------------------------+
  5. | 1 | nova-consoleauth | yun2 | internal | enabled | up | 2019-08-03T02:57:28.000000 |
  6. | 4 | nova-scheduler | yun2 | internal | enabled | up | 2019-08-03T02:57:30.000000 |
  7. | 5 | nova-conductor | yun2 | internal | enabled | up | 2019-08-03T02:57:27.000000 |
  8. | 6 | nova-compute | yun3 | nova | enabled | up | 2019-08-03T02:57:28.000000 |
  9. | 7 | nova-compute | yun2 | nova | enabled | up | 2019-08-03T02:57:32.000000 |
  10. | 8 | nova-compute | yun4 | nova | enabled | up | 2019-08-03T02:57:31.000000 |
  11. +----+------------------+------+----------+---------+-------+----------------------------+

服务启动

  1. # 主节点
  2. # systemctl enable openstack-nova-api.service \
  3. openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  4. openstack-nova-conductor.service openstack-nova-novncproxy.service
  5. # systemctl start openstack-nova-api.service \
  6. openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  7. openstack-nova-conductor.service openstack-nova-novncproxy.service
  8. #计算节点
  9. # systemctl enable libvirtd.service openstack-nova-compute.service
  10. # systemctl start libvirtd.service openstack-nova-compute.service

nova-api

nova-api 是nova组件的门户,负责接收和响应客户的API调用;所有对nova的请求都要首先由nova-api处理;在 keystone 中我们可以查询 nova-api 的 endponits:

  1. +-----------+-----------+------------------------------------------------------------------+
  2. | Name | Type | Endpoints |
  3. +-----------+-----------+------------------------------------------------------------------+
  4. | | | |
  5. | nova | compute | RegionOne |
  6. | | | internal: http://yun2:8774/v2.1 |
  7. | | | RegionOne |
  8. | | | public: http://yun2:8774/v2.1 |
  9. | | | RegionOne |
  10. | | | admin: http://yun2:8774/v2.1 |
  11. | | | |
  12. +-----------+-----------+------------------------------------------------------------------+

Nova-api 对接收到的 HTTP API 请求会做如下处理:

  1. 检查客户端传入的参数是否合法有效
  2. 调用 Nova 其他子服务的处理客户端 HTTP 请求
  3. 格式化 Nova 其他子服务返回的结果并返回给客户端

nova-scheduler

  • nova-scheduler负责虚机调度服务,决定在哪个计算节点上运行虚机;
  • 创建 Instance 时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少;OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor 就OK了
  • Nova 允许使用第三方 scheduler,配置 scheduler_driver 即可。 这又一次体现了OpenStack的开放性

Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步(调度算法):

  1. 通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
  2. 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。

nova-compute

nova-compute 是管理虚机的核心服务,在计算节点上运行。通过调用Hypervisor API实现节点上的 instance的生命周期管理。 OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。 nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

  • Openstack中虚机默认的保存路径在:/var/lib/nova/instances

Hypervisor

  • Hypervisor是计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor
  • openstack通过Driver架构支持多种Hypervisor;常用的 Hypervisor 有 KVM,Xen, VMWare 等。
  • nova-compute 为这些 Hypervisor 定义了统一的接口,Hypervisor 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。

下面是Nova Driver的架构示意图:

nova-conductor

nova-conductor主要用于管理数据库;nova-compute 经常需要更新数据库,比如更新和获取虚机的状态。 出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor。

Database

Nova 会有一些数据需要存放到数据库中,一般使用 MySQL。数据库安装在控制节点上(名为nova的库)

Message Queue

在前面我们了解到 Nova 包含众多的子服务,这些子服务之间需要相互协调和通信。为解耦各个子服务,Nova 通过 Message Queue 作为子服务的信息中转站。 所以在架构图上我们看到了子服务之间没有直接的连线,是通过 Message Queue 联系的。

Console Interface

进程 作用
nova-console 用户可以通过多种方式访问虚机的控制台
nova-novncproxy 基于 Web 浏览器的 VNC 访问
nova-spicehtml5proxy 基于 HTML5 浏览器的 SPICE 访问
nova-xvpnvncproxy 基于 Java 客户端的 VNC 访问
nova-consoleauth 负责对访问虚机控制台请求提供 Token 认证
nova-cert 提供 x509 证书支持

nova创建虚拟机的主要过程

  1. 首先用户登录 dashboard:访问 dashboard,登录信息由 keystone 查询数据库进行验证通过后,给用户返回一个 token,horizon 拿到 token,登录成功进入 web 界面。
  2. 点击‘创建云主机’按钮、填写云主机相关配置、点击启动实例后,horizon 拿着三样东西‘创建云主机的请求,云主机相关配置,还有 token 令牌’去找 Nova-api。
  3. Nova-api 拿到 token 令牌去找 keystone 验证通过后,Nova-api 接受 horizon 创建云主机的请并将配置信息存入数据库。Nova-api 通知 mq 消息队列,mq 在通知 Nova-schedular,由 Nova-schedular 选择适合创建实例的节点,
  4. Nova-schedular 查找数据库虚机配置信息,并通过调度算法决定Nova-compute;比如决定让 Nova-computeA创建云主机。
  5. Nova-computeA 接到调度后,请求 Nova-conductor 帮忙将配置信息从数据库提取出来。
  6. Nova-computeA 拿着 token 去找 glance-api 要镜像。
  7. Nova-computeA 拿着 token 去找 neutron-server 要网络资源。
  8. Nova-computeA拿着 token 去找 cinder-api 要存储资源。
  9. 当 Nova-computeA 拿到所有创建云主机的资源后,就把所有工作交给真正创建虚拟机的 hypervisor 直接进行创建。到此就拥有一台云主机了。
  1. # 查看平台中的所有虚拟机
  2. nova list --all-t

nova创建虚拟机的详细过程

  1. 界面或命令行通过RESTfullAPI向keystone获取认证信息
  2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
  3. 界面或命令行通过RESTfullAPI向nova-api发送一个boot instance 的请求,(请求中包含auth-token)
  4. nova-api 接受请求后向keystone发送认证请求,查看token是否有效(Authentication(认证)和 Authorization(鉴权))
  5. keystone验证token是否有效,有效返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)
  6. 通过认证后nova-api和数据库通讯
  7. 初始化新建虚拟机的数据记录
  8. nova-api 通过rpc.call 向nova-scheduler请求是否有创建虚拟机的资源(host id)
  9. nova-scheduler进程侦听消息队列,获取nova-api的请求
  10. nova-scheduler通过查询nova数据库中的计算资源的情况,并通过调度算法计算符合虚拟机创建的主机
  11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中的虚拟机对应的物理主机信息
  12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息
  13. nova-compute会从对应的消息队列中获得创建虚拟机请求的消息
  14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机的消息(Flavor)
  15. nova-conductor从消息队列中拿到nova-compute请求消息
  16. nova-conductor根据nova-compute的消息查询虚拟机对应的信息
  17. nova-conductor从数据库中获取虚拟机对应的信息
  18. nova-conductor把虚拟机的信息通过消息的方式发送到消息队列中
  19. nova-compute从对应的消息队列中获取虚拟机的信息
  20. nova-compute通过keystone的RESTfullAPI拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要的镜像。
  21. glance-api向keystone认证token是否有效,并返回验证结果
  22. token验证通过,nova-compute获取虚拟机镜像信息(URL)
  23. nova-compute 通过keystone的RESTfullAPI拿到认证的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息
  24. neutron-server向keystone认证token是否有效,并返回验证结果
  25. token验证通过,nova-compute获取获得虚拟机网络信息
  26. nova-compute通过keystone的RESTfullAPI拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息
  27. cinder-api 向keystone认证是否有效,并返回验证结果
  28. token验证通过,nova-compute获得虚拟机持久化存储信息
  29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机

OpenStack (nova 计算服务)的更多相关文章

  1. openstack——nova计算服务

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

  2. CentOS7安装OpenStack(Rocky版)-04.安装Nova计算服务(控制节点)

    上一篇文章分享了glance镜像服务的安装配置,本文主要分享openstack的计算服务Nova的安装和配制方法 ------------------ 完美的分割线 ----------------- ...

  3. openstack (4)---部署Glance镜像服务,Nova计算服务

    一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...

  4. OpenStack核心组件-nova计算服务

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

  5. openstack核心组件——nova计算服务(7)

    云计算openstack核心组件——nova计算服务(7)   一.nova介绍:       Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 ...

  6. Openstack Nova 控制服务 和 计算服务 (六)

    Openstack Nova 控制服务 和 计算服务 (六) 引用: https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/nova.htm ...

  7. OpenStack Train版-6.安装nova计算服务(计算节点)

    安装nova计算服务(computel01计算节点 192.168.0.20)安装软件包 yum install centos-release-openstack-train -y yum insta ...

  8. OpenStack Train版-5.安装nova计算服务(控制节点)

    nova计算服务需要在 控制节点 和 计算节点 都安装 控制节点主要安装 ​ nova-api(nova主服务)​ nova-scheduler(nova调度服务)​ nova-conductor(n ...

  9. 云计算OpenStack核心组件---nova计算服务(7)

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

随机推荐

  1. 第三章 存储器的扩展(二)——> 重要

    3.2 主存储器 四.只读存储器(ROM)---->了解(考试也可能会考) 掩膜ROM(MROM) 行列选择线交叉处有 MOS 管为"1" 行列选择线交叉处无 MOS 管为& ...

  2. ES6模板字符串及字符串的扩展方法

    一.ES6模板字符串 传统定义字符串的方式是: const str='hello es2015,this is a string' ES6新增了一种定义字符串的方式用反引号进行标识 const str ...

  3. 中移动ipv6-老毛子固件获取ipv6设置

    对于有ipv6的服务商原理上可以参照下图

  4. C++语言基础——02数据的存取

    常量 常量是指在程序中使用的一些具体的数.字符.在程序运行过程中,其值不能更改.如123.1.23.'a'."abc".True等. 常量的定义 const 类型 常量名 = 常量 ...

  5. WPF DataGrid与ListView性能对比与场景选择

    开门见山的说 性能对比: 在Demo中,DataGrid与ListView默认开启虚拟化(可以理解为动态渲染,类似懒加载只渲染屏幕可以看见的地方) DataGrid渲染10列50行随机字符280ms ...

  6. 2021年了,`IEnumerator`、`IEnumerable`还傻傻分不清楚?

    IEnumerator.IEnumerable这两个接口单词相近.含义相关,傻傻分不清楚. 入行多年,一直没有系统性梳理这对李逵李鬼. 最近本人在怼着why神的<其实吧,LRU也就那么回事> ...

  7. ssh信任 sftp用法 scp用法【转】

    为了进行批量关机工作,前提要配置好ssh的双机信任. A机192.168.1.241 B机192.168.1.212 在A机上获取一个pub密钥,即为公共密钥. 执行这个命令后:ssh-keygen  ...

  8. Java线程安全与锁优化,锁消除,锁粗化,锁升级

    线程安全的定义 来自<Java高并发实战>"当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法的时候进行任何 ...

  9. 安装MySQL数据库(在Windows下通过zip压缩包安装)

    安装MySQL 这里建议大家使用压缩版,安装快,方便.不复杂. 软件下载 mysql5.7 64位下载地址: https://dev.mysql.com/get/Downloads/MySQL-5.7 ...

  10. 【SpringBoot】Spring Boot,开发社区讨论交流网站首页。

    初识Spring Boot,开发社区讨论交流网站首页. 文章目录 初识Spring Boot,开发社区讨论交流网站首页. 1.项目简介 2. 搭建开发环境 JDK Apache Maven Intel ...