OpenStack Nova 计算服务深度解析|原理 + 架构 + 完整实操

OpenStack Nova 计算服务深度解析|原理 + 架构 + 完整实操

Nova(Compute)是 OpenStack 核心计算组件,负责虚拟机生命周期管理,支撑云平台弹性计算能力。本文结合华为 Yoga 版本实验文档,从核心概念、组件架构、调度原理、虚拟机状态辨析、Dashboard 和 CLI 实操完整梳理 Nova,适合 OpenStack 学习者、运维工程师阅读。

一、Nova 是什么

Nova 即 OpenStack Compute 服务,是云平台的计算核心,不实现虚拟化,而是对接底层 Hypervisor,对外提供统一 REST API,支持虚拟机、裸金属、容器资源的统一调度管理OpenStack ...。

Nova 依赖的其他 OpenStack 服务

  1. Keystone:身份认证,校验 Token,鉴权所有 Nova 接口调用
  2. Glance:提供虚拟机镜像,创建实例时拉取镜像
  3. Neutron:为实例提供虚拟网卡、网络
  4. Placement:资源跟踪,统计 CPU、内存等资源库存,辅助调度器选节点
  5. Cinder:提供持久化块存储卷,给虚拟机挂载磁盘

Nova 本身不管理物理服务器硬件,也不做完整监控,只专注计算实例生命周期。

二、Nova 核心组件架构

Nova 采用无共享分布式架构 ,组件之间通过 RabbitMQ 消息队列(oslo.messaging)RPC 通信,数据库统一存储元数据,可水平扩展,控制器节点部署 nova‑api、nova‑scheduler、nova‑conductor;计算节点只运行nova‑compute进程OpenStack ...。

四大核心进程详解

表格

组件 部署位置 核心功能
nova‑api 控制节点 对外 REST API 入口;接收 Horizon/CLI 请求;参数校验、配额检查;数据库写实例初始记录;转发 RPC 消息给内部组件
nova‑conductor 控制节点 数据库代理!禁止 nova‑compute 直连数据库。处理数据库读写,完成创建、迁移、resize 复杂流程,计算节点依赖此服务才能启动。好处:提升安全,数据库密码不暴露计算节点;解耦数据库版本升级,提高并发性能
nova‑scheduler 控制节点 调度器。过滤 Filter + 权重 Weight两步选出最合适的计算节点,把创建虚拟机任务下发给目标 nova‑compute
nova‑compute 计算节点 真正干活的组件,对接底层虚拟化驱动 KVM/QEMU/VMware/Xen,执行虚拟机创建、删除、重启、迁移;周期性上报资源状态;调用 Glance/Neutron/Cinder 获取镜像、网络、存储资源

配套:nova‑novncproxy,网页控制台代理,浏览器访问虚拟机 VNC 控制台。

调度器工作流程 FilterScheduler

默认调度器分为**过滤(Filter)→权重(Weighting)**两大阶段OpenStack ...

  1. Filter 过滤

    :剔除不满足条件的主机

    • ComputeFilter:过滤 nova‑compute 服务宕机的节点(必选)
    • AvailabilityZoneFilter:匹配可用域 AZ
    • RamFilter/DiskFilter/CoreFilter:过滤内存、磁盘、CPU 资源不足节点
    • ServerGroupAffinityFilter亲和:虚拟机放同一台主机;ServerGroupAntiAffinityFilter反亲和:虚拟机分散不同主机
  2. Weight 权重打分 :过滤后剩下主机进行打分,默认 RAMWeigher,空闲内存越大分数越高,优先部署。

Placement 服务预先统计全平台资源库存,为 scheduler 提供资源数据。

主机聚合 Host Aggregate vs 可用域 Availability Zone

  • Availability Zone (AZ,可用域):面向用户,创建实例选择,实现物理故障域隔离,比如不同机架、机房。
  • Host Aggregate(主机聚合) :管理员后台,把一组主机打上 metadata 标签,内部绑定一个 AZ;一个物理主机可以加入多个主机聚合,但是只能属于一个可用域 AZ。

三、虚拟机实例状态辨析(高频面试点)

很多人混淆pause、suspend、shelve,三者完全不同,实验中需要重点区分OpenStack ...。

表格

操作 存储位置 资源占用 恢复命令 特点 & 适用场景
Pause 暂停 宿主机内存 内存占用,宿主机保留全部资源 unpause 冻结虚拟机,内存保存 VM 状态,恢复极快。适合短时间暂停。
Suspend 挂起 宿主机磁盘 释放 CPU,内存写入磁盘,仍预留宿主机资源 resume 休眠,类似电脑睡眠。适合长时间暂停,恢复速度慢于 pause。
Shelve 搁置 / 废弃 镜像存入 Glance,宿主机删除 VM 实例 释放宿主机 CPU 内存资源 unshelve 释放计算节点资源!把实例保存为镜像,宿主机彻底删掉虚拟机。适合长期不用,但不想删除实例的场景。

✅软重启soft reboot:虚拟机内部执行 reboot,操作系统优雅重启,宿主机不销毁 VM; ✅硬重启hard reboot:底层 Hypervisor 直接断电再上电,强制重启。

锁定实例 lock

  • 管理员锁定实例:普通用户不能删除实例;默认配置普通用户可以解锁,可修改 policy 策略限制普通用户解锁;管理员账号不受锁定限制,依旧可以直接删除实例。

快照 Snapshot & Rebuild 重建

  • 创建快照:把运行实例保存为 Glance 镜像;
  • rebuild 重建:使用镜像 / 快照重置虚拟机系统盘,保留原有网络、规格、主机信息,虚拟机系统损坏恢复的重要手段。

Resize 调整实例规格

修改虚拟机 flavor(CPU 内存大小),需要共享存储支持,否则跨节点 resize 迁移失败。resize 完成后需要手动确认openstack server resize confirm,确认之后旧资源释放。

四、实操:Dashboard 页面管理 Nova

使用 admin 账号登录 Horizon Web 界面

1. 主机聚合管理(管理员视图)

路径:管理员 → 计算 → 主机聚合

  1. 创建主机聚合,填写名称,绑定可用分区 AZ;
  2. 在管理聚合主机页面,把 controller/compute 主机加入聚合;
  3. 实验结论:同一台主机可以加入多个主机聚合,但只能归属一个 AZ。

2. 实例类型 Flavor(规格)管理

路径:管理员 → 计算 → 实例类型

  1. 创建 flavor,设置 vCPU、内存、磁盘;
  2. 使用权:可以限定给指定项目使用;

重要实验结论:

  • 创建时不加项目,默认 Public,所有项目可用;
  • 私有 flavor,如果移除全部授权项目:不会变成 Public,而是所有普通用户完全不可用,admin 管理员仅可见,无法使用。
  • ❗flavor 一旦创建,不能修改 Public/Private 属性,只能删除重建。

3. 密钥对 & 服务器组(项目视图)

  1. 密钥对 :项目 → 计算 → 密钥对,创建 SSH 密钥,下载私钥,用于 ssh 登录云主机。

  2. 服务器组 ServerGroup

    :

    复制代码
    项目 → 计算 → 主机组
    • 亲和(affinity):实例调度到同一台主机;
    • 反亲和(anti‑affinity):实例强制分散不同主机;
    • 软亲和 / 软反亲和:资源不足时可以忽略策略。

4. 实例完整生命周期操作

路径:项目 → 计算 → 实例

  1. 创建实例:填写实例名称、可用域;选择镜像、flavor、网络、密钥对、服务器组。
  2. 基础生命周期:关闭、启动、软重启、硬重启。
  3. 高级操作:锁定 / 解锁、暂停 / 恢复、挂起 / 恢复、搁置 / 取消搁置。
  4. 创建快照、重建实例;调整实例大小 resize。

五、实操:OpenStack CLI 命令管理 Nova

登录 controller 节点,导入 admin 环境变量

复制代码
source keystonerc_admin

1. Hypervisor、主机聚合

复制代码
#查看计算节点hypervisor列表
openstack hypervisor list --long
#查看主机列表
openstack host list

#创建主机聚合,绑定nova可用域
openstack aggregate create --zone nova HostAggr_cli
#添加主机
openstack aggregate add host HostAggr_cli controller
#查看聚合详情
openstack aggregate show HostAggr_cli
#移除主机
openstack aggregate remove host HostAggr_cli controller
#删除聚合
openstack aggregate delete HostAggr_cli

2. Flavor 规格管理

复制代码
#创建私有flavor,仅Project_cli项目可用
openstack flavor create --vcpus 1 --ram 128 --disk 1 --private --project Project_cli Flavor_cli

#移除项目权限
openstack flavor unset --project Project_cli Flavor_cli

#创建公有flavor,不加--private默认public
openstack flavor create --vcpus 1 --ram 128 --disk 1 Flavor_cli
#查看flavor详情
openstack flavor show Flavor_cli
#删除flavor
openstack flavor delete Flavor_cli

3. 密钥对 & 服务器组

复制代码
#创建密钥对
openstack keypair create KeyPair_cli

#创建服务器组,亲和策略affinity
openstack server group create --policy affinity ServerGroup_cli

4. 实例全套 CLI 操作

复制代码
#创建实例,hint指定服务器组ID
openstack server create --availability-zone nova --image Img_cli --flavor Flavor_cli --network shared --key-name KeyPair_cli --hint group=SERVER_GROUP_ID Instance_cli_01

#查看实例列表
openstack server list

#关机、开机
openstack server stop Instance_cli_01
openstack server start Instance_cli_01

#软重启、硬重启
openstack server reboot --soft Instance_cli_01
openstack server reboot --hard Instance_cli_01

#锁定解锁
openstack server lock Instance_cli_01
openstack server unlock Instance_cli_01

#暂停、恢复
openstack server pause Instance_cli_01
openstack server unpause Instance_cli_01

#挂起、恢复
openstack server suspend Instance_cli_01
openstack server resume Instance_cli_01

#搁置、取消搁置
openstack server shelve Instance_cli_01
openstack server unshelve Instance_cli_01

#创建实例快照
openstack server image create --name Instance_Snap_cli Instance_cli_01

#调整实例规格resize
openstack server resize --flavor Flavor_cli_new Instance_cli_01
openstack server resize confirm Instance_cli_01

#使用快照重建实例
openstack server rebuild --image Instance_Snap_cli Instance_cli_01

#删除实例
openstack server delete Instance_cli_01

六、创建虚拟机完整流程总结

  1. 用户 Horizon/CLI 携带 Token 向 nova‑api 发起创建实例请求;
  2. nova‑api 调用 Keystone 校验 token 合法性;校验 flavor、配额,写入数据库实例记录;
  3. 通过 RPC 把任务发送给 nova‑scheduler;
  4. nova‑scheduler 结合 Placement 资源数据,经过 Filter 过滤、Weight 权重打分选出目标计算节点;
  5. scheduler 下发 RPC 消息到目标节点 nova‑compute;
  6. nova‑compute 执行创建:
    • 调用 nova‑conductor 完成数据库读写;
    • 请求 Glance 获取镜像;
    • 请求 Neutron 分配虚拟网卡;
    • 请求 Cinder 挂载块卷;
    • 调用本地 Hypervisor 驱动(libvirt/KVM)真正创建虚拟机。

七、实验常见踩坑点总结

  1. resize 调整实例大小失败:跨节点 resize 需要共享存储(Ceph/NFS),本地存储环境 resize 会失败;
  2. flavor 修改 Public 属性无效:flavor 创建后不能修改公有私有,只能删除重建;
  3. shelve 搁置实例之后,计算节点释放资源,unshelve 会重新调度主机;
  4. nova‑compute 不能直连数据库,所有 DB 操作必须走 nova‑conductor;conductor 挂掉 compute 无法工作;
  5. 反亲和服务器组,如果可用计算节点少于实例数量,创建实例直接报错。

八、小结

Nova 作为 OpenStack 计算核心,组件分离、RPC 消息解耦、无状态可横向扩展。

  • nova‑api 是门户;nova‑conductor 数据库代理;nova‑scheduler 负责选主机;nova‑compute 真正操作虚拟化。
  • 要分清pause/suspend/shelve三种暂停模式的资源开销差异,生产按需选用;
  • 。日常运维两套工具:Horizon 适合快速页面操作;CLI 适合脚本自动化、批量运维。
相关推荐
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (二十一):Pipeline 事件传播 —— Inbound 与 Outbound 的双向流转
java·后端·架构
FYKJ_20102 小时前
springboot高考志愿填报推荐系统14332-计算机课程设计、毕业设计
javascript·spring boot·python·架构·django·课程设计·高考
找了一圈尾巴2 小时前
Agent 架构的记忆系统:从滑动窗口到离线整合,一套分层记忆设计
架构·agent
诚心呈意共享外卖配送系统3 小时前
怎么搭建同城聚合配送平台?一套接单、派单、算账的分层系统架构设计
架构·系统架构·创业创新
国科安芯4 小时前
从点火到入轨的毫秒尺度:商业运载火箭飞行时序控制中的抗辐射MCU可靠性边界—— 面向短时高可靠任务的单粒子效应证据与架构分析
网络·人工智能·单片机·嵌入式硬件·架构·火箭·抗辐射
Dola_Zou4 小时前
从二进制加固到离线鉴权 工业边缘AI安全防御架构
人工智能·安全·ai·架构·软件加密
严同学正在努力4 小时前
PostgreSQL 高可用教程(流复制 + Patroni 生产级实战)
运维·数据库·ai·postgresql·架构
Dawson Zhu4 小时前
【AI编译器入门②】TVM架构拆解:Relay、Relax、TIR与Runtime四层结构
人工智能·语言模型·架构·aigc·agi
鬼手点金4 小时前
缓存作为架构约束
开发语言·前端·人工智能·python·microsoft·缓存·架构