OpenStack 生态全景:核心组件系统性梳理

OpenStack 生态全景:核心组件系统性梳理

什么是 OpenStack

OpenStack 是一套开源的云计算基础设施软件,提供 IaaS(基础设施即服务)能力。它不是一个单体应用,而是由一组松耦合的服务组件构成,每个组件负责一个特定的资源域,通过 REST API 和消息队列协作。

核心理念:一切皆资源,一切皆 API。


组件全景图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
┌─────────────────────────────────────────────────────────────────┐
│ 用户 / 运维人员 │
└──────────────────────────┬──────────────────────────────────────┘
│ REST API / CLI / SDK
┌──────────────────────────▼──────────────────────────────────────┐
│ Horizon(Dashboard) │
│ Web 管理控制台 │
└──────────────────────────┬──────────────────────────────────────┘

┌──────────────────────────▼──────────────────────────────────────┐
│ Keystone(认证服务) │
│ 统一身份认证 / Token / RBAC / Catalog │
└────┬──────────┬──────────┬──────────┬──────────┬────────────────┘
│ │ │ │ │
┌────▼───┐ ┌───▼────┐ ┌───▼────┐ ┌───▼────┐ ┌───▼────────────┐
│ Nova │ │Neutron │ │Cinder │ │ Glance │ │ Swift │
│ 计算 │ │ 网络 │ │ 块存储 │ │ 镜像 │ │ 对象存储 │
└────┬───┘ └───┬────┘ └───┬────┘ └────────┘ └────────────────┘
│ │ │
┌────▼─────────▼──────────▼──────────────────────────────────────┐
│ Placement(资源追踪) │
│ 资源提供者 / 资源类 / 分配记录 │
└─────────────────────────────────────────────────────────────────┘

┌────▼───────────────────────────────────────────────────────────┐
│ Heat(编排服务) │
│ 基础设施即代码 / 模板驱动的资源编排 │
└────────────────────────────────────────────────────────────────┘

┌────▼───────────────────────────────────────────────────────────┐
│ Ceilometer / Aodh(监控告警) │
│ 指标采集 / 事件驱动 / 告警触发 │
└────────────────────────────────────────────────────────────────┘

┌────▼───────────────────────────────────────────────────────────┐
│ Ironic(裸金属服务) │
│ 物理机纳管 / PXE 启动 / 裸金属部署 │
└────────────────────────────────────────────────────────────────┘

核心组件一览表

组件 代号 职责 核心进程
Keystone 认证服务 身份认证、授权、服务目录 keystone-api
Nova 计算服务 虚拟机生命周期管理 nova-api, nova-compute, nova-conductor, nova-scheduler
Neutron 网络服务 SDN 网络、子网、路由、安全组 neutron-server, neutron-agent
Cinder 块存储服务 云硬盘创建、挂载、快照 cinder-api, cinder-volume, cinder-scheduler
Glance 镜像服务 虚拟机镜像存储与分发 glance-api
Swift 对象存储 海量非结构化数据存储 swift-proxy, swift-object
Placement 资源追踪 计算资源库存与分配追踪 placement-api
Heat 编排服务 基础设施模板化编排 heat-api, heat-engine
Ceilometer 监控服务 指标采集与计量 ceilometer-agent
Ironic 裸金属服务 物理机纳管与部署 ironic-api, ironic-conductor
Horizon 控制台 Web 管理界面 Django WSGI

组件间通信模式

OpenStack 组件间有两种主要通信方式:

1. REST API(同步)

  • 跨组件调用,如 Nova 调用 Neutron 创建网络端口
  • 通过 Keystone Token 鉴权
  • 使用 keystoneauth1 库封装

2. RPC over AMQP(异步)

  • 同一组件内部进程间通信,如 nova-api → nova-conductor → nova-compute
  • 基于 oslo.messaging
  • 默认使用 RabbitMQ 作为消息中间件
  • 支持 call(同步等待响应)和 cast(异步不等待)
1
2
3
4
5
# nova 内部 RPC 调用示例
# nova/compute/rpcapi.py
def build_and_run_instance(self, ctxt, instance, ...):
# cast = 异步,不等返回值
cctxt.cast(ctxt, 'build_and_run_instance', ...)

一次创建虚拟机的完整调用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
用户 POST /servers


nova-api(参数校验、配额检查)
│ RPC call

nova-conductor(数据库操作代理)
│ RPC call

nova-scheduler(选择宿主机:FilterScheduler)
│ RPC cast

nova-compute(目标宿主机)
├── 调用 Glance API 下载镜像
├── 调用 Neutron API 创建网络端口
├── 调用 Cinder API 创建/挂载卷(可选)
├── 调用 Placement API 分配资源
└── 调用 libvirt 创建虚拟机

数据库架构

每个组件维护自己独立的数据库(通常是 MySQL/MariaDB):

组件 数据库名 核心表
Keystone keystone user, project, role, token
Nova nova, nova_api, nova_cell0 instances, block_device_mapping, migrations
Neutron neutron networks, subnets, ports, routers
Cinder cinder volumes, snapshots, backups
Glance glance images, image_properties
Placement placement resource_providers, inventories, allocations

Nova 从 Queens 版本开始引入 Cell v2 架构,数据库拆分为 nova_api(全局)和 nova_cellX(每个 Cell 独立)。


版本演进关键节点

版本 时间 重要变化
Kilo 2015 Nova 引入 Cells v1
Newton 2016 Neutron DVR 成熟
Ocata 2017 Placement API 从 Nova 独立
Queens 2018 Nova Cells v2 正式落地
Rocky 2018 Nova 支持 live migration with NUMA
Train 2019 Ironic 支持 BIOS 配置
Yoga 2022 全面支持 Python 3.9+
Caracal 2024 当前最新稳定版

学习路径建议

  1. 先 Keystone — 理解认证体系,所有组件都依赖它
  2. 再 Nova — 最核心,理解虚拟机完整生命周期
  3. 然后 Neutron — 网络是最复杂的部分,SDN 概念多
  4. 接着 Cinder + Glance — 存储体系
  5. 最后 Placement + Heat — 资源调度与编排

后续每篇文章将深入解析每个组件的架构、源码关键路径和二次开发要点。