OpenStack架构深度解析

OpenStack 不是虚拟化,是云操作系统!一文吃透架构与 11大核心组件(附完整部署实战)

摘要:OpenStack 是虚拟机、裸金属和容器的云基础架构,能够控制整个数据中心的大型计算、存储和网络资源池,所有资源通过 API 或 Web 界面管理。本文从 2010 年 NASA 与 Rackspace 的合作说起,带你了解 OpenStack 的起源与版本演进,深入拆解其逻辑架构与设计理念,并用表格对比它与虚拟化、云计算的区别。随后逐一对 Horizon、Keystone、Glance、Nova、Cinder、Swift、Neutron、Heat、Ceilometer 九大核心组件进行解读,最后以"创建一台虚拟机"为例展示各服务如何协同工作,帮你真正理解 OpenStack 为什么被称为云操作系统。


一、OpenStack 到底是什么?

一句话概括:OpenStack 是虚拟机、裸金属和容器的云基础架构

它具备以下几个核心特征:

特征 说明
资源池化 可控制整个数据中心的大型计算、存储和网络资源池
统一管理 所有资源都通过 APIWeb 界面进行管理
多资源类型 同时支持虚拟机、裸金属服务器、容器
开放集成 可部署第三方服务,也可使用内置工具

通俗理解:如果把数据中心比作"一堆零散的硬件零件",OpenStack 就是把这些零件组装成一台"能自助取用资源的超级电脑"的管理系统。


二、起源:从 NASA 走出的开源云计算

OpenStack 的诞生和云计算的发展紧密相关,几个关键时间节点:

时间 事件 意义
2006 年 亚马逊推出 AWS 正式开启云计算新纪元
2010 年 7 月 NASA (美国国家航空航天局)与 Rackspace 合作,共同宣布 OpenStack 开放源码计划 开启属于 OpenStack 的时代

OpenStack 从诞生之初就对标 AWS,一直在向 AWS 学习,同时通过开放接口去兼容各种 AWS 服务。


三、OpenStack 能做什么?

OpenStack 通过一组相互关联的服务提供**基础设施即服务(IaaS)**解决方案,每个服务都提供了应用程序编程接口(API)来促进集成。

它的项目目标非常明确:

  • ✅ 实施简单
  • ✅ 可大规模扩展
  • ✅ 功能丰富
  • ✅ 标准统一的云计算管理平台
  • ✅ 适用于所有类型云的开源平台

四、OpenStack 的工作原理

理解 OpenStack 的工作原理,关键在于搞清它和"脚本、虚拟化、操作系统"三者的关系:

text 复制代码
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 请求
bash 复制代码
# 通过 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 挂载
bash 复制代码
# 用命令行创建一台云主机的示例(对应上述流程)
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 规划:
text 复制代码
192.168.108.10 controller
192.168.108.11 compute

12.2 步骤一:准备模板虚拟机

基于 CentOS Stream 8 模板制作出模板机 openstack_template,完成以下基础配置后关机拍快照。

① 配置 yum 源
bash 复制代码
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
② 安装基础软件包
bash 复制代码
yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
③ 设置 hosts / 关闭 SELinux / 配置网卡
bash 复制代码
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,拍快照
bash 复制代码
cd /etc/ssh/ && rm -rf ssh_host_*
cat /dev/null > /etc/machine-id
poweroff   # 关机后拍摄快照,作为干净的模板

12.3 步骤二:准备 OpenStack 节点

从模板完整克隆openstack_controlleropenstack_compute 两台机器(注意:两节点的 CPU 都要开启虚拟化支持),然后分别配置不同的主机名与 IP。

① 配置主机名
bash 复制代码
# controller 节点
hostnamectl set-hostname controller

# compute 节点
hostnamectl set-hostname compute
② 配置静态 IP(ifcfg-ens160)
bash 复制代码
# 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
bash 复制代码
# compute:192.168.108.11(参数同 controller,仅 IPADDR 不同)
# IPADDR=192.168.108.11

nmcli connection reload ens160
nmcli connection up ens160
③ 配置 NTP 时间同步
bash 复制代码
# 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
bash 复制代码
# compute:以 controller 为上游
vim /etc/chrony.conf
# 注释 pool 行,添加  server controller iburst

systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v

配置完成后两节点关机拍快照。

12.4 步骤三:安装 OpenStack 并测试

① 控制节点安装 packstack
bash 复制代码
yum install -y openstack-packstack
② 生成应答文件
bash 复制代码
packstack --gen-answer-file=answers.txt

提示:如选择 OVN Neutron 后端,应答文件会提示该后端不支持 VPNaaS 插件,租户网络将使用 Geneve 封装,属正常现象。

③ 修改应答文件(4 处关键参数)
bash 复制代码
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(测试环境方便记忆):

bash 复制代码
sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
④ 关闭 NetworkManager(两节点都要)
bash 复制代码
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager

原因:CentOS 8 默认使用 NetworkManager 管理网络,它会和 OpenStack 网络组件产生冲突,导致告警或错误。

⑤ 开始部署
bash 复制代码
packstack --answer-file=answers.txt
  • 安装日志:/var/tmp/packstack/20240920-*/openstack-setup.log
  • 部署过程中会提示输入各节点的 root 密码(本教程为 huawei
  • 关键提示Testing if puppet apply is finished ... controller.pp 这一步会停留 40~50 分钟,属正常现象,耐心等待即可,其他步骤都很快
⑥ 安装完成后的配置
bash 复制代码
# 开启 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 双节点云平台部署完成!

十三、总结与学习建议

通过本文,你应当掌握:

  1. ✅ OpenStack 的起源 (NASA + Rackspace,2010 年)与版本演进规律(一年两版、A-Z 命名)
  2. ✅ OpenStack 的定位:虚拟机/裸金属/容器的云基础架构,IaaS 开源平台
  3. ✅ OpenStack 不是虚拟化,而是控制面;是构建云计算的关键组件而非云计算本身
  4. ✅ 逻辑架构:多进程、AMQP 通信、数据库存储、统一 API
  5. 11 大核心组件的名称、功能、版本与依赖关系
  6. ✅ 创建 VM 时各服务的协作流程
  7. ✅ 用 PackStack 在 CentOS Stream 8 上完整部署 OpenStack Victoria 的实战能力

学习建议 :理论讲完一定要动手。建议按本文第十二章的实战教程,在 VMware 中用 CentOS Stream 8 + PackStack 完整部署一套 OpenStack Victoria(内存 8G+),亲自走一遍"建项目 → 建网络 → 传镜像 → 创建 VM"的流程,才能真正理解组件间的关系。

bash 复制代码
# 部署完成后,用命令验证组件是否就绪
source /root/keystonerc_admin
openstack service list       # 查看已注册服务
openstack endpoint list      # 查看服务端点
openstack network list       # 查看网络
相关推荐
念何架构之路17 分钟前
beego总体架构与工程结构
java·架构·beego
代码方舟1 小时前
零信任架构实战:基于天远车辆过户详版查询构建自动化车辆估值网关
运维·人工智能·架构·自动化
沈管家AI数字员工1 小时前
集团多组织AI怎么上?多子公司统一AI管理的架构与路径
人工智能·架构
算了吧95692 小时前
从“黑箱”到“透明”:答序科技如何用“诊断型”技术架构重构品牌AI可见度
人工智能·科技·架构
熊猫钓鱼>_>2 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos
南城以南溫暖如初1472 小时前
分享返现商城系统开发实战:技术架构与运营经验指南
java·spring boot·mysql·架构·vue·mybatis
数据技术说2 小时前
数据库慢了怎么查?从监控报警到找到根因的完整路径
数据库·架构
jianqiang.xue3 小时前
ESP-IDF保姆级入门11|FreeRTOS队列通信全解:生产者消费者+中断数据转发+多任务解耦,彻底搞定任务间交互
单片机·嵌入式硬件·物联网·架构·esp32
jianqiang.xue3 小时前
ESP-IDF保姆级入门09|ADC模拟量采集全解:电位器调压+光敏传感器+OLED显示,打通模拟→数字全链路
stm32·单片机·物联网·架构·esp32