Nova(一):架构

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

Nova架构图

#版本变化了,组件可能也发生了改变

复制代码
OpenStack N版 Nova组件可以分为5大类:API、Compute Core、Console Interface、Database、Message Queue
==================================================================================
API:nova-api
    nova-api
        接收和响应客户的 API 调用。 
        除了提供 OpenStack 自己的API,nova-api 还支持 Amazon EC2 API。
         也就是说,如果客户以前使用 Amazon EC2,并且用 EC2 的 API 开发了些工具来管理虚机,那么如果现在要换成 OpenStack,这些工具可以无缝迁移到 OpenStack,因为 nova-api 兼容 EC2 API,无需做任何修改。
--------------------------------------------------
Compute Core:nova-scheduler、nova-compute、Hypervisor、nova-conductor
    nova-scheduler
        虚机调度服务,负责决定在哪个计算节点上运行虚机
    nova-compute
        管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理
    Hypervisor
        计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen, VMWare 等
    nova-conductor
        nova-compute 经常需要更新数据库,比如更新虚机的状态。
        出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor

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

--------------------------------------------------
Database:nova数据库
    Nova 会有一些数据需要存放到数据库中,一般使用 MySQL。数据库安装在控制节点上。 Nova 使用命名为 “nova” 的数据库。
--------------------------------------------------
Message Queue:默认为RabbitMQ
    Nova 包含众多的子服务,子服务之间需要相互协调和通信。为解耦各个子服务,Nova 通过 Message Queue 作为子服务的信息中转站。
    OpenStack 默认是用 RabbitMQ 作为 Message Queue。
OpenStack N版 Nova组件可以分为5大类:API、Compute Core、Console Interface、Database、Message Queue
复制代码

 

复制代码
关于上面的所有组件,只有Hypervisor、nova-compute????是放在计算节点上的;其他的都是放在控制节点上的

[root@controller ~]# ps -ef |grep nova
nova      14091      1  0 09:17 ?        00:00:12 /usr/bin/python2 /usr/bin/nova-novncproxy --web /usr/share/novnc/
nova      15605  15561  0 09:18 ?        00:00:30 nova_api_wsgi   -DFOREGROUND
nova      15606  15561  0 09:18 ?        00:00:10 nova_api_wsgi   -DFOREGROUND
nova      15617  15561  0 09:18 ?        00:00:11 nova_api_wsgi   -DFOREGROUND
nova      15620  15561  0 09:18 ?        00:00:19 nova_api_wsgi   -DFOREGROUND
nova      15621  15561  0 09:18 ?        00:00:01 nova_metadata_w -DFOREGROUND
nova      15622  15561  0 09:18 ?        00:00:01 nova_metadata_w -DFOREGROUND
nova      15623  15561  0 09:18 ?        00:00:02 nova_metadata_w -DFOREGROUND
nova      15630  15561  0 09:18 ?        00:00:02 nova_metadata_w -DFOREGROUND
nova      21713      1  1 09:22 ?        00:05:19 /usr/bin/python2 /usr/bin/nova-conductor
nova      21798  21713  1 09:23 ?        00:06:22 /usr/bin/python2 /usr/bin/nova-conductor
nova      21799  21713  1 09:23 ?        00:06:22 /usr/bin/python2 /usr/bin/nova-conductor
nova      21800  21713  1 09:23 ?        00:06:24 /usr/bin/python2 /usr/bin/nova-conductor
nova      21801  21713  1 09:23 ?        00:06:23 /usr/bin/python2 /usr/bin/nova-conductor
nova      21886      1  1 09:23 ?        00:05:26 /usr/bin/python2 /usr/bin/nova-scheduler
nova      22120  21886  0 09:23 ?        00:00:25 /usr/bin/python2 /usr/bin/nova-scheduler
nova      22121  21886  0 09:23 ?        00:00:26 /usr/bin/python2 /usr/bin/nova-scheduler
root     115399  33427  0 16:40 pts/1    00:00:00 grep --color=auto nova

[root@controller ~]# ps -e |grep nova           #版本变化了,组件可能也发生了改变
 14091 ?        00:00:12 nova-novncproxy
 21713 ?        00:05:22 nova-conductor
 21798 ?        00:06:26 nova-conductor
 21799 ?        00:06:26 nova-conductor
 21800 ?        00:06:28 nova-conductor
 21801 ?        00:06:27 nova-conductor
 21886 ?        00:05:29 nova-scheduler
 22120 ?        00:00:25 nova-scheduler
 22121 ?        00:00:26 nova-scheduler


[root@yefeng ~]# ps -ef |grep nova
nova      45444      1  1 09:34 ?        00:05:56 /usr/bin/python2 /usr/bin/nova-compute        #计算节点只运行了nova-compute
ps -e |grep nova
复制代码

 

复制代码
创建VM,nova子服务协同工作过程(仅文字描述):
    1.API(nova-api)接收到创建vm请求(白屏请求or API请求)
    2.API(nova-api)做一些必要处理后,将请求转到RabbitMQ中
    3.nova-scheduler从RabbitMQ获取到信息,执行调度算法,从计算节点中选出节点A
    4.nova-scheduler向RabbitMQ发送请求:“在节点A创建VM”
    5.nova-compute从RabbitMQ获取到信息,然后在本节点的Hypervisor启动VM
    6.在创建VM过程中,nova-compute如果需要查询or更新数据库,会通过RabbitMQ向nova-conductor发送信息;nova-conductor负责数据库的访问
    以上是创建虚机最核心的步骤,当然省略了很多细节

    也就是说,创建VM的过程,除了Console Interface:nova-console、nova-consoleauth、nova-cert,其他的全部组件都参与了
创建VM,nova子服务协同工作过程(仅文字描述)
复制代码

 

 

 

 

 

posted @   雲淡風輕333  阅读(335)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示