Horizon、CLI 或应用向 Nova API 提交实例名、Flavor、Image、Network 和密钥等参数。
外观
外观
约 3327 字大约 11 分钟
OpenStack私有云NovaNeutron
2026-07-30
[Windows PowerShell] wsl ~:打开本机默认的 WSL2 Ubuntu;本课在 WSL 中完成架构与工作流练习,不需要 SSH 登录 ECS。前九次课一直站在“云服务器使用者”的位置:购买一台 ECS,登录系统,再部署和维护服务。从本次课开始,我们把视角移到云平台内部,看看一台云主机是怎样被多个服务共同创建出来的。
先用一条完整请求建立全景,后面再逐层拆开每项服务。
从用户提交参数开始,沿身份、调度、镜像、网络和计算任务观察实例如何从 BUILD 走向 ACTIVE。
Horizon、CLI 或应用向 Nova API 提交实例名、Flavor、Image、Network 和密钥等参数。
本课不在 2 核 2 GiB ECS 上完整安装 OpenStack。完整控制面包含数据库、消息队列、身份、计算、网络、镜像、调度等多项服务,小规格单机很难提供稳定而有意义的实验。我们选择更适合当前条件的学习目标:
关键提醒
本课的目标是读懂云平台,不是假装部署了云平台。官方页面截图能证明文档如何定义服务和状态;课程互动能证明你完成了架构推演,它们都不能证明本机正在运行 OpenStack。
先不安装 OpenStack。我们从一次创建实例的请求出发,依次回答身份、规格、镜像、网络、调度和计算由谁负责,再用状态与官方 API 页面核对这条请求链。
实训结果是一份服务映射与故障定位表。表中的每个判断都要写出依据,不能把“文档这样描述”写成“本机已经运行”。
OpenStack(由一组相互协作的开源服务组成的云计算平台,主要用于建设和管理 IaaS 云)。比起一套装完即止的单体应用,它更像一个按职能分工的云平台组件库。
OpenStack 官方 2026.1 版本列出了大量的子项目。初学者不必被庞大的清单吓倒,先看懂这 8 个核心角色:
| 服务 | 常见项目名 | 核心职责 | 创建实例时提供什么 |
|---|---|---|---|
| 身份认证 | Keystone | 统一管理用户、项目、角色、令牌与服务入口 | 验证“是谁在哪个项目里发起请求” |
| 计算 | Nova | 负责实例生命周期调度与计算任务协调 | 接收创建指令并调度其他服务响应 |
| 资源候选 | Placement | 跟踪计算节点资源库存,并返回满足需求的分配候选 | 为 Nova 调度器提供可用资源候选 |
| 镜像 | Glance | 系统镜像的登记、检索与存储管理 | 提供虚拟机启动所需的操作系统镜像 |
| 网络 | Neutron | 管理虚拟网络、子网、端口、路由与安全组 | 为新实例分配虚拟网卡与网络联通 |
| 块存储 | Cinder | 云硬盘与数据卷的生命周期管理 | 按需挂载独立的数据云盘 |
| 控制台 | Horizon | 面向用户的 Web 图形界面 | 把用户的点击转化为后端 API 调用 |
| 消息与数据库 | RabbitMQ、MariaDB 等 | 跨服务传递异步消息、持久化平台元数据 | 支撑底层服务间协作,不对租户暴露 |

在实际架构中,绝不能把 Nova 简单等同于整个 OpenStack,也不能以为 Horizon 承担了底层虚拟机创建逻辑。Horizon 只是前台入口,真正的算力、网络和磁盘分配全由后端服务协同完成。
在阿里云控制台点选购买 ECS 时,我们需要指定镜像、规格、网络、安全组与登录密钥。OpenStack 的后台处理逻辑完全一致,每一项操作都对应明确的问题与服务:
| 问题 | OpenStack 对应的概念 | 主要负责服务 |
|---|---|---|
| 谁在请求,归属哪个项目? | 用户、项目、Token | Keystone |
| 需要多大 CPU 和内存? | Flavor(规格模板) | Nova |
| 用什么操作系统镜像启动? | Image | Glance |
| 绑定到哪张虚拟网络? | Network、Subnet、Port | Neutron |
| 哪些计算节点具有所需资源? | Resource Provider、Allocation Candidate | Placement |
| 由谁选择节点并在底层拉起虚拟机? | Scheduler、Server、Hypervisor Task | Nova Scheduler、Nova Compute |
其中 Flavor(描述虚拟 CPU、内存和磁盘等虚拟硬件规格的资源模板),Image(用于创建或重构实例的系统镜像),Port(连接实例虚拟网卡与虚拟网络的端口对象)。
遇到排错时,找准对应服务是关键。如果是“镜像下载超时”,去查安全组或者磁盘配额毫无意义;如果是“宿主机资源不足”,也不该去归咎镜像文件损坏。
用户向 Nova 提交创建请求后,平台绝不会让 API 一直阻塞等待底层的镜像下载、网络分配和虚拟机拉起。API 校验通过后会立即返回,并将实例置于 BUILD 状态,后台再异步完成实际的搭建动作。
Nova Compute API 定义的标准任务生命周期如下:
BUILD
scheduling 选择最佳计算节点
networking 配置虚拟网卡与网络
block_device_mapping 挂载本地磁盘或 Cinder 卷
spawning 在 Hypervisor 上拉起虚拟机
ACTIVE 成功运行,可尝试连接
ERROR 过程出错,创建中断这里的缩进不是说每一步永远严格串行,而是帮助初学者把状态和负责对象对应起来。生产环境还会受到驱动、网络实现、卷启动方式和运维配置影响。

官方页面还说明,创建是异步过程,可以通过 GET /servers/{server_id} 查询进度。所以别看到 API 请求已被接受,就急着下结论说“实例已经可以登录”。
观看时留意:一次创建实例请求会依次用到哪些服务,每个服务回答什么问题?
与本课的关系:视频较早,只用于理解稳定的职责与工作流,不照搬界面、命令和版本细节。
没有管理员权限时,学生通常只能看到实例状态、任务提示和有限的事件信息。即使如此,状态仍能帮助安排检查顺序:
| 现象 | 当前能说明 | 下一条证据 |
|---|---|---|
长时间 BUILD,任务为 scheduling | 请求可能还在资源选择阶段 | 规格、可用区、配额和调度事件 |
BUILD,任务为 networking | 平台正在准备网络资源 | 网络、子网、端口和网络服务事件 |
BUILD,任务为 block_device_mapping | 正在准备本地盘或卷 | 卷状态、镜像可见性和块存储事件 |
BUILD,任务为 spawning | 已接近计算节点创建阶段 | 计算服务、镜像获取和虚拟化层事件 |
ACTIVE | 平台认为实例已运行 | IP、端口、安全组、系统服务和实际 SSH |
ERROR | 创建没有完成 | 故障消息、request ID 和管理员日志 |
安全边界
ACTIVE 只说明平台认为实例在运行,离 SSH 成功还有距离。实例状态来自云平台,SSH 还要经过地址、网络、安全组、系统监听、账号和凭据。不要因为 SSH 失败就直接删除实例或重建控制面。
观看时留意:API 请求、服务调用和消息传递怎样影响实例状态变化?
与本课的关系:把视频中的组件名称对应到本课服务图即可,不需要安装完整 OpenStack。
Horizon、OpenStackClient 和应用程序最终都在调用服务 API,只是面向的使用方式不同:
Horizon 页面 ─┐
openstack CLI ├─> Keystone 令牌与服务目录 ─> Nova / Neutron / Glance / Cinder API
应用程序 API ─┘如果 Horizon 页面报错,而 CLI 和 API 正常,问题可能位于界面或会话层;如果三种入口都在同一个 API 动作失败,则应继续查看服务端请求和依赖。界面按钮不是平台能力本身。
在有真实 OpenStack 环境时,常见只读命令包括:
[WSL] openstack token issue它会请求 Keystone 签发或显示当前令牌信息,用于确认凭据和项目上下文。不要把输出中的令牌完整放进作业。
[WSL] openstack catalog list它读取服务目录,查看当前云公开了哪些服务入口。目录里出现 compute 不等于 Nova 后端一定健康。
[WSL] openstack server show <实例名或ID>它读取一个实例的状态与属性。只有获得课程 OpenStack 账号时才执行;本课没有账号时,不在报告中编造输出。
本课实训不需要云平台账号。进入 WSL 的 lab-10 目录:
[WSL] cd ~/cloud-course/lab-10这一步切换到本课目录。可用 pwd 确认没有进错路径。
[WSL] mkdir -p answers创建答题目录。已有目录时不会报错。
[WSL] cp starter/service-map.tsv answers/service-map.tsv这一步把服务职责表复制到答题目录。只编辑 answers/ 中的副本,保留原始模板作为对照。
[WSL] cp starter/instance-workflow.tsv answers/instance-workflow.tsv这一步复制实例工作流表。随后为每个阶段补上负责服务、当前证据和下一条检查。
[WSL] bash verify.sh脚本只检查表格结构、必需阶段、服务名和是否仍有空白项,不判断开放题文字是否合理。最终结论仍需根据官方资料人工复核。
完整步骤见实训 10:OpenStack 服务映射与实例工作流。

输入不含账号和令牌的实例状态案例,让助教区分身份、调度、镜像、网络、存储与计算职责。
本实验的原始聊天仅保存在当前标签页,不会写入全局课程助教上下文。
每个判断都使用“三列表”:
| 当前证据 | 已经证明 | 还需要什么 |
|---|---|---|
状态为 BUILD,任务为 networking | 请求已经进入网络准备阶段 | 网络端口、Neutron 事件或管理员日志 |
状态为 ACTIVE | 平台认为实例运行 | 实际 IP、访问控制、系统端口和 SSH 请求 |
服务目录有 image | Keystone 返回了镜像服务入口 | Glance API 与具体镜像是否可用 |
报告中不要写“Nova 负责一切”“状态正常所以网络正常”。服务职责越清楚,排障范围越小。
本课只产生本地答题表和 Word 报告,不创建云资源,也不启动后台服务。完成后保留:
answers/service-map.tsvanswers/instance-workflow.tsv第10次课_OpenStack架构分析报告.docx删除临时测试副本前先确认路径:
[WSL] realpath ./answers它会显示答题目录的绝对路径。确认它位于 lab-10 后,再清理明确的临时副本,不要误删报告和最终答案。
提交文件名:
班级_学号_姓名_第10次课_OpenStack架构分析报告.docx只提交一个 Word 到智慧职教“第10次课”。截图中不出现令牌、账号、完整地址或浏览器个人信息。
检查服务职责、实例工作流、证据边界、平台限制和提交规范。
用 6 道题确认核心服务职责、异步状态和证据边界。
BUILD 中的任务状态能缩小检查范围。ACTIVE 是平台状态,不等于 SSH、应用和公网路径全部正常。下一次课把这些角色映射到阿里云 ECS、VPC、安全组、云盘、快照和 OSS,建立私有云与公有云之间的概念桥梁。
以下资料在 2026-07-28 核对:
助教会读取当前课程页面和结构化学习记录,但不会读取正文实验框里的原始聊天。