OpenStack架构介绍和安装流程
0 前言
OpenStack是目前业界主流的开源IaaS私有云平台,本博客从起源演进、基础概念、整体架构、核心组件、业务交互流程几个维度讲解OpenStack,读完可以搞懂:
- OpenStack的由来、版本迭代、设计思想
- OpenStack和虚拟化、云计算的关系
- 各个核心组件是干什么的,互相如何配合
- 创建一台虚拟机背后完整业务流程
1 OpenStack简介
1.1 起源历史

- 2006年亚马逊发布AWS,公有云时代正式开启。
- 2010年7月NASA(美国宇航局)和Rackspace联合发布OpenStack开源项目,项目对标AWS公有云,兼容AWS相关接口,目标打造开源的云基础设施平台。
1.2 什么是OpenStack


OpenStack是一套面向虚拟机、裸金属、容器的云基础设施软件。
它可以管控整个数据中心大规模的计算、存储、网络资源池,所有资源全部通过API接口或者Web网页界面来管理。
重点:OpenStack本身不会做虚拟化 !
OpenStack只是一堆管理脚本、软件服务的集合。真正生成虚拟机、做硬件隔离的是底层虚拟化软件(典型就是KVM),OpenStack下发指令,底层虚拟化软件干活。
三者协同关系:
OpenStack云管理平台 + 虚拟化软件(KVM) + 底层操作系统,三者配合完成云平台能力。
1.3 版本发布规则
OpenStack社区每年发布2个大版本,4月、10月各一次 ,版本名称按照英文字母顺序命名。
PPT文档使用示例版本:Yoga(2022年发布),前面经典版本包括Train、Ussuri、Victoria、Wallaby、Xena等。
1.4 OpenStack设计理念

三大核心理念:开放、灵活、可扩展
- 开放:完全开源,尽量复用已有的开源项目,不重复造轮子。
- 灵活:架构支持裁剪,大量功能采用插件化设计,可以按需开启关闭能力。
- 可扩展:由多个独立项目组成,每个项目包含多个服务组件;无中心、无状态架构,方便横向扩容集群节点。
1.5 容易混淆概念辨析
✅ OpenStack VS 虚拟化

| OpenStack | 虚拟化(如KVM) |
|---|---|
| 属于控制面管理软件,本身不做硬件资源隔离 | 属于数据面底层技术,Hypervisor,真正实现资源隔离 |
| 可以对接多种虚拟化技术(KVM、VMware等) | 负责环境隔离、资源复用,提升虚拟机运行效率 |
| 对外提供统一API接口管理资源池 | 底层干活,产出虚拟机实例 |
一句话:虚拟化是OpenStack的底层实现手段,但OpenStack不等于虚拟化。
✅ OpenStack VS 云计算

OpenStack只是构建云计算平台的核心框架组件,不等于完整云计算 。
一套完整的云,除OpenStack之外,还需要硬件机房设备、运维系统OSS、计费BSS系统、云控制台、上层云服务等周边组件一起配合,才能形成完整云计算。
2 OpenStack整体架构

2.1 逻辑架构说明
OpenStack由大量独立服务组成:
- 几乎所有服务都提供API接口,接收用户请求。
- 服务之间通过RabbitMQ消息队列通信;业务数据存放在数据库(MariaDB/MySQL)。
- 用户访问途径三种:Web界面Horizon、命令行CLI、直接调用Rest API。
2.2 生产部署物理架构
生产环境一般分为三类节点:
- 控制节点(Infrastructure Control Plane Host):部署数据库、消息队列、各个OpenStack管理服务,一般多台做高可用。
- 计算节点(Compute Host):安装Hypervisor(KVM),真正跑虚拟机实例,横向扩展加机器就扩容算力。
- 存储节点(Storage Host):部署Cinder块存储等服务,提供虚拟机磁盘资源。
3 OpenStack核心服务组件详解
OpenStack每个组件都是独立服务,各司其职,组件之间互相依赖。
| 组件名称 | 中文名称 | 核心功能 | 依赖说明 |
|---|---|---|---|
| Horizon | 仪表盘界面 | Web网页控制台,给管理员/普通用户操作云资源,可视化页面 | 依赖Keystone做身份认证 |
| Keystone | 身份认证服务 | 整个云的账号密码、权限、多租户管理;服务注册发现;所有组件都要找它鉴权 | 所有服务的基础,必选组件 |
| Glance | 镜像服务 | 管理虚拟机操作系统镜像,上传、查询、下载镜像;镜像可以存本地、Swift对象存储 | 依赖Keystone |
| Nova | 计算服务 | 管理虚拟机实例,调度CPU内存资源,对接底层KVM;也支持裸金属、容器管理 | 依赖Keystone、Glance、Neutron |
| Neutron | 网络服务 | 网络即服务,管理虚拟路由器、子网、网卡、安全组,给虚拟机提供虚拟网络 | 依赖Keystone |
| Cinder | 块存储服务 | 给虚拟机挂载持久化云硬盘,磁盘可以独立于虚拟机存在,支持多种存储后端驱动 | 依赖Keystone |
| Swift | 对象存储服务 | 分布式对象存储,适合存大量非结构化数据,镜像、备份文件等,高可用 | 依赖Keystone |
| Heat | 编排服务 | 模板化批量部署资源,写模板一次性创建虚拟机、网络、硬盘整套环境 | 依赖Keystone |
| Ceilometer | 计量监控服务 | 收集全平台资源使用数据,用于资源监控、告警、计费统计 | 依赖Keystone |
通俗理解:
- Keystone = 门卫,管账号权限
- Horizon = 前台网页操作大厅
- Glance = 操作系统镜像仓库
- Nova = 虚拟机调度管理员,指挥计算节点KVM创建VM
- Neutron = 网络工程师,给虚拟机配网卡、子网
- Cinder = 硬盘仓库,提供云硬盘
- Swift = 文件仓库,存图片、备份
- Heat = 自动化脚本,一键部署整套环境
- Ceilometer = 监控电表,统计资源用量
4 创建一台虚拟机(VM)交互流程
创建VM需要哪些资源

要创建一台虚拟机,必须准备:
- 身份权限(Keystone)
- OS镜像(Glance)
- CPU内存算力资源(Nova + KVM计算节点)
- 虚拟网络(Neutron,网卡、子网)
- 系统盘/可选数据盘(Cinder)
完整业务交互过程
- 用户登录Horizon网页(或者调用API),提交创建虚拟机请求;请求先经过Keystone校验账号密码权限。
- Nova接收创建虚拟机请求,向Glance获取操作系统镜像。
- Nova调度器挑选合适的计算节点,下发指令到计算节点上的KVM,真正创建虚拟机。
- Neutron为虚拟机分配虚拟网卡、分配IP地址,打通网络。
- 如果需要额外云硬盘,调用Cinder服务创建块存储卷挂载给虚拟机。
- Heat编排服务可以通过模板,一次性完成以上全部资源的批量创建。
- Swift可以用来存放镜像、虚拟机备份文件。
思考题:为什么OpenStack被称为云操作系统?
答案参考:OpenStack向下接管服务器硬件资源,向上对外提供统一API,对上层用户屏蔽底层硬件差异,像操作系统管理电脑硬件一样管理整个数据中心服务器集群,因此被叫做云操作系统。
5 Packstack 实操部署 OpenStack‑Victoria(CentOS‑Stream‑8)
5.1 资源清单
- ISO:CentOS‑Stream‑8‑20240603.0‑x86_64‑dvd1.iso
- 虚拟化环境:VMware Workstation 17.5
- OpenStack 版本:Victoria
- 节点硬件配置
| 节点 | CPU | 内存 | 网卡 | 磁盘 |
|---|---|---|---|---|
| controller | 4 核 | 8G | NAT | 100G |
| compute | 4 核 | 8G | NAT | 100G |
5.2 网络规划
VMware NAT 网络:192.168.108.0/24
- Windows 下 VMware NAT 网关:
192.168.108.2 - Linux 下 VMware NAT 网关:
192.168.108.1 - controller:
192.168.108.10 - compute:
192.168.108.11
/etc/hosts 写入内容
bash
192.168.108.10 controller
192.168.108.11 compute
5.3 步骤一:制作基础模板虚拟机
- 安装 CentOS‑Stream‑8 minimal 版本,完成基础系统安装。
- 配置阿里 yum 源,清空旧 repo 文件
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
bash
echo '192.168.108.10 controller' >> /etc/hosts
echo '192.168.108.11 compute' >> /etc/hosts
- 关闭 SELinux
bash
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
- 网卡使用 DHCP 自动获取
/etc/sysconfig/network-scripts/ifcfg-ens160
bash
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens160
DEVICE=ens160
ONBOOT=yes
- 清理克隆相关唯一标识(防止克隆后冲突)
bash
cd /etc/ssh/
rm -rf ssh_host_*
cat /dev/null > /etc/machine-id
- 关机,拍摄 VMware 快照,作为模板。
bash
poweroff
5.4 步骤二:克隆出 controller、compute 两个节点
- 对模板虚拟机执行完整克隆 ,分别命名:
openstack_controller、openstack_compute。
⚠️ 必须是完整克隆,不能用链接克隆。
- 虚拟机处理器设置:勾选「虚拟化 Intel VT‑x/EPT or AMD‑V/RVI」,开启嵌套虚拟化。
- 开机分别配置两台机器。
controller 节点配置
bash
# 修改主机名
hostnamectl set-hostname controller
# 修改网卡静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens160
bash
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.10
NETMASK=255.255.255.0
GATEWAY=192.168.108.2
DNS1=192.168.108.2
bash
nmcli connection reload ens160
nmcli connection up ens160
配置 chrony 时间同步(controller 作为 NTP 服务端)
bash
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 节点配置
bash
hostnamectl set-hostname compute
vim /etc/sysconfig/network-scripts/ifcfg-ens160
bash
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.11
NETMASK=255.255.255.0
GATEWAY=192.168.108.2
DNS1=192.168.108.2
bash
nmcli connection reload ens160
nmcli connection up ens160
chrony 配置,指向 controller 做时间源
bash
vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server controller iburst
systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v
配置完成,关机,分别拍摄快照。
bash
poweroff
5.5 步骤三:Packstack 安装 OpenStack Victoria
全部操作在 controller 节点执行。
- 安装 packstack 工具
bash
yum install -y openstack-packstack
- 生成应答文件
bash
packstack --gen-answer-file=answers.txt
- 修改 answers.txt 关键参数
bash
vim answers.txt
# 开启heat组件
CONFIG_HEAT_INSTALL=y
# 指定控制节点+计算节点IP
CONFIG_COMPUTE_HOSTS=192.168.108.10,192.168.108.11
# OVN外部网桥绑定网卡ens160
CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:ens160
# 不部署demo测试项目
CONFIG_PROVISION_DEMO=n
# 把所有随机密码统一改为 huawei
sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
- 关闭 NetworkManager(会和 OpenStack 网络组件冲突)
controller、compute 两台节点都执行
bash
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager
- 根据应答文件开始部署 OpenStack
bash
packstack --answer-file=answers.txt
注意:在
Testing if puppet apply is finished步骤会卡住很久,约 40‑50 分钟,属于正常现象,耐心等待。日志路径:
/var/tmp/packstack/xxxx/openstack-setup.log
出现 **** Installation completed successfully ****** 代表部署成功。
5.6 安装后验证配置
- 两台节点启动 network 服务
bash
systemctl start network
systemctl enable network
- 配置 openstack 命令行补全(controller 节点)
bash
openstack complete >> /etc/bash_completion.d/complete
- Web 界面访问测试
浏览器访问:http://192.168.108.10/dashboard
- 用户名:
admin - 密码:
huawei
- 验证登录成功之后,关机,对 controller、compute 拍摄完成快照,方便后续还原环境。
6 总结
- OpenStack 起源 NASA+Rackspace,对标 AWS,开源 IaaS 云平台,只是管理平台,本身不做虚拟化,底层依赖 KVM 等 Hypervisor。
- 架构采用组件化、插件化、无状态设计,方便大规模扩展私有云。
- 各个核心组件分工明确:Keystone 鉴权、Horizon 页面、Nova 计算、Neutron 网络、Glance 镜像、Cinder 块存储、Swift 对象存储、Heat 编排、Ceilometer 监控。
- 创建虚拟机是多个组件协同工作,不是单一服务完成。
- OpenStack ≠ 完整云计算,还需要配套硬件、运维、计费系统共同组成完整云。
- Packstack 是 OpenStack 快速部署工具,适合学习实验环境;生产环境一般采用 Ansible 等方案做高可用部署。
拓展资料:OpenStack社区官网 https://www.openstack.org