前言
在部署OpenStack之前,你必须理解一个核心问题:OpenStack的组件不是必须全部安装的。
理解各组件的用途、依赖关系,以及如何分配到不同的服务器上,是成功部署OpenStack的关键。
本文将详细讲解:
- OpenStack有哪些组件
- 每个组件的作用和依赖
- 必须安装的 vs 可选安装的
- 控制节点必须装的组件
- 计算节点必须装的组件
- All-in-One最小化部署
- 多节点分离部署
一、OpenStack组件全景图
1.1 OpenStack核心组件一览
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
|
┌─────────────────────────────────────────────────────────────────────────┐
│ OpenStack 组件全家福 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Horizon │ │ Keystone │ │ Glance │ │
│ │ Web界面 │ │ 身份认证 │ │ 镜像仓库 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ↓ ↓ ↓ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Nova │ │ Neutron │ │ Cinder │ │
│ │ 计算服务 │ │ 网络服务 │ │ 块存储 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │Placement │ │ Swift │ │ Heat │ │
│ │ 资源追踪 │ │ 对象存储 │ │ 编排服务 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Ceilometer │ │ Ironic │ │ Trove │ │
│ │ 监控计量 │ │ 裸金属 │ │ 数据库 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
|
1.2 组件分类
| 类别 |
组件 |
说明 |
| 核心组件 |
Keystone, Nova, Neutron, Glance |
没有它们,OpenStack无法运行 |
| 重要组件 |
Cinder, Swift, Placement |
大部分场景需要 |
| 可选组件 |
Horizon, Heat, Ceilometer |
可以后加或用CLI替代 |
| 高级组件 |
Ironic, Trove, Magnum, Sahara |
特定场景使用 |
二、必须安装的核心组件
2.1 必须组件一览
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
|
✅ 必须安装(没有它们,OpenStack无法运行):
┌─────────────────────────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Keystone │ ← │ 任何组件 │ │ │ │
│ │ 身份认证 │ │ 都需要它 │ │ │ │
│ └──────────┘ └──────────┘ │ │ │
│ │ │ │ │
│ │ │ │ │
│ ┌──────────┐ ┌──────────┐ │ │ │
│ │ Nova │ │ Placement│ │ │ │
│ │ 计算服务 │ ← │ 资源追踪 │ ← │ nova-api │ │
│ └──────────┘ └──────────┘ │ │ │
│ │ │ │ │
│ │ │ │ │
│ ┌──────────┐ ┌──────────┐ │ │ │
│ │ Glance │ │ Neutron │ │ │ │
│ │ 镜像服务 │ │ 网络服务 │ │ │ │
│ └──────────┘ └──────────┘ │ │ │
│ └──────────┘ │
│ │
│ 最小化运行需要:Keystone + Nova + Placement + Glance + Neutron │
│ │
└─────────────────────────────────────────────────────────────────┘
|
2.2 必须组件详解
① Keystone(身份认证服务)⭐ 必须安装
为什么必须?
- 所有OpenStack组件都依赖Keystone进行认证
- 没有Keystone,其他组件无法验证请求
- 类似于Linux系统中的/etc/passwd
功能:
- 用户认证(User)
- 项目管理(Project/Tenant)
- 角色权限(Role)
- 服务目录(Service Catalog)
- Token管理
依赖:
- 数据库(MySQL/MariaDB)
- 消息队列(RabbitMQ)
组件组成:
1
2
|
keystone
└── wsgi-app (Apache/Nginx)
|
② Nova(计算服务)⭐ 必须安装
为什么必须?
- Nova是OpenStack的核心,没有它无法创建虚拟机
- 管理虚拟机的整个生命周期
Nova子服务:
| 子服务 |
功能 |
必须安装位置 |
| nova-api |
接收API请求 |
控制节点 |
| nova-scheduler |
调度虚拟机到合适主机 |
控制节点 |
| nova-conductor |
安全访问数据库 |
控制节点 |
| nova-novncproxy |
VNC代理 |
控制节点/计算节点 |
| nova-compute |
运行虚拟机 |
计算节点 |
依赖:
- Keystone(认证)
- Glance(镜像)
- Neutron(网络)
- Placement(资源追踪)
- 数据库
- 消息队列
组件组成:
1
2
3
4
5
6
7
8
9
|
Nova (控制节点):
├── nova-api ← 必须
├── nova-scheduler ← 必须
├── nova-conductor ← 必须
├── nova-novncproxy ← 推荐
└── novaPlacement ← 必须
Nova (计算节点):
└── nova-compute ← 必须(只有这个)
|
③ Placement(资源追踪服务)⭐ 必须安装
为什么必须?
- 从Newton版本开始,必须安装
- 追踪所有资源的使用情况(CPU、内存、磁盘)
- Nova调度器依赖它来选择合适的宿主机
功能:
依赖:
**注意:**Placement曾经是Nova的一部分(nova-placement-api),现在独立出来了。
④ Glance(镜像服务)⭐ 必须安装
为什么必须?
- 存储和管理虚拟机镜像
- Nova创建虚拟机时需要从中获取镜像
功能:
- 镜像上传和存储
- 镜像格式转换
- 镜像元数据管理
- 镜像快照
支持的后端:
依赖:
⑤ Neutron(网络服务)⭐ 必须安装
为什么必须?
- 管理OpenStack的网络连接
- 没有它,虚拟机无法通信
Neutron子服务:
| 子服务 |
功能 |
必须安装位置 |
| neutron-server |
API服务 |
控制节点 |
| neutron-dhcp-agent |
DHCP服务 |
控制节点 |
| neutron-l3-agent |
路由/NAT |
控制节点 |
| neutron-openvswitch-agent |
OVS代理 |
计算节点/控制节点 |
| neutron-linuxbridge-agent |
网桥代理 |
计算节点/控制节点 |
| neutron-metering-agent |
流量计量 |
可选 |
网络类型:
- Provider Network(桥接到物理网络)
- Self-Service Network(VXLAN/GRE隧道)
- Flat Network(无VLAN)
依赖:
2.3 必须组件的依赖关系
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
|
┌─────────────┐
│ MySQL │
│ 数据库 │
└──────┬──────┘
│
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Keystone │ │ Placement │ │ Glance │
│ (认证) │ │ (资源追踪) │ │ (镜像) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ │ │
▼ │ ▼
┌─────────────────────────────┐ │
│ Nova │ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ API │ │Sched│ │Cond │ │ │
│ └─────┘ └─────┘ └─────┘ │ │
└─────────────┬───────────────┘ │
│ │
▼ │
┌───────────┐ │
│ Neutron │ │
│ (网络) │ │
└─────┬─────┘ │
│ │
▼ ▼
┌─────────────────────────────┐
│ RabbitMQ │
│ 消息队列 │
└─────────────────────────────┘
|
三、可选组件详解
3.1 可选组件一览
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
○ 可选组件(没有它们,OpenStack也能运行):
┌─────────────────────────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Horizon │ │ Cinder │ │ Swift │ │
│ │ Web界面 │ │ 块存储 │ │ 对象存储 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Heat │ │Ceilometer│ │ Ironic │ │
│ │ 编排 │ │ 监控 │ │ 裸金属 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Trove │ │ Magnum │ │ Sahara │ │
│ │ 数据库 │ │容器编排 │ │ 大数据 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
3.2 Horizon(Web界面)— 推荐安装
功能:
- Web方式管理OpenStack
- 可视化创建虚拟机、网络、存储
- 适合入门和日常管理
为什么不必须?
- 可以完全用CLI命令替代
- 经验丰富的运维人员更倾向CLI
- API可以直接调用
安装位置: 控制节点
3.3 Cinder(块存储服务)— 大部分场景需要
功能:
- 为虚拟机提供持久化块存储
- 类似云硬盘(AWS EBS)
- 支持多种后端
使用场景:
存储后端:
| 后端 |
说明 |
成本 |
| LVM |
本地逻辑卷 |
免费 |
| Ceph RBD |
分布式存储 |
需要多节点 |
| NFS |
网络文件系统 |
中等 |
| iSCSI |
商业存储 |
高 |
| NFS |
开源方案 |
免费 |
Cinder子服务:
| 子服务 |
功能 |
位置 |
| cinder-api |
API服务 |
控制节点 |
| cinder-volume |
卷管理 |
控制节点/存储节点 |
| cinder-scheduler |
调度 |
控制节点 |
| cinder-backup |
备份 |
存储节点 |
依赖: Keystone, 数据库, 消息队列
3.4 Swift(对象存储)— 特定场景需要
功能:
- RESTful API访问的对象存储
- 分布式、高可用
- 类似AWS S3
使用场景:
与Cinder的区别:
| 特性 |
Cinder |
Swift |
| 存储类型 |
块设备(硬盘) |
对象(文件) |
| 访问方式 |
挂载到VM |
API直接访问 |
| 协议 |
iSCSI, FC |
HTTP REST API |
| 典型用途 |
数据库 |
图片、视频备份 |
Swift子服务:
| 子服务 |
功能 |
位置 |
| swift-proxy |
代理服务 |
控制节点 |
| swift-account |
账户服务 |
存储节点 |
| swift-container |
容器服务 |
存储节点 |
| swift-object |
对象服务 |
存储节点 |
3.5 Heat(编排服务)— 推荐安装
功能:
- 基础设施即代码(IaC)
- 使用YAML模板定义资源
- 自动化部署复杂架构
使用场景:
示例模板:
1
2
3
4
5
6
7
8
9
|
heat_template_version: 2021-04-16
resources:
my_server:
type: OS::Nova::Server
properties:
image: Ubuntu 22.04
flavor: m1.large
networks:
- network: private-net
|
3.6 Ceilometer/Gnocchi(监控计量)— 可选
功能:
组件:
- Ceilometer:数据收集
- Gnocchi:时序数据库和API
- Panko:事件存储
3.7 高级组件
| 组件 |
功能 |
使用场景 |
| Ironic |
裸金属服务 |
直接管理物理服务器 |
| Trove |
数据库服务 |
托管数据库实例 |
| Magnum |
容器编排 |
管理和调度容器集群 |
| Sahara |
大数据服务 |
Hadoop、Spark集群 |
| Designate |
DNS服务 |
自动管理DNS记录 |
| Barbican |
密钥管理 |
密钥和证书管理 |
| Mistral |
工作流 |
复杂业务流程 |
| Zun |
容器服务 |
直接运行Docker容器 |
四、控制节点必须装的组件
4.1 控制节点概述
控制节点是OpenStack的"大脑",负责:
- API服务(接收请求)
- 数据库操作
- 消息队列处理
- 调度决策
- 管理计算节点
4.2 控制节点必须安装的组件
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
39
40
41
42
43
44
45
|
┌─────────────────────────────────────────────────────────────────┐
│ 控制节点(Controller) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 基础服务 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ✅ MySQL/MariaDB 数据库 │ │
│ │ ✅ RabbitMQ 消息队列 │ │
│ │ ✅ Memcached Token缓存 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 核心组件 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ✅ Keystone 身份认证(必须) │ │
│ │ ✅ Nova-API 计算API(必须) │ │
│ │ ✅ Nova-Scheduler 调度器(必须) │ │
│ │ ✅ Nova-Conductor 数据库中介(必须) │ │
│ │ ✅ Placement 资源追踪(必须) │ │
│ │ ✅ Glance-API 镜像API(必须) │ │
│ │ ✅ Neutron-Server 网络API(必须) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 网络代理(必须有) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ✅ Neutron-DHCP-Agent DHCP服务 │ │
│ │ ✅ Neutron-L3-Agent 路由/NAT │ │
│ │ ✅ Neutron-OVS-Agent 虚拟交换机 │ │
│ │ 或 │ │
│ │ ✅ Neutron-Linuxbridge-Agent Linux网桥 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 可选组件 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ○ Horizon Web界面 │ │
│ │ ○ Cinder-API 块存储API │ │
│ │ ○ Cinder-Scheduler 存储调度 │ │
│ │ ○ Heat-API 编排API │ │
│ │ ○ Nova-Novncproxy VNC代理(推荐安装) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
4.3 必须安装的完整列表
基础服务(必须):
| 组件 |
说明 |
必须性 |
| MySQL/MariaDB |
数据库 |
⭐ 必须 |
| RabbitMQ |
消息队列 |
⭐ 必须 |
| Memcached |
Token缓存 |
推荐 |
| NTP |
时间同步 |
推荐 |
核心服务(必须):
| 组件 |
必须性 |
| keystone(Apache/Nginx) |
⭐ 必须 |
| nova-api |
⭐ 必须 |
| nova-scheduler |
⭐ 必须 |
| nova-conductor |
⭐ 必须 |
| nova-novncproxy |
推荐 |
| placement-api |
⭐ 必须 |
| glance-api |
⭐ 必须 |
| glance-registry |
⭐ 必须 |
| neutron-server |
⭐ 必须 |
网络服务(必须):
| 组件 |
必须性 |
| neutron-dhcp-agent |
⭐ 必须 |
| neutron-l3-agent |
⭐ 必须 |
| neutron-openvswitch-agent 或 neutron-linuxbridge-agent |
⭐ 必须 |
| neutron-metadata-agent |
推荐 |
4.4 控制节点资源需求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
┌─────────────────────────────────────────────────────────────────┐
│ 控制节点资源配置 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 最低配置(能运行): │
│ ├── CPU:4核心 │
│ ├── 内存:8GB │
│ └── 磁盘:50GB │
│ │
│ 推荐配置(生产环境): │
│ ├── CPU:8-16核心 │
│ ├── 内存:16-32GB │
│ └── 磁盘:100GB+ SSD │
│ │
│ 高可用配置: │
│ ├── CPU:16-32核心 │
│ ├── 内存:32-64GB │
│ └── 磁盘:200GB+ NVMe SSD │
│ │
└─────────────────────────────────────────────────────────────────┘
|
五、计算节点必须装的组件
5.1 计算节点概述
计算节点是OpenStack的"肌肉",负责:
- 运行虚拟机(KVM/Xen/VMware)
- 提供计算资源(CPU、内存)
- 连接虚拟网络
5.2 计算节点必须安装的组件
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
|
┌─────────────────────────────────────────────────────────────────┐
│ 计算节点(Compute) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 核心组件 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ✅ nova-compute 虚拟机管理(必须) │ │
│ │ ✅ neutron-ovs-agent 网络代理(必须) │ │
│ │ 或 │ │
│ │ ✅ neutron-linuxbridge-agent │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 虚拟化平台 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ✅ KVM/QEMU 主流选择 │ │
│ │ 或 │ │
│ │ ○ VMware ESXi 商业方案 │ │
│ │ ○ Hyper-V Windows环境 │ │
│ │ ○ Xen 特定场景 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 辅助服务 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ○ nova-compute-libvirt Libvirt连接 │ │
│ │ ○ neutron-metadata-agent 元数据服务 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
5.3 最小化计算节点
计算节点只需要两个核心组件:
最小必须安装:
| 组件 |
必须性 |
说明 |
| nova-compute |
⭐ 必须 |
运行KVM,创建虚拟机 |
| neutron-linuxbridge-agent 或 neutron-openvswitch-agent |
⭐ 必须 |
网络代理 |
如果使用其他虚拟化:
| 虚拟化 |
nova-compute版本 |
| KVM/QEMU |
nova-compute-kvm |
| VMware |
nova-compute-vmware |
| Hyper-V |
nova-compute-hyperv |
| Xen |
nova-compute-xenserver |
5.4 计算节点资源需求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
┌─────────────────────────────────────────────────────────────────┐
│ 计算节点资源配置 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 最低配置(能运行虚拟机): │
│ ├── CPU:4核心(支持VT-x/AMD-V) │
│ ├── 内存:8GB(预留2GB给系统) │
│ └── 磁盘:100GB │
│ │
│ 推荐配置(生产环境): │
│ ├── CPU:8-16核心 │
│ ├── 内存:32-128GB │
│ └── 磁盘:500GB+ SSD(系统)+ 数据盘 │
│ │
│ 高密度配置: │
│ ├── CPU:32-64核心 │
│ ├── 内存:256-512GB │
│ └── 磁盘:多盘位NVMe SSD │
│ │
└─────────────────────────────────────────────────────────────────┘
|
5.5 计算节点详细配置
KVM安装清单:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 操作系统
Ubuntu 22.04 Server / CentOS Stream
# KVM虚拟化
apt install qemu-kvm libvirt-daemon-system
# OpenStack组件
apt install nova-compute
apt install neutron-linuxbridge-agent
# 或
apt install neutron-openvswitch-agent
# 可选:Libvirt配置
apt install libvirt-clients
|
Nova-Compute配置:
1
2
3
4
5
6
7
8
9
|
# /etc/nova/nova.conf
[libvirt]
virt_type = kvm
cpu_mode = host-passthrough
[neutron]
# 如果使用OVS
# 如果使用Linuxbridge
|
六、最小化部署方案
6.1 All-in-One 最小化方案
场景: 学习、个人Homelab、小规模测试
架构:
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
|
┌─────────────────────────────────────────────────────────────────┐
│ 单节点(All-in-One) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 控制节点 │ │
│ │ ├── MySQL/MariaDB │ │
│ │ ├── RabbitMQ │ │
│ │ ├── Keystone │ │
│ │ ├── Nova(API/Scheduler/Conductor) │ │
│ │ ├── Placement │ │
│ │ ├── Glance │ │
│ │ ├── Neutron(Server + Agents) │ │
│ │ ├── Horizon(可选) │ │
│ │ └── Cinder(可选) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 计算节点 │ │
│ │ ├── nova-compute │ │
│ │ └── neutron-linuxbridge-agent │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 注意:控制节点服务 + 计算节点服务安装在同一台机器上 │
│ │
└─────────────────────────────────────────────────────────────────┘
|
安装的组件:
| 组件 |
必须/可选 |
| MySQL |
必须 |
| RabbitMQ |
必须 |
| Memcached |
推荐 |
| Keystone |
必须 |
| nova-api |
必须 |
| nova-scheduler |
必须 |
| nova-conductor |
必须 |
| nova-compute |
必须 |
| placement-api |
必须 |
| glance-api |
必须 |
| neutron-server |
必须 |
| neutron-dhcp-agent |
必须 |
| neutron-l3-agent |
必须 |
| neutron-linuxbridge-agent |
必须 |
| Horizon |
推荐 |
| Cinder |
可选 |
| Heat |
可选 |
最低资源需求:
1
2
3
|
CPU:4核心(支持VT-x)
内存:8GB(推荐16GB)
磁盘:60GB
|
可以运行的虚拟机:
- 1-2台微型虚拟机(1vCPU/512MB)
- 或1台小型虚拟机(2vCPU/2GB)
6.2 两节点方案
场景: 小规模生产、学习多节点
架构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
┌─────────────────────────────────────────────────────────────────┐
│ 两节点部署架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ 控制节点 │ │ 计算节点 │ │
│ ├─────────────────────────┤ ├─────────────────────────┤ │
│ │ MySQL │ │ │ │
│ │ RabbitMQ │ │ nova-compute │ │
│ │ Keystone │◄──►│ neutron-linuxbridge │ │
│ │ Nova(控制服务) │ │ │ │
│ │ Placement │ │ │ │
│ │ Glance │ │ │ │
│ │ Neutron(API+Agents) │ │ │ │
│ │ Horizon(可选) │ │ │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ │
│ ←─────── 网络通信 ────────→ │
│ ←─────── 消息队列 ────────→ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
控制节点服务:
| 组件 |
说明 |
| MySQL |
数据库 |
| RabbitMQ |
消息队列 |
| Keystone |
身份认证 |
| nova-api |
API |
| nova-scheduler |
调度 |
| nova-conductor |
数据库中介 |
| placement-api |
资源追踪 |
| glance-api |
镜像 |
| neutron-server |
网络API |
| neutron-dhcp-agent |
DHCP |
| neutron-l3-agent |
路由 |
| neutron-linuxbridge-agent |
网络代理 |
| Horizon |
Web界面(可选) |
计算节点服务:
| 组件 |
说明 |
| nova-compute |
虚拟机运行 |
| neutron-linuxbridge-agent |
网络代理 |
| libvirtd |
虚拟化守护进程 |
6.3 三节点高可用方案
场景: 小规模生产、高可用需求
架构:
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
|
┌─────────────────────────────────────────────────────────────────┐
│ 三节点高可用架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 控制节点 1 │ │ 控制节点 2 │ │ 控制节点 3 │ │
│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │
│ │ MySQL (Galera) │ │ MySQL (Galera) │ │ MySQL (Galera) │ │
│ │ RabbitMQ (集群) │ │ RabbitMQ (集群) │ │ RabbitMQ (集群) │ │
│ │ Keystone │ │ Keystone │ │ Keystone │ │
│ │ Nova │ │ Nova │ │ Nova │ │
│ │ Placement │ │ Placement │ │ Placement │ │
│ │ Glance │ │ Glance │ │ Glance │ │
│ │ Neutron │ │ Neutron │ │ Neutron │ │
│ │ Horizon │ │ Horizon │ │ Horizon │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └──────────────────────┼──────────────────────┘ │
│ │ │
│ ┌──────────────┴──────────────┐ │
│ │ 网络/存储 │ │
│ └──────────────┬──────────────┘ │
│ │ │
│ ┌─────────────────┐ ┌──────────┴─────────┐ ┌─────────────────┐ │
│ │ 计算节点 1 │◄─┤ 计算节点 2 │◄─┤ 计算节点 3 │ │
│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │
│ │ nova-compute │ │ nova-compute │ │ nova-compute │ │
│ │ neutron-agent │ │ neutron-agent │ │ neutron-agent │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
七、组件部署位置总结
7.1 组件部署对照表
| 组件 |
控制节点 |
计算节点 |
存储节点 |
说明 |
| Keystone |
✅ 必须 |
❌ |
❌ |
API认证 |
| Nova-API |
✅ 必须 |
❌ |
❌ |
API服务 |
| Nova-Scheduler |
✅ 必须 |
❌ |
❌ |
调度器 |
| Nova-Conductor |
✅ 必须 |
❌ |
❌ |
数据库中介 |
| Nova-Novncproxy |
✅ 推荐 |
❌ |
❌ |
VNC代理 |
| Nova-Compute |
❌ |
✅ 必须 |
❌ |
虚拟机运行 |
| Placement |
✅ 必须 |
❌ |
❌ |
资源追踪 |
| Glance-API |
✅ 必须 |
❌ |
❌ |
镜像API |
| Glance-Registry |
✅ 必须 |
❌ |
❌ |
镜像注册 |
| Neutron-Server |
✅ 必须 |
❌ |
❌ |
网络API |
| Neutron-DHCP-Agent |
✅ 必须 |
❌ |
❌ |
DHCP服务 |
| Neutron-L3-Agent |
✅ 必须 |
❌ |
❌ |
路由服务 |
| Neutron-OVS-Agent |
✅ 必须 |
✅ 必须 |
❌ |
OVS代理 |
| Neutron-Linuxbridge-Agent |
✅ 必须 |
✅ 必须 |
❌ |
网桥代理 |
| Neutron-Metadata-Agent |
❌ |
✅ 推荐 |
❌ |
元数据 |
| Cinder-API |
✅ 可选 |
❌ |
❌ |
存储API |
| Cinder-Scheduler |
✅ 可选 |
❌ |
❌ |
存储调度 |
| Cinder-Volume |
❌ |
❌ |
✅ 可选 |
卷管理 |
| Swift-Proxy |
✅ 可选 |
❌ |
❌ |
对象代理 |
| Swift-Account |
❌ |
❌ |
✅ 可选 |
账户服务 |
| Swift-Container |
❌ |
❌ |
✅ 可选 |
容器服务 |
| Swift-Object |
❌ |
❌ |
✅ 可选 |
对象服务 |
| Horizon |
✅ 推荐 |
❌ |
❌ |
Web界面 |
| Heat-API |
✅ 可选 |
❌ |
❌ |
编排API |
| MySQL/MariaDB |
✅ 必须 |
❌ |
❌ |
数据库 |
| RabbitMQ |
✅ 必须 |
❌ |
❌ |
消息队列 |
7.2 必须安装 vs 可选安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
必须安装(没有它们OpenStack无法运行):
控制节点:
├── MySQL/MariaDB
├── RabbitMQ
├── Memcached
├── Keystone
├── Nova-API
├── Nova-Scheduler
├── Nova-Conductor
├── Placement-API
├── Glance-API
├── Glance-Registry
├── Neutron-Server
├── Neutron-DHCP-Agent
├── Neutron-L3-Agent
└── Neutron-网络代理
计算节点:
├── nova-compute
└── neutron-网络代理
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
可选安装(没有它们OpenStack可以运行,但功能受限):
控制节点:
├── Horizon ← 推荐(Web管理界面)
├── Cinder-API ← 有数据库需求时
├── Cinder-Scheduler ← 有存储需求时
├── Swift-Proxy ← 有对象存储需求时
├── Heat-API ← 需要编排时
├── Nova-Novncproxy ← 需要VNC访问时
└── Neutron-Metadata-Agent ← 计算节点需要时
存储节点:
├── Cinder-Volume ← 块存储
├── Swift-Account ← 对象存储
├── Swift-Container ← 对象存储
└── Swift-Object ← 对象存储
|
八、实战:不同场景的组件选择
8.1 学习场景(DevStack/MicroStack)
目标: 快速体验OpenStack
安装方式: All-in-One
最小化配置:
1
2
3
4
5
|
# DevStack local.conf
ENABLED_SERVICES=key,mysql,rabbitmq
ENABLED_SERVICES+=,nova,placement,neutron
ENABLED_SERVICES+=,glance,horizon
ENABLED_SERVICES+=,cinder
|
资源需求:
- CPU:4核心
- 内存:8GB(建议16GB)
- 磁盘:60GB
安装什么:
- Keystone ✅
- Nova ✅
- Placement ✅
- Glance ✅
- Neutron ✅
- Horizon ✅
- Cinder ✅
- Swift ❌
- Heat ❌
8.2 小规模生产(2-3台服务器)
目标: 支撑小团队
架构: 1控制节点 + 2计算节点
控制节点安装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
基础服务:
├── MySQL ✅
├── RabbitMQ ✅
├── Memcached ✅
核心服务:
├── Keystone ✅
├── Nova-API ✅
├── Nova-Scheduler ✅
├── Nova-Conductor ✅
├── Placement ✅
├── Glance ✅
├── Neutron-Server ✅
├── Neutron-DHCP ✅
├── Neutron-L3 ✅
├── Neutron-网桥 ✅
可选服务:
├── Horizon ✅(推荐)
├── Cinder-API ✅
├── Cinder-Scheduler ✅
└── Nova-Novncproxy ✅
|
计算节点安装:
1
2
|
nova-compute ✅
neutron-linuxbridge-agent ✅
|
资源需求:
- 控制节点:8核/16GB/100GB
- 计算节点×2:8核/32GB/500GB
8.3 中等规模生产(5-10台服务器)
目标: 企业级私有云
架构: 3控制节点 + 5计算节点 + 3存储节点
控制节点安装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
高可用组件:
├── MySQL (Galera集群) ✅
├── RabbitMQ (集群) ✅
├── HAProxy + Keepalived ✅
核心服务(全部安装):
├── Keystone ✅
├── Nova ✅
├── Placement ✅
├── Glance ✅
├── Neutron ✅
├── Horizon ✅
├── Cinder-API ✅
├── Cinder-Scheduler ✅
├── Heat ✅
└── Ceilometer ✅
|
计算节点安装:
1
2
3
|
nova-compute ✅
neutron-openvswitch-agent ✅
neutron-metadata-agent ✅
|
存储节点安装:
1
2
3
4
|
Cinder-Volume ✅
Swift-Account ✅
Swift-Container ✅
Swift-Object ✅
|
8.4 大规模生产(20+台服务器)
目标: 大型企业/云服务商
架构:
- 3+ 控制节点(高可用)
- 10+ 计算节点
- 3+ Ceph存储节点
- 3+ 网络节点
控制平面服务:
- Keystone(多节点)
- Nova(多节点)
- Neutron(多节点 + DVR)
- Glance(多节点)
- Cinder(多节点 + Ceph后端)
- Swift(Ceph RGW替代)
计算节点:
- nova-compute
- neutron-openvswitch-agent
- ceph-osd(可选)
存储节点:
- Ceph MON
- Ceph OSD
- Ceph RGW
九、常见问题
9.1 Q&A
Q1:控制节点和计算节点必须分开吗?
A:不是必须的。All-in-One模式可以把所有服务装在一台机器上。但生产环境建议分开:
- 安全性:控制节点更安全,计算节点可以暴露
- 性能:分开后互不影响
- 扩展性:可以单独扩展计算节点
Q2:哪些组件必须在控制节点?
A:所有API服务和数据库服务必须在控制节点:
- nova-api, nova-scheduler, nova-conductor
- glance-api, glance-registry
- neutron-server
- keystone
- placement-api
- cinder-api, cinder-scheduler
- Horizon
- MySQL, RabbitMQ
Q3:计算节点最少需要安装什么?
A:只需要两个组件:
- nova-compute(必须)
- neutron-网络代理(必须)
计算节点不需要数据库、消息队列、API服务。
Q4:Cinder存储节点必须安装吗?
A:不是必须的。分为三种情况:
| 情况 |
是否需要Cinder |
| 虚拟机使用本地磁盘 |
不需要 |
| 需要云硬盘 |
需要 |
| 使用Ceph做存储后端 |
需要 |
Q5:可以先安装核心组件,之后再添加可选组件吗?
A:完全可以!OpenStack支持组件热添加。
1
2
3
4
5
6
7
8
9
10
|
# 先安装最小化
./stack.sh # 只有核心组件
# 之后添加Cinder
./unstack.sh
# 修改local.conf添加Cinder
./stack.sh
# 或者使用openstack命令直接添加
openstack service create --name cinder volume
|
Q6:Horizon必须安装吗?
A:不是必须的,但强烈推荐。
- 入门友好,图形界面
- 可以用CLI命令替代
- 经验丰富的运维通常不用Horizon
- API可以直接调用
9.2 组件依赖速查
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
|
必须安装(基础):
├── MySQL ─────────────────────────────────┐
├── RabbitMQ ──────────────────────────────┼─ 控制节点
└── Memcached ────────────────────────────┘
必须安装(核心):
├── Keystone ← 所有组件都依赖它
├── Nova ← 必须
│ ├── API ← 控制节点
│ ├── Scheduler ← 控制节点
│ ├── Conductor ← 控制节点
│ └── Compute ← 计算节点
├── Placement ← Nova必须
├── Glance ← Nova必须
│ └── 需要存储后端
└── Neutron ← Nova必须
├── Server ← 控制节点
├── DHCP Agent ← 控制节点
├── L3 Agent ← 控制节点
└── 网桥代理 ← 控制节点 + 计算节点
可选安装:
├── Horizon ← 推荐,Web界面
├── Cinder ← 需要持久存储时
├── Swift ← 需要对象存储时
├── Heat ← 需要编排时
└── Ceilometer ← 需要监控时
|
十、总结
10.1 核心要点
-
必须安装的组件(没有它们OpenStack无法运行):
- Keystone(身份认证)
- Nova(计算服务)
- Placement(资源追踪)
- Glance(镜像服务)
- Neutron(网络服务)
- MySQL + RabbitMQ(基础服务)
-
控制节点必须安装的:
- 所有API服务
- 所有调度服务
- 数据库
- 消息队列
- 网络代理(OVS/Linuxbridge)
-
计算节点必须安装的:
- nova-compute
- neutron-网络代理
-
可选组件:
- Horizon(Web界面)
- Cinder(块存储)
- Swift(对象存储)
- Heat(编排)
10.2 部署选择指南
| 场景 |
推荐方案 |
说明 |
| 学习体验 |
All-in-One |
全部装一台机器 |
| 个人Homelab |
All-in-One或2节点 |
1-2台服务器 |
| 小规模生产 |
2-3节点 |
1控制+2计算 |
| 中等规模生产 |
5-10节点 |
3控制+5计算+存储 |
| 大规模生产 |
20+节点 |
完整HA架构 |
10.3 记住这个原则
控制节点是"大脑",计算节点是"肌肉"。
- 大脑必须复杂(所有管理服务)
- 肌肉可以简单(只需要运行虚拟机)
- 分离部署更安全、更灵活
本文详细讲解了OpenStack各组件的用途和部署位置,希望能帮助你更好地规划OpenStack架构。