OpenStack架构深度解析
OpenStack 不是虚拟化,是云操作系统!一文吃透架构与 11大核心组件(附完整部署实战)
摘要:OpenStack 是虚拟机、裸金属和容器的云基础架构,能够控制整个数据中心的大型计算、存储和网络资源池,所有资源通过 API 或 Web 界面管理。本文从 2010 年 NASA 与 Rackspace 的合作说起,带你了解 OpenStack 的起源与版本演进,深入拆解其逻辑架构与设计理念,并用表格对比它与虚拟化、云计算的区别。随后逐一对 Horizon、Keystone、Glance、Nova、Cinder、Swift、Neutron、Heat、Ceilometer 九大核心组件进行解读,最后以"创建一台虚拟机"为例展示各服务如何协同工作,帮你真正理解 OpenStack 为什么被称为云操作系统。
一、OpenStack 到底是什么?
一句话概括:OpenStack 是虚拟机、裸金属和容器的云基础架构。
它具备以下几个核心特征:
| 特征 | 说明 |
|---|---|
| 资源池化 | 可控制整个数据中心的大型计算、存储和网络资源池 |
| 统一管理 | 所有资源都通过 API 或 Web 界面进行管理 |
| 多资源类型 | 同时支持虚拟机、裸金属服务器、容器 |
| 开放集成 | 可部署第三方服务,也可使用内置工具 |
通俗理解:如果把数据中心比作"一堆零散的硬件零件",OpenStack 就是把这些零件组装成一台"能自助取用资源的超级电脑"的管理系统。
二、起源:从 NASA 走出的开源云计算
OpenStack 的诞生和云计算的发展紧密相关,几个关键时间节点:
| 时间 | 事件 | 意义 |
|---|---|---|
| 2006 年 | 亚马逊推出 AWS | 正式开启云计算新纪元 |
| 2010 年 7 月 | NASA(美国国家航空航天局)与 Rackspace 合作,共同宣布 OpenStack 开放源码计划 | 开启属于 OpenStack 的时代 |
OpenStack 从诞生之初就对标 AWS,一直在向 AWS 学习,同时通过开放接口去兼容各种 AWS 服务。
三、OpenStack 能做什么?
OpenStack 通过一组相互关联的服务提供**基础设施即服务(IaaS)**解决方案,每个服务都提供了应用程序编程接口(API)来促进集成。
它的项目目标非常明确:
- ✅ 实施简单
- ✅ 可大规模扩展
- ✅ 功能丰富
- ✅ 标准统一的云计算管理平台
- ✅ 适用于所有类型云的开源平台
四、OpenStack 的工作原理
理解 OpenStack 的工作原理,关键在于搞清它和"脚本、虚拟化、操作系统"三者的关系:
OpenStack = 一系列脚本命令
↓ 捆绑成
项目(软件包)
↓ 传递
创建云环境的任务
为了创建这些云环境,OpenStack 还需要使用 2 种其他类型的软件:
| 软件类型 | 作用 |
|---|---|
| 虚拟化软件 | 创建从硬件中抽象出来的虚拟资源层(如 KVM) |
| 基础操作系统(OS) | 执行 OpenStack 脚本发出的命令 |
核心结论:OpenStack 本身不会虚拟化资源,但会使用虚拟化资源来构建云。 OpenStack、虚拟化、基础操作系统,这 3 种技术协同工作来服务用户。
五、版本演进:一年两版本,命名 A-Z
OpenStack 的版本发布非常有规律:
- 每年发布两个大版本,一般在 4 月和 10 月中旬发布
- 版本命名从字母 A-Z 依次推进
课程中涉及的版本演进如下:
| 版本 | 发布年份 |
|---|---|
| Train | 2019 |
| Ussuri | 2020 |
| Victoria | 2020 |
| Wallaby | 2021 |
| Xena | 2021 |
| Yoga | 2022 |
六、设计理念:开放、灵活、可扩展
OpenStack 的设计理念可以总结为 10 个关键词:
| 类别 | 设计理念 |
|---|---|
| 核心原则 | 开放、灵活、可扩展、开源 |
| 架构原则 | 尽最大可能重用已有开源项目、架构可裁剪 |
| 实现方式 | 大量使用插件化方式进行架构设计与实现 |
| 组织方式 | 由多个相互独立的项目组成,每个项目包含多个独立服务组件 |
| 架构形态 | 无中心架构、无状态架构 |
七、OpenStack vs 虚拟化 vs 云计算
很多人容易混淆这三者,这里用两张表格彻底讲清楚。
7.1 OpenStack 与虚拟化
| 对比维度 | OpenStack | 虚拟化 |
|---|---|---|
| 本质定位 | 系统的控制面 | 底层技术实现手段(数据面) |
| 是否提供虚拟化技术 | ❌ 自身不提供 | ✅ 提供(Hypervisor 等) |
| 资源管理 | 调用多种技术实现多资源池管理 | 单机环境隔离、资源复用 |
| 对外接口 | 提供统一管理接口 | 降低隔离损耗、提升运行效率 |
| 关注重点 | 云资源编排与管理 | 提供高级虚拟化特性 |
关键结论:OpenStack 不是虚拟化,它只是系统的控制面,不包括系统的数据面组件(如 Hypervisor、存储和网络设备等)。虚拟化是 OpenStack 底层的技术实现手段之一,但并非核心关注点。
7.2 OpenStack 与云计算
| 对比维度 | OpenStack | 云计算 |
|---|---|---|
| 关系 | 构建云计算的关键组件 | 完整的云计算体系 |
| 角色 | 内核、骨干、框架、总线 | 包含 OpenStack 在内的整套服务 |
也就是说:OpenStack 只是构建云计算的关键组件,要构建完整的云计算,还需要很多其他东西(如上层应用、计费、监控、运维等)。
八、整体逻辑架构
OpenStack 的逻辑架构有几个关键特征,管理员要设计、部署和配置 OpenStack,必须理解这些:
8.1 进程模型
- 每个 OpenStack 服务内部由多个进程组成
- 所有服务(Keystone 除外)都至少有一个 API 进程,负责监听 API 请求、对请求进行预处理并传递给服务的其他部分
8.2 通信与存储
| 组成 | 说明 |
|---|---|
| 服务间通信 | 使用 AMQP 消息代理 |
| 状态存储 | 存储在数据库中 |
| 可选消息代理 | RabbitMQ 等 |
| 可选数据库 | MySQL、MariaDB、SQLite 等 |
8.3 用户访问方式
用户可以通过以下方式访问 OpenStack:
- Web 用户界面(Horizon)
- 命令行客户端(CLI)
- 浏览器插件 / curl 等工具 发出 API 请求
# 通过 curl 直接调用 OpenStack API(示例)
curl -i -X POST http://<controller-ip>/identity/v3/auth/tokens
九、11 大核心组件详解
OpenStack 的核心服务可归结为"认、镜、算、网、存、裸、文件 + 管、编、量",下面逐一拆解。
9.1 核心组件总览表
| 组件 | 中文名 | 功能 | 首次出现版本 | 依赖 |
|---|---|---|---|---|
| Horizon | 界面管理 | 提供基于 Web 的控制界面 | Essex | Keystone |
| Keystone | 认证服务 | 身份验证、服务发现、多租户授权 | Essex | — |
| Glance | 镜像服务 | 虚拟机镜像的发现、注册、检索 | Bexar | Keystone |
| Nova | 计算服务 | 大规模、可扩展、按需自助计算资源 | Austin | Keystone、Neutron、Glance |
| Cinder | 块存储 | 为虚拟机提供持久化块存储 | Folsom | Keystone |
| Swift | 对象存储 | 高可用、分布式、最终一致的对象存储 | Austin | — |
| Manila | 文件存储 | 提供共享文件系统(类似 NFS/CIFS),多虚机共享访问 | Juno | Keystone、Neutron |
| Neutron | 网络服务 | 管理虚拟网络,提供网络即服务 | Folsom | Keystone |
| Heat | 编排服务 | 编排云应用的基础架构资源 | Havana | Keystone |
| Ceilometer | 计量服务 | 数据收集、计费、资源跟踪、告警 | Havana | — |
| Ironic | 裸金属服务 | 管理裸机服务器,直接部署物理机(无需虚拟化层) | Grizzly | Keystone、Neutron、Glance |
9.2 逐个深入
1️⃣ Horizon —— 界面管理服务
提供基于 Web 的控制界面,使云管理员和用户能够管理各种 OpenStack 资源和服务。首次出现在 Essex 版本,依赖 Keystone 认证服务。
2️⃣ Keystone —— 认证服务
提供身份验证、服务发现和分布式多租户授权。支持 LDAP、OAuth、OpenID Connect、SAML 和 SQL 等多种认证方式。首次出现在 Essex 版本,为其他 OpenStack 服务提供认证支持。
3️⃣ Glance —— 镜像服务
提供发现、注册和检索虚拟机镜像功能。虚拟机实例镜像可以存放在不同地方,例如本地文件系统、Swift 对象存储、Cinder 块存储等。首次出现在 Bexar 版本,依赖 Keystone 认证服务。
4️⃣ Nova —— 计算服务(核心中的核心)
提供大规模、可扩展、按需自助服务的计算资源,支持管理裸机、虚拟机和容器。首次出现在 Austin 版本,依赖 Keystone 认证服务、Neutron 网络服务和 Glance 镜像服务。
5️⃣ Cinder —— 块存储服务
提供块存储服务,为虚拟机实例提供持久化存储。调用不同存储接口驱动,将存储设备转化成块存储池,用户无需了解存储实际部署位置或设备类型。首次出现在 Folsom 版本,依赖 Keystone 认证服务。
6️⃣ Swift —— 对象存储服务
提供高度可用、分布式、最终一致的对象存储服务,可以高效、安全且廉价地存储大量数据,非常适合存储需要弹性扩展的非结构化数据。首次出现在 Austin 版本。
7️⃣ Manila —— 文件存储服务
提供共享文件系统(类似 NFS/CIFS),让多台虚拟机可以同时挂载访问同一份数据。首次出现在 Juno 版本,依赖 Keystone、Neutron。
8️⃣ Neutron —— 网络服务
负责管理虚拟网络,专注于为 OpenStack 提供网络即服务。首次出现在 Folsom 版本,依赖 Keystone 认证服务。
9️⃣ Heat —— 编排服务
为云应用程序编排 OpenStack 基础架构资源,提供 OpenStack 原生 REST API 和 CloudFormation 兼容的查询 API。首次出现在 Havana 版本,依赖 Keystone 认证服务。
🔟 Ceilometer —— 计量服务
一项数据收集服务,提供跨当前 OpenStack 核心组件规范化和转换数据的能力。数据可为所有 OpenStack 核心组件提供客户计费、资源跟踪和警报功能。首次出现在 Havana 版本。
1️⃣1️⃣ Ironic —— 裸金属服务
管理裸机服务器(Bare Metal),通过 OpenStack API 直接对物理机进行部署和管理(基于 PXE + IPMI),无需虚拟化层,性能接近物理机。首次出现在 Grizzly 版本,依赖 Keystone、Neutron、Glance。
十、创建一台 VM,各服务如何协作?
这是理解 OpenStack 组件关系的最好例子。创建一台虚拟机(VM),需要多个服务协同完成:
| 服务 | 在创建 VM 中的职责 |
|---|---|
| Horizon | Provides UI for —— 提供操作界面 |
| Keystone | Provides Auth for —— 提供认证 |
| Glance | Provides images —— 提供镜像 |
| Nova | Provisions —— 创建/供应虚拟机 |
| Neutron | Provides network for —— 提供网络 |
| Cinder | Provides volumes for —— 提供数据卷 |
| Swift | Backups volumes in —— 备份卷 |
| Heat | Orchestrates Cloud —— 编排整个云环境 |
完整流程:用户通过 Horizon 界面发起请求 → Keystone 验证身份 → Glance 提供系统镜像 → Nova 基于镜像创建虚拟机 → Neutron 分配网络 → 需要数据盘时由 Cinder 挂载卷 → 卷的备份存放在 Swift → 整个复杂环境可由 Heat 一键编排。
那么 Ironic 和 Manila 在哪里? 上面的 8 个服务是"创建普通虚拟机"的标准流程。它们属于"资源供应"角色,只是供应的资源类型不同:
| 场景 | 参与服务 | 说明 |
|---|---|---|
| 创建普通虚拟机(VM) | Nova | 走虚拟化路径,供虚拟机 |
| 创建裸金属服务器(不装虚拟化) | Ironic | 替代 Nova 的虚拟化路径,直接部署物理机 |
| 多台虚机需要共享同一份数据 | Manila | 提供共享文件系统(如 NFS),配合 Nova 挂载 |
# 用命令行创建一台云主机的示例(对应上述流程)
source /root/keystonerc_admin
openstack image list # 查看镜像(Glance)
openstack network list # 查看网络(Neutron)
openstack server create --flavor m1.small \
--image cirros --network demo-net my-vm # 创建虚机(Nova)
十一、为什么称 OpenStack 为云操作系统?
类比传统操作系统与 OpenStack:
| 对比维度 | 传统操作系统 | OpenStack(云操作系统) |
|---|---|---|
| 管理对象 | 单台电脑的 CPU、内存、磁盘 | 整个数据中心的计算、存储、网络资源池 |
| 对外能力 | 通过系统调用/API 供应用程序使用 | 通过 API 供租户/应用按需使用 |
| 资源调度 | 进程/线程调度 | 虚拟机、容器、裸机调度 |
| 抽象层次 | 硬件抽象 | 云资源抽象 |
核心原因:OpenStack 统一管理和调度整个数据中心的各种资源池,并对外提供标准的 API 和 Web 管理接口,就像操作系统管理单台电脑的硬件一样——所以它被形象地称为"云操作系统"。
十二、实战:CentOS Stream 8 用 PackStack 部署 OpenStack Victoria
理论讲得再多,不如动手部署一次。本章完整演示如何在 CentOS Stream 8 上用 PackStack 一键部署 OpenStack Victoria(双节点:controller + compute),包含从 yum 源配置到登录 Dashboard 的全部步骤。
12.1 前期准备
资源清单
| 资源 | 说明 |
|---|---|
| CentOS Stream 8 | minimal 安装(镜像:CentOS-Stream-8-20240603.0-x86_64-dvd1.iso,阿里云镜像源) |
| VMware Workstation | 17.5 |
| OpenStack | Victoria 版本 |
虚拟机硬件配置
| 节点 | CPU | 内存 | 网卡 | 系统盘 |
|---|---|---|---|---|
| controller | 4 核 | 8G | NAT × 1 | 100G |
| compute | 4 核 | 8G | NAT × 1 | 100G |
内存可按个人实际情况调整,但建议不低于 8G。
网络拓扑
- VMware NAT 网络:
192.168.108.0/24,开启 DHCP - 网关:Windows 下 VMware NAT 网关为
192.168.108.2;Linux 下为192.168.108.1 /etc/hosts规划:
192.168.108.10 controller
192.168.108.11 compute
12.2 步骤一:准备模板虚拟机
基于 CentOS Stream 8 模板制作出模板机 openstack_template,完成以下基础配置后关机拍快照。
① 配置 yum 源
rm -rf /etc/yum.repos.d/*
cat <<EOF > /etc/yum.repos.d/openstack.repo
[centos-openstack-victoria]
name=CentOS 8 - OpenStack victoria
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/
gpgcheck=0
enabled=1
[highavailability]
name=CentOS Stream 8 - HighAvailability
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/HighAvailability/x86_64/os/
gpgcheck=0
enabled=1
[nfv]
name=CentOS Stream 8 - NFV
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/NFV/x86_64/os/
gpgcheck=0
enabled=1
[rt]
name=CentOS Stream 8 - RT
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/RT/x86_64/os/
gpgcheck=0
enabled=1
[resilientstorage]
name=CentOS Stream 8 - ResilientStorage
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/ResilientStorage/x86_64/os/
gpgcheck=0
enabled=1
[extras-common]
name=CentOS Stream 8 - Extras packages
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/extras-common/
gpgcheck=0
enabled=1
[extras]
name=CentOS Stream $releasever - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/os/
gpgcheck=0
enabled=1
[centos-ceph-pacific]
name=CentOS - Ceph Pacific
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific/
gpgcheck=0
enabled=1
[centos-rabbitmq-38]
name=CentOS-8 - RabbitMQ 38
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/messaging/x86_64/rabbitmq-38/
gpgcheck=0
enabled=1
[centos-nfv-openvswitch]
name=CentOS Stream 8 - NFV OpenvSwitch
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/nfv/x86_64/openvswitch-2/
gpgcheck=0
enabled=1
[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1
[appstream]
name=CentOS Stream 8 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/
gpgcheck=0
enabled=1
[powertools]
name=CentOS Stream 8 - PowerTools
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/PowerTools/x86_64/os/
gpgcheck=0
enabled=1
EOF
yum clean all
yum makecache
② 安装基础软件包
yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
③ 设置 hosts / 关闭 SELinux / 配置网卡
echo '192.168.108.10 controller' >> /etc/hosts
echo '192.168.108.11 compute' >> /etc/hosts
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
vim /etc/sysconfig/network-scripts/ifcfg-ens160
# TYPE=Ethernet
# BOOTPROTO=dhcp
# NAME=ens160
# DEVICE=ens160
# ONBOOT=yes
④ 清除密钥与 Machine ID,拍快照
cd /etc/ssh/ && rm -rf ssh_host_*
cat /dev/null > /etc/machine-id
poweroff # 关机后拍摄快照,作为干净的模板
12.3 步骤二:准备 OpenStack 节点
从模板完整克隆出 openstack_controller 与 openstack_compute 两台机器(注意:两节点的 CPU 都要开启虚拟化支持),然后分别配置不同的主机名与 IP。
① 配置主机名
# controller 节点
hostnamectl set-hostname controller
# compute 节点
hostnamectl set-hostname compute
② 配置静态 IP(ifcfg-ens160)
# controller:192.168.108.10
vim /etc/sysconfig/network-scripts/ifcfg-ens160
# BOOTPROTO=dhcp 改为 BOOTPROTO=none
# IPADDR=192.168.108.10
# NETMASK=255.255.255.0
# GATEWAY=192.168.108.2
# DNS1=192.168.108.2
nmcli connection reload ens160
nmcli connection up ens160
# compute:192.168.108.11(参数同 controller,仅 IPADDR 不同)
# IPADDR=192.168.108.11
nmcli connection reload ens160
nmcli connection up ens160
③ 配置 NTP 时间同步
# controller:以阿里云 NTP 为上游
vim /etc/chrony.conf
# 注释掉 # pool 2.centos.pool.ntp.org iburst
# 添加 server ntp.aliyun.com iburst
# 添加 allow 192.168.108.0/24
systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v
# compute:以 controller 为上游
vim /etc/chrony.conf
# 注释 pool 行,添加 server controller iburst
systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v
配置完成后两节点关机拍快照。
12.4 步骤三:安装 OpenStack 并测试
① 控制节点安装 packstack
yum install -y openstack-packstack
② 生成应答文件
packstack --gen-answer-file=answers.txt
提示:如选择 OVN Neutron 后端,应答文件会提示该后端不支持 VPNaaS 插件,租户网络将使用 Geneve 封装,属正常现象。
③ 修改应答文件(4 处关键参数)
vim answers.txt
| 行号 | 参数 | 修改值 | 作用 |
|---|---|---|---|
| 60 | CONFIG_HEAT_INSTALL | y | 安装 Heat 编排组件 |
| 97 | CONFIG_COMPUTE_HOSTS | 192.168.108.10,192.168.108.11 | 指定两台计算节点 |
| 909 | CONFIG_NEUTRON_OVN_BRIDGE_IFACES | br-ex:ens160 | OVN 外部网桥绑定物理网卡 |
| 1169 | CONFIG_PROVISION_DEMO | n | 不自动创建 demo 示例项目 |
统一所有服务密码为 huawei(测试环境方便记忆):
sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
④ 关闭 NetworkManager(两节点都要)
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager
原因:CentOS 8 默认使用 NetworkManager 管理网络,它会和 OpenStack 网络组件产生冲突,导致告警或错误。
⑤ 开始部署
packstack --answer-file=answers.txt
- 安装日志:
/var/tmp/packstack/20240920-*/openstack-setup.log - 部署过程中会提示输入各节点的 root 密码(本教程为
huawei) - ⏳ 关键提示:
Testing if puppet apply is finished ... controller.pp这一步会停留 40~50 分钟,属正常现象,耐心等待即可,其他步骤都很快
⑥ 安装完成后的配置
# 开启 network 服务(controller、compute 两节点都要)
systemctl start network
systemctl enable network
# 配置 openstack 命令补全(仅 controller)
openstack complete >> /etc/bash_completion.d/complete
⑦ 登录测试
- 浏览器访问 Horizon 控制台:
http://192.168.108.10/dashboard - 账号:
admin密码:huawei
⑧ 收尾
- 两个节点关机,分别拍摄快照,作为部署完成后的干净状态。
- 🎉 至此,一套 OpenStack Victoria 双节点云平台部署完成!
十三、总结与学习建议
通过本文,你应当掌握:
- ✅ OpenStack 的起源(NASA + Rackspace,2010 年)与版本演进规律(一年两版、A-Z 命名)
- ✅ OpenStack 的定位:虚拟机/裸金属/容器的云基础架构,IaaS 开源平台
- ✅ OpenStack 不是虚拟化,而是控制面;是构建云计算的关键组件而非云计算本身
- ✅ 逻辑架构:多进程、AMQP 通信、数据库存储、统一 API
- ✅ 11 大核心组件的名称、功能、版本与依赖关系
- ✅ 创建 VM 时各服务的协作流程
- ✅ 用 PackStack 在 CentOS Stream 8 上完整部署 OpenStack Victoria 的实战能力
学习建议:理论讲完一定要动手。建议按本文第十二章的实战教程,在 VMware 中用 CentOS Stream 8 + PackStack 完整部署一套 OpenStack Victoria(内存 8G+),亲自走一遍"建项目 → 建网络 → 传镜像 → 创建 VM"的流程,才能真正理解组件间的关系。
# 部署完成后,用命令验证组件是否就绪
source /root/keystonerc_admin
openstack service list # 查看已注册服务
openstack endpoint list # 查看服务端点
openstack network list # 查看网络
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)