OpenStack Nova 计算服务深度解析|原理 + 架构 + 完整实操
Nova(Compute)是 OpenStack 核心计算组件,负责虚拟机生命周期管理,支撑云平台弹性计算能力。本文结合华为 Yoga 版本实验文档,从核心概念、组件架构、调度原理、虚拟机状态辨析、Dashboard 和 CLI 实操完整梳理 Nova,适合 OpenStack 学习者、运维工程师阅读。
一、Nova 是什么
Nova 即 OpenStack Compute 服务,是云平台的计算核心,不实现虚拟化,而是对接底层 Hypervisor,对外提供统一 REST API,支持虚拟机、裸金属、容器资源的统一调度管理OpenStack ...。
Nova 依赖的其他 OpenStack 服务
- Keystone:身份认证,校验 Token,鉴权所有 Nova 接口调用
- Glance:提供虚拟机镜像,创建实例时拉取镜像
- Neutron:为实例提供虚拟网卡、网络
- Placement:资源跟踪,统计 CPU、内存等资源库存,辅助调度器选节点
- 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 ...
-
Filter 过滤
:剔除不满足条件的主机
ComputeFilter:过滤 nova‑compute 服务宕机的节点(必选)AvailabilityZoneFilter:匹配可用域 AZRamFilter/DiskFilter/CoreFilter:过滤内存、磁盘、CPU 资源不足节点ServerGroupAffinityFilter亲和:虚拟机放同一台主机;ServerGroupAntiAffinityFilter反亲和:虚拟机分散不同主机
-
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. 主机聚合管理(管理员视图)
路径:管理员 → 计算 → 主机聚合
- 创建主机聚合,填写名称,绑定可用分区 AZ;
- 在管理聚合主机页面,把 controller/compute 主机加入聚合;
- 实验结论:同一台主机可以加入多个主机聚合,但只能归属一个 AZ。
2. 实例类型 Flavor(规格)管理
路径:管理员 → 计算 → 实例类型
- 创建 flavor,设置 vCPU、内存、磁盘;
- 使用权:可以限定给指定项目使用;
重要实验结论:
- 创建时不加项目,默认 Public,所有项目可用;
- 私有 flavor,如果移除全部授权项目:不会变成 Public,而是所有普通用户完全不可用,admin 管理员仅可见,无法使用。
- ❗flavor 一旦创建,不能修改 Public/Private 属性,只能删除重建。
3. 密钥对 & 服务器组(项目视图)
-
密钥对 :
项目 → 计算 → 密钥对,创建 SSH 密钥,下载私钥,用于 ssh 登录云主机。 -
服务器组 ServerGroup
:
项目 → 计算 → 主机组- 亲和(affinity):实例调度到同一台主机;
- 反亲和(anti‑affinity):实例强制分散不同主机;
- 软亲和 / 软反亲和:资源不足时可以忽略策略。
4. 实例完整生命周期操作
路径:项目 → 计算 → 实例
- 创建实例:填写实例名称、可用域;选择镜像、flavor、网络、密钥对、服务器组。
- 基础生命周期:关闭、启动、软重启、硬重启。
- 高级操作:锁定 / 解锁、暂停 / 恢复、挂起 / 恢复、搁置 / 取消搁置。
- 创建快照、重建实例;调整实例大小 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
六、创建虚拟机完整流程总结
- 用户 Horizon/CLI 携带 Token 向 nova‑api 发起创建实例请求;
- nova‑api 调用 Keystone 校验 token 合法性;校验 flavor、配额,写入数据库实例记录;
- 通过 RPC 把任务发送给 nova‑scheduler;
- nova‑scheduler 结合 Placement 资源数据,经过 Filter 过滤、Weight 权重打分选出目标计算节点;
- scheduler 下发 RPC 消息到目标节点 nova‑compute;
- nova‑compute 执行创建:
- 调用 nova‑conductor 完成数据库读写;
- 请求 Glance 获取镜像;
- 请求 Neutron 分配虚拟网卡;
- 请求 Cinder 挂载块卷;
- 调用本地 Hypervisor 驱动(libvirt/KVM)真正创建虚拟机。
七、实验常见踩坑点总结
- resize 调整实例大小失败:跨节点 resize 需要共享存储(Ceph/NFS),本地存储环境 resize 会失败;
- flavor 修改 Public 属性无效:flavor 创建后不能修改公有私有,只能删除重建;
- shelve 搁置实例之后,计算节点释放资源,unshelve 会重新调度主机;
- nova‑compute 不能直连数据库,所有 DB 操作必须走 nova‑conductor;conductor 挂掉 compute 无法工作;
- 反亲和服务器组,如果可用计算节点少于实例数量,创建实例直接报错。
八、小结
Nova 作为 OpenStack 计算核心,组件分离、RPC 消息解耦、无状态可横向扩展。
- nova‑api 是门户;nova‑conductor 数据库代理;nova‑scheduler 负责选主机;nova‑compute 真正操作虚拟化。
- 要分清
pause/suspend/shelve三种暂停模式的资源开销差异,生产按需选用; - 。日常运维两套工具:Horizon 适合快速页面操作;CLI 适合脚本自动化、批量运维。