Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 、基本流程 sequenceDi ...

发布时间:2026/9/12 10:06:41

Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 、基本流程 sequenceDi ... Nova 服务与外部组件交互实战解析Glance、Neutron、Cinder、Keystone 协同工作流程在 OpenStack 云平台中Nova 作为核心计算服务负责虚拟机的生命周期管理。但 Nova 并非孤岛它需要与 Glance镜像服务、Neutron网络服务、Cinder块存储服务和 Keystone认证服务紧密协作才能完成一个完整的虚拟机启动流程。本文将从实战角度出发通过代码示例和序列图深入解析这些组件之间的交互机制。## 1. 整体架构与组件角色### 1.1 组件职责速览-Keystone统一认证和授权管理用户、项目和角色。-Glance镜像仓库存储和管理虚拟机磁盘镜像。-Neutron网络即服务提供虚拟网络、子网和端口。-Cinder块存储服务提供持久化的卷Volume。-Nova计算调度核心协调上述组件完成虚拟机创建、迁移等操作。### 1.2 交互流程图简化版mermaidsequenceDiagram participant Client as 用户/客户端 participant Keystone participant Nova participant Glance participant Neutron participant Cinder Client-Keystone: 1. 认证获取Token Keystone--Client: 返回Token Client-Nova: 2. 创建虚拟机请求含Token Nova-Keystone: 3. 验证Token有效性 Keystone--Nova: 验证通过 Nova-Glance: 4. 获取镜像元数据 Glance--Nova: 返回镜像信息如格式、大小 Nova-Neutron: 5. 创建网络端口 Neutron--Nova: 返回端口ID和MAC地址 Nova-Cinder: 6. 创建并挂载卷可选 Cinder--Nova: 返回卷连接信息 Nova-Nova: 7. 调度计算节点调用Hypervisor启动VM Nova--Client: 返回虚拟机信息## 2. 实战代码示例模拟组件交互### 2.1 模拟 Keystone 认证与 Token 获取pythonimport requestsimport json# 模拟 Keystone 认证请求def authenticate_with_keystone(auth_url, username, password, project_name): 向 Keystone 发送认证请求获取服务 Token :param auth_url: Keystone 认证端点例如 http://10.0.0.1:5000/v3 :param username: 用户名例如 admin :param password: 密码 :param project_name: 项目名例如 demo :return: 认证成功后返回的 Token 字符串 auth_payload { auth: { identity: { methods: [password], password: { user: { name: username, domain: {id: default}, password: password } } }, scope: { project: { name: project_name, domain: {id: default} } } } } headers {Content-Type: application/json} try: response requests.post(f{auth_url}/auth/tokens, datajson.dumps(auth_payload), headersheaders) if response.status_code 201: # 从响应头中获取 Token token response.headers[X-Subject-Token] print(f[成功] 获取 Token: {token[:20]}...) return token else: print(f[失败] 认证错误: {response.status_code} - {response.text}) return None except requests.exceptions.RequestException as e: print(f[异常] 网络请求失败: {e}) return None# 使用示例if __name__ __main__: # 注意实际部署中请替换为真实端点 auth_url http://controller:5000/v3 token authenticate_with_keystone(auth_url, admin, secret, demo)### 2.2 模拟 Nova 与 Glance 的镜像交互pythonimport requestsimport jsondef get_image_info(glance_url, token, image_id): 通过 Glance API 获取指定镜像的元数据如格式、大小 :param glance_url: Glance 服务端点例如 http://10.0.0.1:9292 :param token: 之前从 Keystone 获取的有效 Token :param image_id: 镜像 UUID :return: 镜像元数字典包含 disk_format、container_format、size 等 headers { X-Auth-Token: token, Content-Type: application/json } try: # Glance v2 API 获取镜像详情 response requests.get(f{glance_url}/v2/images/{image_id}, headersheaders) if response.status_code 200: image_meta response.json() print(f[成功] 获取镜像信息:) print(f 名称: {image_meta.get(name, N/A)}) print(f 格式: {image_meta.get(disk_format, N/A)}) print(f 大小: {image_meta.get(size, 0)} 字节) return image_meta else: print(f[失败] 获取镜像错误: {response.status_code}) return None except requests.exceptions.RequestException as e: print(f[异常] 请求失败: {e}) return None# 模拟 Nova 核心逻辑启动虚拟机前检查镜像def nova_boot_vm(token, image_id, flavor_id, network_id): 模拟 Nova 创建虚拟机的核心步骤仅演示与 Glance 交互部分 :param token: 有效 Token :param image_id: 镜像 ID :param flavor_id: 规格 ID定义 CPU、内存等 :param network_id: 网络 ID print(\n Nova 启动虚拟机关联流程 ) # 步骤 1: 获取镜像元数据实际中还会校验镜像状态 glance_endpoint http://glance:9292 # 假设服务内部地址 image_info get_image_info(glance_endpoint, token, image_id) if not image_info: print(错误无法获取镜像信息停止创建虚拟机) return False # 步骤 2: 检查镜像是否可用例如 disk_format 是否为 raw/qcow2 valid_formats [raw, qcow2, iso] if image_info.get(disk_format) not in valid_formats: print(f错误不支持的镜像格式 {image_info.get(disk_format)}) return False # 步骤 3: 检查镜像大小是否超过 Flavor 的磁盘限制简化处理 flavor_disk_gb 20 # 假设规格磁盘大小为 20GB image_size_gb image_info[size] / (1024**3) # 字节转 GB if image_size_gb flavor_disk_gb: print(f错误镜像大小 {image_size_gb:.2f}GB 超过规格磁盘 {flavor_disk_gb}GB) return False print(f[成功] 镜像检查通过准备创建虚拟机 (image{image_id}, flavor{flavor_id})) # 后续步骤调用 Neutron 创建端口、调用 Cinder 创建卷、调度计算节点等 return True# 使用示例if __name__ __main__: # 假设已经通过 authenticate_with_keystone 获取了 token token gAAAAABmR0... # 实际应使用真实 Token image_uuid c9c3e8b0-1a2b-3c4d-5e6f-7a8b9c0d1e2f nova_boot_vm(token, image_uuid, m1.small, net-1234)## 3. 组件交互的关键细节### 3.1 Nova 如何调用 Neutron 创建网络端口当 Nova 准备启动虚拟机时它会向 Neutron 发送请求创建一个虚拟端口。这个端口会绑定到指定的网络并分配 IP 地址和 MAC 地址。关键步骤包括1. Nova 解析用户指定的网络 ID。2. 调用 Neutron API 创建端口port指定 network_id 和可选的安全组。3. Neutron 返回端口信息如 MAC 地址、IP 地址。4. Nova 将这些信息传递给 Hypervisor如 KVM用于虚拟机配置。### 3.2 Cinder 的卷挂载流程如果用户指定了额外的块存储卷Cinder 会参与以下流程1. Nova 通过 API 通知 Cinder 创建指定大小的卷。2. Cinder 在存储后端如 LVM、Ceph上分配空间并返回卷 ID。3. Nova 将卷挂载到计算节点通过 iSCSI 或 NFS 等协议。4. 虚拟机启动后卷显示为额外的磁盘设备如 /dev/vdb。### 3.3 错误处理与重试机制在实际生产环境中组件间的网络调用可能失败。Nova 内置了重试机制和状态机- 如果 Glance 响应超时Nova 会重试 3 次并记录错误日志。- 如果 Neutron 端口创建失败Nova 会清理已分配的资源如删除未使用的端口。- 所有关键操作都会写入 Nova 的数据库instances表确保重启后状态可恢复。## 4. 总结Nova 与 Glance、Neutron、Cinder、Keystone 的协作是 OpenStack 云平台稳定运行的核心。通过本文的实战代码和序列图我们可以看到1.Keystone 是所有交互的起点任何 API 调用都必须携带有效的 Token。2.Glance 提供虚拟机镜像的元数据Nova 在启动前必须检查镜像的格式和大小避免不兼容。3.Neutron 负责网络连接端口创建是虚拟机获得网络访问能力的关键。4.Cinder 增强存储灵活性允许虚拟机动态挂载持久化卷实现数据分离。5.错误处理至关重要组件间的异步调用需要健壮的重试和回滚机制。掌握这些交互细节不仅能帮助你在开发中调试问题还能让你在运维 OpenStack 时快速定位故障点。建议读者在实际环境中结合 OpenStack 命令行工具如openstack server create和日志文件/var/log/nova/nova-compute.log加深理解。
延伸阅读

更多相关文章

2026/9/11 3:26:46

OpenStack Nova 创建虚拟机

OpenStack Nova 创建虚拟机:从 API 到实例的深度解析 OpenStack Nova 是 OpenStack 生态中的核心计算服务,负责管理和调度虚拟机实例。理解 Nova 创建虚拟机的完整流程,对云平台运维、二次开发或故障排查至关重要。本文将从架构原理切入&…

2026/9/8 7:08:52

深入解析RapidIO CPPI模块:零拷贝通信与队列管理实战

1. 项目概述与核心价值 在嵌入式系统,尤其是多核DSP、网络处理器和雷达信号处理这类对数据吞吐量和延迟有严苛要求的领域,设备间的通信效率直接决定了整个系统的性能天花板。我们常常需要处理海量的数据流,比如基带I/Q数据、雷达回波信号或网…

2026/9/10 6:10:59

幻兽帕鲁存档迁移修复工具:5分钟解决角色丢失问题

幻兽帕鲁存档迁移修复工具:5分钟解决角色丢失问题 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedicated servers and from…

2026/9/12 10:05:23

软件质量保障实战:打破测试开发产品孤岛,实现三体合一

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 10:05:23

COMSOL多物理场仿真在压缩空气储能与天然气储气中的应用

1. 项目背景与核心价值压缩空气储能(CAES)和天然气岩穴储气是当前能源存储领域的两个关键技术方向。前者通过压缩空气储存电能,在用电高峰时释放压缩空气驱动发电机;后者则利用地下岩穴储存天然气,作为能源缓冲和战略储备。这两种技术都面临着…

2026/9/12 10:05:22

LiteMonitor:轻量级硬件监控工具的原理与应用

1. LiteMonitor初体验:极简主义的硬件监控方案第一次接触LiteMonitor是在寻找替代任务管理器的过程中。作为一款开源免费的硬件监控工具,它用0.8MB的安装包实现了CPU/内存/磁盘/网络等核心指标的实时可视化。最让我惊喜的是其资源占用——在i5-1135G7笔记…

2026/9/12 10:05:22

C#轻量级Socket接入服务器:SAEA高并发模型与自定义协议实践

C#做物联网接入服务器,最容易陷入的尴尬就是:框架换了一个又一个,代码越写越重,设备数量一多还是顶不住。我之前接到一个“硬件数据接收示例”的需求,数万台设备通过TCP上报数据,不需要Web页面,…

2026/9/12 10:00:22

SadTalker说话头完整部署指南:新手10分钟上手

SadTalker说话头完整部署指南:新手10分钟上手 【免费下载链接】SadTalker [CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcode.com/GitHub_…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码