☰
OpenStack私有云搭建实战:从裸机到虚拟机的完整指南
2026/10/4 2:03:17 网站建设 项目流程

简介:这份PDF面向云计算运维人员、OpenStack初学者及需要落地私有云的技术团队,系统梳理基于OpenStack搭建私有云的完整实践路径,帮助读者理解各核心组件的作用与配置方法。资源共1个PDF文件,压缩包约1.64MB,内容以图文步骤形式呈现,便于按章节对照操作。目录涵盖基础环境准备、NTP时间同步、NOVA计算服务安装、NEUTRON网络服务配置,以及PackStack快速安装、Cell创建、用户查看、页面登录与日志排查等模块,并延伸至Cinder、Glance、Swift、Horizon等组件的部署思路,同时涉及安全监控与自动化运维工具的使用。已有890人学习下载,适合希望从零掌握私有云搭建流程、积累组件集成与排错经验的中高级读者参考。

1. 从一台裸机到能跑虚拟机的私有云:OpenStack 搭建到底在搭什么

很多团队第一次动私有云的念头,往往不是因为预算多,而是因为几台闲置的物理服务器实在浪费——CPU 常年跑不到 20%,内存空着一大半,可新项目上线还得再申请机器。这时候「基于 OpenStack 的私有云搭建」就成了一个绕不开的选项。它要解决的核心问题很朴素:把一堆物理机的计算、存储、网络抽象成池子,让上层按需开出虚拟机,用完回收。适合谁?手里有三到十台同构服务器、有内网、想自己掌控资源调度和镜像分发的运维或后端团队。不适合只有一两台机器、或者只想跑几个容器的场景,那种情况用更轻的方案更划算。这一章先把「搭的到底是什么」讲清楚,后面再落到具体命令和参数。

OpenStack 不是一个软件,而是一组服务的集合。你听到的 Nova、Neutron、Glance、Keystone、Cinder、Horizon,各自负责计算、网络、镜像、认证、块存储、面板。搭建的本质,是让这些服务在控制节点和计算节点上各就各位,通过消息队列和数据库串起来,最后能通过一条命令开出一台能 ping 通、能 SSH 的虚拟机。理解了这一点,后面所有报错都能归位到「哪个服务没起来、哪个连接串配错了」。

2. 选型与拓扑:控制节点和计算节点怎么分,网络怎么划

2.1 三种典型部署规模与对应拓扑

在动手之前,先确定你要搭多大。规模直接决定拓扑,拓扑决定后面每一步的配置。常见做法分三档:

规模物理机数量控制节点计算节点适用场景
最小验证1 台与控制合一同机学习、跑通流程
小团队3 台1 台独立2 台内部测试、少量业务
生产起步5 台以上3 台高可用按需扩展正式业务承载

最小验证用一台机器把控制服务和计算服务装在一起,能跑通但性能差、故障域集中,只适合验证流程。小团队把控制节点独立出来,计算节点专门跑虚拟机,这是性价比最高的一档。生产起步要考虑控制节点高可用,数据库和消息队列也要集群化,复杂度陡增,不建议第一次搭建就上。

2.2 网络平面划分:管理网、业务网、存储网别混在一起

网络是 OpenStack 搭建里最容易翻车的地方。血泪经验是:把所有流量塞进一张网卡,前期省事,后期 Neutron 一开虚拟机就各种不通。正确做法是至少分三个平面:

  • 管理网:跑 API、消息队列、数据库流量,节点之间互通即可,不对外。
  • 业务网:虚拟机对外提供服务的网络,通常配合 Neutron 的 provider 网络或浮动 IP。
  • 存储网:Cinder 和 Swift 的数据流量,如果后端用 Ceph,这张网必须独立且带宽足够。

如果物理网卡不够,可以用 VLAN 在交换机上划分,但管理网和存储网强烈建议物理隔离。我一般会在装系统时就规划好网卡命名和 IP,避免后期改配置牵一发动全身。

2.3 操作系统与基础依赖的版本对齐

OpenStack 对操作系统版本敏感。常见做法是选一个长期支持的发行版,比如 Ubuntu 22.04 或 CentOS Stream 9,然后严格按官方文档对应的版本装依赖。不要混用不同大版本的仓库源,否则会出现 Python 包冲突这种玄学问题。

基础依赖包括:时间同步(NTP)、消息队列(RabbitMQ)、数据库(MySQL/MariaDB)、缓存(Memcached)。这几样必须在装 OpenStack 服务之前全部跑通,并且能互相连通。下面是一段检查连通性的命令示例:

# 检查 NTP 同步状态,所有节点时间差应小于 1 秒 chronyc sources -v # 检查 RabbitMQ 端口是否可达(在控制节点执行) nc -zv controller 5672 # 检查 MySQL 是否可连接 mysql -h controller -u root -p -e "SHOW DATABASES;"

逻辑说明:NTP 不同步会导致 Keystone 令牌校验失败,表现为「认证莫名其妙过期」;RabbitMQ 不通则 Nova 和 Neutron 之间无法通信,虚拟机创建会卡在 scheduling。参数上,RabbitMQ 默认端口 5672,MySQL 默认 3306,如果改过端口,后面所有配置文件的连接串都要同步改。

3. 用 Packstack 快速跑通最小验证环境

3.1 Packstack 是什么,什么时候该用它

Packstack 是一个基于 Puppet 的自动化部署工具,能在单台或少量机器上快速拉起一套 OpenStack。热搜里「基于 packstack 安装 openstack」出现频率很高,说明很多人是从它入门的。它的价值在于:把几十步手工配置压缩成一条命令,适合验证和教学。但它不适合生产,因为默认配置偏简单,高可用和性能调优基本没有。

我一般会先用 Packstack 在一台虚拟机上跑通全流程,确认自己对网络和认证的理解没问题,再转手工部署或更成熟的工具。这样能快速建立信心,也能提前暴露环境问题。

3.2 最小验证的完整命令与参数解释

在 CentOS Stream 9 上,先装好仓库源,然后执行:

# 安装 packstack dnf install -y openstack-packstack # 生成应答文件,便于修改参数 packstack --gen-answer-file=answer.txt # 编辑 answer.txt,关键参数如下: # CONFIG_DEFAULT_PASSWORD=YourStrongPass # CONFIG_KEYSTONE_ADMIN_PW=YourAdminPass # CONFIG_NOVA_COMPUTE_HOSTS=192.168.1.10 # CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vlan,vxlan # CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan # CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex # CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth1 # 执行安装 packstack --answer-file=answer.txt

逻辑说明:--gen-answer-file生成一份包含所有可配置项的模板,改完再执行,比直接命令行传参更可控。CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS定义外部网络的逻辑名称和网桥的映射,CONFIG_NEUTRON_OVS_BRIDGE_IFACES指定哪块物理网卡桥接到这个网桥。如果这里写错,虚拟机拿到 IP 也出不了外网。

参数上,CONFIG_DEFAULT_PASSWORD是所有服务的默认密码,生产环境必须改;CONFIG_KEYSTONE_ADMIN_PW是 admin 用户的密码,后面登录面板要用。安装过程大约 20 到 40 分钟,取决于机器性能和网络。

3.3 安装后验证:开一台虚拟机确认全链路

装完后不要急着庆祝,先验证。步骤是:登录面板或命令行,上传一个镜像,创建网络,开一台虚拟机,然后 ping 和 SSH。

# 加载 admin 凭证 source /root/keystonerc_admin # 查看服务状态,所有服务应为 enabled 和 up openstack compute service list openstack network agent list # 上传一个 cirros 测试镜像 openstack image create --disk-format qcow2 --container-format bare \ --file cirros-0.5.2-x86_64-disk.img cirros # 创建外部网络和子网 openstack network create --external --provider-physical-network extnet \ --provider-network-type flat public openstack subnet create --network public --subnet-range 192.168.1.0/24 \ --gateway 192.168.1.1 --no-dhcp public-subnet # 创建租户网络和子网 openstack network create private openstack subnet create --network private --subnet-range 10.0.0.0/24 private-subnet # 创建路由并连接两个网络 openstack router create router1 openstack router set --external-gateway public router1 openstack router add subnet router1 private-subnet # 开虚拟机 openstack server create --flavor m1.tiny --image cirros \ --nic net-id=$(openstack network show private -f value -c id) test-vm

逻辑说明:openstack compute service list看 Nova 的计算服务是否注册成功;network agent list看 Neutron 的代理是否 alive。镜像用 cirros 是因为它小、启动快,适合验证。网络部分先建外部网络(flat 类型,直接桥接到物理网卡),再建租户网络(vxlan),然后用路由打通。最后开虚拟机时指定租户网络的 ID。

如果虚拟机卡在 building,用openstack server show test-vm看 fault 字段;如果网络不通,检查安全组规则和路由的 NAT 是否生效。

4. 手工部署时最容易踩的五个坑

4.1 现象:Keystone 认证失败,提示 token 过期

原因:节点之间时间不同步,或者 Memcached 没起来。Keystone 的令牌默认存在 Memcached 里,缓存服务挂了会导致认证随机失败。

解决:先chronyc sources确认时间同步,再systemctl status memcached确认服务运行,最后检查/etc/keystone/keystone.conf里的[memcache]配置是否指向正确的地址和端口。

4.2 现象:虚拟机创建成功但 ping 不通外网

原因:Neutron 的 NAT 规则没生效,或者外部网桥没配好。常见于br-ex没有绑定物理网卡,或者安全组默认规则拦截了流量。

解决:在计算节点执行ovs-vsctl show看网桥和端口;在控制节点ip netns进入路由命名空间,检查 iptables 的 nat 表。安全组方面,临时放行所有流量测试:openstack security group rule create --proto icmp --remote-ip 0.0.0.0/0 default。

4.3 现象:Cinder 创建卷一直卡在 creating

原因:Cinder 的后端存储没配好,或者存储网不通。如果后端用 LVM,要确认卷组存在且 Cinder 有权限。

解决:看/var/log/cinder/cinder-volume.log,常见错误是「Unable to find volume group」。用vgs确认卷组名,然后改/etc/cinder/cinder.conf里的volume_group参数,重启服务。

4.4 现象:Horizon 面板能登录但列表加载不出来

原因:通常是 API 端点配置错误,或者防火墙拦截了服务端口。Horizon 通过 AJAX 调各个服务的 API,任何一个不通都会导致页面卡住。

解决:在浏览器开发者工具看 Network 面板,找到失败的请求,确认对应的 API 端口是否开放。用openstack endpoint list检查端点地址是否和实际一致。

4.5 现象:重启后服务起不来,报数据库连接错误

原因:MySQL 没设开机自启,或者连接数满了。OpenStack 服务多,每个都占连接,默认的 max_connections 可能不够。

解决:systemctl enable mariadb设自启;改/etc/my.cnf把max_connections调到 1000 以上,重启数据库和服务。

5. 从能跑到好用:镜像优化与资源超分的两个技巧

5.1 镜像瘦身:让虚拟机启动从分钟级降到秒级

跑通之后,你会发现默认镜像启动慢、占空间。我一般会做两件事:一是用virt-sysprep清理镜像里的机器 ID、SSH 密钥、日志,避免每次开虚拟机都重新生成;二是把常用镜像转成 raw 格式并预分配,虽然占空间但启动快。

# 清理镜像 virt-sysprep -a ubuntu-22.04.qcow2 # 转换格式并预分配 qemu-img convert -f qcow2 -O raw ubuntu-22.04.qcow2 ubuntu-22.04.raw

逻辑说明:virt-sysprep会重置网络配置、删除 SSH host key、清空日志,这样克隆出来的虚拟机不会冲突。转 raw 后,Glance 上传时用--disk-format raw,Nova 启动时少一层格式转换,实测启动时间能缩短三分之一。

5.2 资源超分:把 CPU 和内存的利用率提上去

私有云的价值在于超分。Nova 默认的 CPU 超分比是 16:1,内存是 1.5:1,但实际能超多少取决于业务负载。我一般会先设保守值,观察一段时间再调。

改/etc/nova/nova.conf:

[default] cpu_allocation_ratio = 4.0 ram_allocation_ratio = 1.5 disk_allocation_ratio = 1.0

逻辑说明:cpu_allocation_ratio是物理核和虚拟核的比例,4.0 表示 1 个物理核可以分配给 4 个虚拟核。ram_allocation_ratio是内存超分,1.5 表示 1G 物理内存可以分配 1.5G 给虚拟机。disk_allocation_ratio一般设 1.0,因为磁盘超分容易导致数据丢失。改完重启 nova-scheduler 和 nova-compute。

验证方法:开一批虚拟机,用openstack hypervisor stats show看 vcpus 和 memory 的分配率,如果长期低于 80%,可以继续调高;如果出现虚拟机卡顿,就回调。

我自己的习惯是每次调完超分比,至少观察一周再动,因为内存超分导致的 OOM 往往在高峰期才暴露。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询