OpenStack架构介绍和安装流程

OpenStack架构介绍和安装流程

0 前言

OpenStack是目前业界主流的开源IaaS私有云平台,本博客从起源演进、基础概念、整体架构、核心组件、业务交互流程几个维度讲解OpenStack,读完可以搞懂:

  1. OpenStack的由来、版本迭代、设计思想
  2. OpenStack和虚拟化、云计算的关系
  3. 各个核心组件是干什么的,互相如何配合
  4. 创建一台虚拟机背后完整业务流程

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. 开放:完全开源,尽量复用已有的开源项目,不重复造轮子。
  2. 灵活:架构支持裁剪,大量功能采用插件化设计,可以按需开启关闭能力。
  3. 可扩展:由多个独立项目组成,每个项目包含多个服务组件;无中心、无状态架构,方便横向扩容集群节点。

1.5 容易混淆概念辨析

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

一句话:虚拟化是OpenStack的底层实现手段,但OpenStack不等于虚拟化。

✅ OpenStack VS 云计算

OpenStack只是构建云计算平台的核心框架组件,不等于完整云计算

一套完整的云,除OpenStack之外,还需要硬件机房设备、运维系统OSS、计费BSS系统、云控制台、上层云服务等周边组件一起配合,才能形成完整云计算。

2 OpenStack整体架构

2.1 逻辑架构说明

OpenStack由大量独立服务组成:

  1. 几乎所有服务都提供API接口,接收用户请求。
  2. 服务之间通过RabbitMQ消息队列通信;业务数据存放在数据库(MariaDB/MySQL)。
  3. 用户访问途径三种:Web界面Horizon、命令行CLI、直接调用Rest API。

2.2 生产部署物理架构

生产环境一般分为三类节点:

  1. 控制节点(Infrastructure Control Plane Host):部署数据库、消息队列、各个OpenStack管理服务,一般多台做高可用。
  2. 计算节点(Compute Host):安装Hypervisor(KVM),真正跑虚拟机实例,横向扩展加机器就扩容算力。
  3. 存储节点(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需要哪些资源

要创建一台虚拟机,必须准备:

  1. 身份权限(Keystone)
  2. OS镜像(Glance)
  3. CPU内存算力资源(Nova + KVM计算节点)
  4. 虚拟网络(Neutron,网卡、子网)
  5. 系统盘/可选数据盘(Cinder)

完整业务交互过程

  1. 用户登录Horizon网页(或者调用API),提交创建虚拟机请求;请求先经过Keystone校验账号密码权限。
  2. Nova接收创建虚拟机请求,向Glance获取操作系统镜像。
  3. Nova调度器挑选合适的计算节点,下发指令到计算节点上的KVM,真正创建虚拟机。
  4. Neutron为虚拟机分配虚拟网卡、分配IP地址,打通网络。
  5. 如果需要额外云硬盘,调用Cinder服务创建块存储卷挂载给虚拟机。
  6. Heat编排服务可以通过模板,一次性完成以上全部资源的批量创建。
  7. 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 步骤一:制作基础模板虚拟机

  1. 安装 CentOS‑Stream‑8 minimal 版本,完成基础系统安装。
  2. 配置阿里 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
  1. 安装基础工具包
bash 复制代码
yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
  1. 配置 hosts
bash 复制代码
echo '192.168.108.10 controller' >> /etc/hosts
echo '192.168.108.11 compute' >> /etc/hosts
  1. 关闭 SELinux
bash 复制代码
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
  1. 网卡使用 DHCP 自动获取
    /etc/sysconfig/network-scripts/ifcfg-ens160
bash 复制代码
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens160
DEVICE=ens160
ONBOOT=yes
  1. 清理克隆相关唯一标识(防止克隆后冲突)
bash 复制代码
cd /etc/ssh/
rm -rf ssh_host_*
cat /dev/null > /etc/machine-id
  1. 关机,拍摄 VMware 快照,作为模板。
bash 复制代码
poweroff

5.4 步骤二:克隆出 controller、compute 两个节点

  1. 对模板虚拟机执行完整克隆 ,分别命名:openstack_controlleropenstack_compute

⚠️ 必须是完整克隆,不能用链接克隆。

  1. 虚拟机处理器设置:勾选「虚拟化 Intel VT‑x/EPT or AMD‑V/RVI」,开启嵌套虚拟化。
  2. 开机分别配置两台机器。
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 节点执行。

  1. 安装 packstack 工具
bash 复制代码
yum install -y openstack-packstack
  1. 生成应答文件
bash 复制代码
packstack --gen-answer-file=answers.txt
  1. 修改 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
  1. 关闭 NetworkManager(会和 OpenStack 网络组件冲突)

controller、compute 两台节点都执行

bash 复制代码
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager
  1. 根据应答文件开始部署 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 安装后验证配置

  1. 两台节点启动 network 服务
bash 复制代码
systemctl start network
systemctl enable network
  1. 配置 openstack 命令行补全(controller 节点)
bash 复制代码
openstack complete >> /etc/bash_completion.d/complete
  1. Web 界面访问测试
    浏览器访问:http://192.168.108.10/dashboard
  • 用户名:admin
  • 密码:huawei
  1. 验证登录成功之后,关机,对 controller、compute 拍摄完成快照,方便后续还原环境。

6 总结

  1. OpenStack 起源 NASA+Rackspace,对标 AWS,开源 IaaS 云平台,只是管理平台,本身不做虚拟化,底层依赖 KVM 等 Hypervisor。
  2. 架构采用组件化、插件化、无状态设计,方便大规模扩展私有云。
  3. 各个核心组件分工明确:Keystone 鉴权、Horizon 页面、Nova 计算、Neutron 网络、Glance 镜像、Cinder 块存储、Swift 对象存储、Heat 编排、Ceilometer 监控。
  4. 创建虚拟机是多个组件协同工作,不是单一服务完成。
  5. OpenStack ≠ 完整云计算,还需要配套硬件、运维、计费系统共同组成完整云。
  6. Packstack 是 OpenStack 快速部署工具,适合学习实验环境;生产环境一般采用 Ansible 等方案做高可用部署。

拓展资料:OpenStack社区官网 https://www.openstack.org

相关推荐
这个DBA有点耶19 分钟前
同城双活落地的三座山:网络延迟、脑裂预防、反向同步
数据库·架构·dba
我命由我123451 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
我是大AI1 小时前
实战解析:基于多源交叉验证的AI幻觉治理架构与GEO行业解决方
人工智能·架构
xx~t1 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
yangdaxiageo1 小时前
AI搜索广告的商业化底座:GEO技术架构的三层模型详解
人工智能·架构
Uncertainty!!2 小时前
Linux 主机无法完成校园网认证排查记录:从 DHCP、ARP 到 Portal 认证流程分析
linux·运维·服务器
神威难绷泪2 小时前
Linux消息队列 & 共享内存 笔记
linux·消息队列·共享内存
代码方舟2 小时前
零信任架构实战:基于天远车辆估值构建自动化二手车评估网关
运维·人工智能·架构·自动化
xiaohaiAIgeo2 小时前
【2026年】实验室IoT三层部署架构详解
人工智能·物联网·架构·科普知识