博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenStack之Nova模块
阅读量:5173 次
发布时间:2019-06-13

本文共 2928 字,大约阅读时间需要 9 分钟。

Nova简介

nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信。

1219690-20180410104635267-292837996.png

Nova体系结构

1219690-20180410104809697-821769601.png

Nova重要组件介绍

1.nova API

nova-api组件实现了RESTful API功能,是外部访问Nova的唯一途径。接收外部的请求并通过Message Queue将请求发送给其他的服务组件,同时也兼容EC2 API,所以也可以用EC2的管理工具对nova进行日常管理。

1219690-20180410105221297-1361953690.png

2.nova scheduler

nova scheduler模块在openstack中的作用是决策虚拟机创建在哪个主机(计算节点)上。决策一个虚拟机应该调度到某物理节点,需要分为两个步骤:

  • 过滤(filter),过滤出可以创建虚拟机的主机
    1219690-20180410105403351-2118597506.png
  • 计算权值(weight),根据权重大小进行分配,默认根据资源可用空间进行权重排序
    1219690-20180410105443000-2021850918.png

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
    1219690-20180410111711911-191631271.png

基本上,守护进程接受来自队列并执行一系列系统命令,例如启动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。

Nova创建虚拟机流程

1219690-20180410111619302-1041479808.png

虚机创建流程梳理

1219690-20180410112117032-9799754.png

1.客户端使用自己的用户名密码请求认证。

2.keystone通过查询在keystone的数据库user表中保存了user的相关信息,包括password加密后的hash值,并返回一个token_id(令牌),和serviceCatalog(一些服务的endpoint地址,cinder、glance-api后面下载镜像和创建块存储时会用到)。
3.客户端带上keystone返回的token_id和创建虚机的相关参数,Post请求nova-api创建虚拟机
4.nova-api接收到请求后,首先使用请求携带的token_id来访问该api,以验证请求是否有效。
5.keystone验证通过后返回更新后的认证信息。
6.nova api检查创建虚拟机参数是否有效与合法。
检查虚拟机name是否符合命名规范,flavor_id是否在数据库中存在,image_uuid是否是正确的uuid格式
检查instance、vcpu、ram的数量是否超过配额。
7.当且仅当所有传参都有效合法时,更新nova数据库,新建一条instance记录,vm_states设为BUILDING,task_state设为SCHEDULING.
8.nova api 远程调用传递请求、参数给nova scheduler,把消息“请给我创建一台虚拟机”丢到消息队列,然后定期查询虚机的状态。
9.nova scheduler从queue中获取到这条消息
10.nova scheduler访问nova 数据库,通过调度算法,过滤出一些合适的计算节点,然后进行排序。
11.更新虚机节点信息,返回一个最优节点id给nova scheduler。
12.nova scheduler选定host之后,通过rpc调用nova-compute服务,把“创建虚机请求”消息丢给mq。
13.nova compute收到创建虚拟机请求的消息。
nova-compute有个定时任务,定期从数据库中查找到运行在该节点上的所有虚拟机信息,统计得到空闲内存大小和空闲磁盘大小。然后更新数据库compute_node信息,以保证调度的准确性。
14.nova compute通过rpc查询nova数据库中虚机的信息,例如主机模板和id。
15.nova conductor从消息队列中拿到请求查询数据库。
16.nova conductor查询nova数据库。
17.数据库返回虚机信息。
18.nova compute从消息队列中获取信息。
19.nova compute 请求glance 的rest api,下载所需要的镜像,一般是qcow2的。
20.glance api 也会去验证请求的token的有效性。
21.glance api 返回镜像信息给nova-compute。
22.同理,nova compute请求neutron api配置网络,例如获取虚机ip地址
23.验证token的有效性
24.neutron返回网络信息
25-27 同glance、neutron验证token返回块设备信息
28.根据上面配置的虚拟机信息,生成xml,写入libvirt,xml文件,然后调用libvirt driver去使用libvirt.xml文件启动虚拟机。

1219690-20180410112211501-1487205499.png

参考文章:

转载于:https://www.cnblogs.com/tongxiaoda/p/8777718.html

你可能感兴趣的文章
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
Problem E: Automatic Editing
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>