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 的工作原理,关键在于搞清它和"脚本、虚拟化、操作系统"三者的关系:

OpenStack = 一系列脚本命令
     ↓ 捆绑成
   项目(软件包)
     ↓ 传递
   创建云环境的任务

为了创建这些云环境,OpenStack 还需要使用 2 种其他类型的软件

软件类型作用
虚拟化软件创建从硬件中抽象出来的虚拟资源层(如 KVM)
基础操作系统(OS)执行 OpenStack 脚本发出的命令

核心结论:OpenStack 本身不会虚拟化资源,但会使用虚拟化资源来构建云。 OpenStack、虚拟化、基础操作系统,这 3 种技术协同工作来服务用户。


五、版本演进:一年两版本,命名 A-Z

OpenStack 的版本发布非常有规律:

  • 每年发布两个大版本,一般在 4 月和 10 月中旬发布
  • 版本命名从字母 A-Z 依次推进

课程中涉及的版本演进如下:

版本发布年份
Train2019
Ussuri2020
Victoria2020
Wallaby2021
Xena2021
Yoga2022

六、设计理念:开放、灵活、可扩展

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 的控制界面EssexKeystone
Keystone认证服务身份验证、服务发现、多租户授权Essex
Glance镜像服务虚拟机镜像的发现、注册、检索BexarKeystone
Nova计算服务大规模、可扩展、按需自助计算资源AustinKeystone、Neutron、Glance
Cinder块存储为虚拟机提供持久化块存储FolsomKeystone
Swift对象存储高可用、分布式、最终一致的对象存储Austin
Manila文件存储提供共享文件系统(类似 NFS/CIFS),多虚机共享访问JunoKeystone、Neutron
Neutron网络服务管理虚拟网络,提供网络即服务FolsomKeystone
Heat编排服务编排云应用的基础架构资源HavanaKeystone
Ceilometer计量服务数据收集、计费、资源跟踪、告警Havana
Ironic裸金属服务管理裸机服务器,直接部署物理机(无需虚拟化层)GrizzlyKeystone、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 中的职责
HorizonProvides UI for —— 提供操作界面
KeystoneProvides Auth for —— 提供认证
GlanceProvides images —— 提供镜像
NovaProvisions —— 创建/供应虚拟机
NeutronProvides network for —— 提供网络
CinderProvides volumes for —— 提供数据卷
SwiftBackups volumes in —— 备份卷
HeatOrchestrates 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 8minimal 安装(镜像:CentOS-Stream-8-20240603.0-x86_64-dvd1.iso,阿里云镜像源)
VMware Workstation17.5
OpenStackVictoria 版本
虚拟机硬件配置
节点CPU内存网卡系统盘
controller4 核8GNAT × 1100G
compute4 核8GNAT × 1100G

内存可按个人实际情况调整,但建议不低于 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_controlleropenstack_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
行号参数修改值作用
60CONFIG_HEAT_INSTALLy安装 Heat 编排组件
97CONFIG_COMPUTE_HOSTS192.168.108.10,192.168.108.11指定两台计算节点
909CONFIG_NEUTRON_OVN_BRIDGE_IFACESbr-ex:ens160OVN 外部网桥绑定物理网卡
1169CONFIG_PROVISION_DEMOn不自动创建 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 双节点云平台部署完成!

十三、总结与学习建议

通过本文,你应当掌握:

  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"的流程,才能真正理解组件间的关系。

# 部署完成后,用命令验证组件是否就绪
source /root/keystonerc_admin
openstack service list       # 查看已注册服务
openstack endpoint list      # 查看服务端点
openstack network list       # 查看网络
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐