CentOS Stream 零基础搭建私有云 OpenStack 全流程详解与实战避坑指南

引言:为什么选择 OpenStack 与 CentOS Stream?
OpenStack 是一个开源的云计算平台,允许你构建和管理私有云或公有云。它提供了基础设施即服务(IaaS)的功能,包括虚拟机管理、存储、网络等。对于零基础用户来说,搭建 OpenStack 可能看起来复杂,但通过系统化的步骤,你可以逐步掌握它。
CentOS Stream 是 Red Hat Enterprise Linux (RHEL) 的上游开发分支,提供了一个稳定且前瞻性的平台,非常适合运行 OpenStack。它继承了 CentOS 的稳定性,同时支持最新的软件包更新。根据 OpenStack 官方文档(截至 2023 年),CentOS Stream
8
⁄
9
是推荐的部署平台之一,因为它与 OpenStack 的上游版本兼容性良好。
为什么选择私有云?私有云让你完全控制硬件和数据,适合企业或个人学习者。相比公有云(如 AWS),它更经济,但需要更多手动配置。本指南将从零基础出发,详细讲解全流程,包括环境准备、安装、配置和常见问题避坑。我们将使用 Packstack(OpenStack 的一键安装工具)来简化过程,因为它适合初学者。
注意
:本指南基于 OpenStack Yoga 版本(当前稳定版)和 CentOS Stream 9。整个过程假设你有两台虚拟机或物理机:一台作为控制节点(Controller),一台作为计算节点(Compute)。如果你只有一台机器,可以单节点部署,但生产环境推荐多节点。
系统要求
:
控制节点:至少 4 核 CPU、8GB RAM、100GB 磁盘。
计算节点:至少 2 核 CPU、4GB RAM、50GB 磁盘。
网络:所有节点在同一局域网,控制节点需静态 IP(如 192.168.1.10),计算节点类似。
硬件支持:确保 BIOS 启用虚拟化(VT-x/AMD-V)。
在开始前,备份所有数据,并在测试环境中操作。让我们一步步来。
第一部分:环境准备
1.1 安装 CentOS Stream
首先,在所有节点上安装 CentOS Stream 9。你可以从
CentOS 官网
下载 ISO 镜像。
步骤
:
使用虚拟化软件(如 VirtualBox 或 VMware)创建虚拟机,或在物理机上安装。
启动安装程序,选择 “Install CentOS Stream 9”。
配置:
语言:English(推荐)。
网络:设置静态 IP。例如,控制节点:IP 192.168.1.10,网关 192.168.1.1,DNS 8.8.8.8。
分区:自动分区即可,或手动设置
/
至少 50GB,
/var
至少 30GB(用于 OpenStack 存储)。
软件选择:Minimal Install(最小安装,避免多余包)。
创建用户:root 用户密码设置复杂些,创建一个普通用户(如
stack
)用于 OpenStack 操作。
完成安装,重启。
验证安装
:
登录后,运行以下命令更新系统:
sudo dnf update -y
sudo dnf install -y epel-release
这会安装 EPEL 仓库,提供额外软件包。
避坑指南
:
如果安装失败,检查虚拟机内存是否足够(至少 2GB)。
确保防火墙初始关闭:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
(后续会配置)。
SELinux:保持 Enforcing 模式,但后续需配置规则。
1.2 配置网络和主机名
OpenStack 依赖可靠的网络。所有节点需能互相 ping 通。
步骤
:
设置主机名:
控制节点:
sudo hostnamectl set-hostname controller
计算节点:
sudo hostnamectl set-hostname compute1
编辑
/etc/hosts
文件(所有节点相同):
192.168.1.10 controller
192.168.1.11 compute1
使用
sudo vi /etc/hosts
编辑。
配置静态 IP(如果未在安装时设置):
编辑
/etc/NetworkManager/system-connections/ens33.nmconnection
(接口名可能不同,用
ip addr
查看):
“`
[connection]
id=ens33
type=ethernet
autoconnect=yes
[ethernet]
mac-address=xx:xx:xx:xx:xx:xx
[ipv4]
method=manual
addresses=192.168.1.
10
⁄
24
gateway=192.168.1.1
dns=8.8.8.8
重启网络:`sudo nmcli con reload && sudo nmcli con up ens33`。
4. 测试:从控制节点 ping 计算节点:`ping compute1`。

**避坑指南**:
– 如果网络不通,检查虚拟机网络模式(桥接模式最好)。
– 避免使用 DHCP,以防 IP 变化导致 OpenStack 服务中断。
– 时间同步:安装 NTP:`sudo dnf install -y chrony && sudo systemctl enable –now chrony`。所有节点运行 `chronyc sources` 验证同步。

### 1.3 配置防火墙和 SELinux

OpenStack 需要开放多个端口,但为简化,我们先关闭防火墙,后续手动配置。

**步骤**:
1. 关闭防火墙(测试环境):
“`bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
生产环境:使用
firewall-cmd
开放端口,如 5000 (Keystone)、8774 (Nova API) 等。
SELinux 配置:
OpenStack 需要 SELinux 策略。安装工具:
sudo dnf install -y policycoreutils-python-utils
后续在 Packstack 中会自动处理,但手动检查:
sestatus
应为 Enforcing。
安装其他基础包:
sudo dnf install -y wget curl vim git
避坑指南
:
SELinux 错误常见:如果服务启动失败,检查
/var/log/audit/audit.log
,使用
ausearch -m avc -ts recent
查看。
不要完全禁用 SELinux,除非必要;否则用
setenforce 0
临时测试。
第二部分:安装 OpenStack
我们将使用 Packstack 安装 OpenStack。它是一个 Puppet-based 的工具,自动化大部分配置。
2.1 安装 Packstack
在控制节点上操作(所有 OpenStack 服务主要运行在控制节点)。
步骤
:
添加 OpenStack 仓库:
sudo dnf install -y centos-release-openstack-yoga
sudo dnf update -y
安装 Packstack:
sudo dnf install -y openstack-packstack
验证
:运行
packstack –help
检查是否安装成功。
避坑指南
:
如果 dnf 报错,检查网络或仓库:
sudo dnf repolist
。
CentOS Stream 9 可能需启用 PowerTools 仓库:
sudo dnf config-manager –set-enabled crb
(或 PowerTools 对于 Stream 8)。
2.2 生成并编辑 Answer 文件
Packstack 使用 answer 文件自定义安装。
步骤
:
生成初始 answer 文件:
packstack –gen-answer-file=/root/answer.txt
编辑文件:
vi /root/answer.txt
。关键修改:
CONFIG_NTP_SERVERS=0.pool.ntp.org
(时间同步)。
CONFIG_SWIFT_INSTALL=n
(如果不需对象存储)。
CONFIG_CEILOMETER_INSTALL=n
(如果不需监控)。
CONFIG_KEYSTONE_ADMIN_PW=your_password
(设置 admin 密码)。
CONFIG_COMPUTE_HOSTS=192.168.1.11
(计算节点 IP)。
CONFIG_NETWORK_HOSTS=192.168.1.10
(网络节点,通常是控制节点)。
如果单节点:
CONFIG_COMPUTE_HOSTS=192.168.1.10
。
示例部分编辑(完整文件很长,只改必要项):
# 网络配置
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vlan,vxlan
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch,l2population

# 计算节点
CONFIG_COMPUTE_HOSTS=192.168.1.11
避坑指南
:
备份 answer 文件:
cp /root/answer.txt /root/answer.txt.bak
。
如果多节点,确保 SSH 无密码登录:在控制节点生成密钥
ssh-keygen
,复制到计算节点
ssh-copy-id root@compute1
。
常见错误:IP 不匹配导致节点无法连接。验证:
ping 192.168.1.11
。
2.3 运行 Packstack 安装
步骤
:
运行安装:
packstack –answer-file=/root/answer.txt
这会下载包、配置服务,可能需 30-60 分钟。输出会显示进度,如安装 Keystone、Nova 等。
安装完成后,会生成 admin-openrc 文件:
source /root/admin-openrc
。
验证
:
检查服务:
openstack service list
(需先 source admin-openrc)。
Web 界面:访问
http://192.168.1.10/dashboard,使用
admin / 密码登录。
避坑指南
:
如果卡住,检查日志:
tail -f /var/log/packstack/*
。
内存不足:增加交换空间
dd if=/dev/zero of=/swapfile bs=1G count=4 && mkswap /swapfile && swapon /swapfile
。
错误如 “Failed to connect to database”:检查 MySQL 是否运行
systemctl status mariadb
。
网络插件错误:确保 OVS 安装
sudo dnf install -y openvswitch
。
第三部分:配置核心服务
安装后,需配置网络、存储和虚拟机。
3.1 配置 Keystone(身份服务)
Keystone 管理用户和项目。
步骤
:
Source 环境:
source /root/admin-openrc
。
创建项目和用户:
openstack project create –domain default –description “Service Project” service
openstack user create –domain default –password-prompt admin
openstack role create admin
openstack role add –project service –user admin admin
验证:
openstack token issue
。
代码示例
:创建一个测试用户脚本
create_user.sh
:
#!/bin/bash
source /root/admin-openrc
openstack project create –domain default –description “Demo Project” demo
openstack user create –domain default –password-prompt demo
openstack role create member
openstack role add –project demo –user demo member
echo “User demo created with role member”
运行:
bash create_user.sh
。
避坑指南
:
如果 token 过期,重新 source。
常见错误:域配置错,检查
/etc/keystone/keystone.conf
。
3.2 配置 Glance(镜像服务)
Glance 存储虚拟机镜像。
步骤
:
创建镜像存储目录:
sudo mkdir -p /var/lib/glance/images
。
下载 CirrOS 测试镜像(轻量 Linux):
wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
上传镜像:
openstack image create “cirros” –file cirros-0.5.2-x86_64-disk.img –disk-format qcow2 –container-format bare –public
验证:
openstack image list
。
避坑指南
:
权限问题:
sudo chown -R glance:glance /var/lib/glance/images
。
镜像上传失败:检查 Glance API
systemctl status openstack-glance-api
。
3.3 配置 Nova(计算服务)
Nova 管理虚拟机。
步骤
(在控制节点):
验证计算节点服务:
openstack compute service list
。
创建 Flavor(虚拟机规格):
openstack flavor create –id 0 –vcpus 1 –ram 512 –disk 1 m1.tiny
在计算节点,确保 Nova-Compute 运行:
systemctl status openstack-nova-compute
。
代码示例
:启动一个测试实例脚本
launch_instance.sh
:
#!/bin/bash
source /root/admin-openrc
# 获取网络 ID(稍后配置)
NET_ID=$(openstack network list | grep private | awk ‘{print $2}’)
# 启动实例
openstack server create \
–flavor m1.tiny \
–image cirros \
–nic net-id=$NET_ID \
–key-name mykey \
test-instance
# 检查状态
openstack server list
先生成密钥对:
openstack keypair create mykey –public-key ~/.ssh/id_rsa.pub
(如果没有,生成
ssh-keygen
)。
避坑指南
:
计算节点无法连接:检查
/etc/nova/nova.conf
中的 RabbitMQ 配置。
错误 “No valid host”:检查计算节点资源
virsh list
(需 Libvirt)。
确保 KVM 加速:
lsmod | grep kvm
,如果无,安装
sudo dnf install -y qemu-kvm
。
3.4 配置 Neutron(网络服务)
Neutron 提供虚拟网络。
步骤
:
创建外部网络(Flat 模式,用于浮动 IP):
openstack network create –external –provider-network-type flat public
openstack subnet create –network public –allocation-pool start=192.168.1.100,end=192.168.1.200 –dns-nameserver 8.8.8.8 –gateway 192.168.1.1 public-subnet
创建内部网络(VXLAN):
openstack network create –provider-network-type vxlan private
openstack subnet create –network private –dns-nameserver 8.8.8.8 –gateway 10.0.0.1 –subnet-range 10.0.0.0/24 private-subnet
创建路由器:
openstack router create router1
openstack router add subnet router1 private-subnet
openstack router set –external-gateway public router1
验证
:
openstack network list
和
openstack router show router1
。
避坑指南
:
网络插件错误:确保 OVS 运行
systemctl status neutron-openvswitch-agent
。
浮动 IP 无法分配:检查物理网络桥接。
MTU 问题:如果实例无法上网,设置 MTU 为 1450。
3.5 配置 Cinder(块存储服务)
Cinder 提供持久存储。
步骤
:
创建卷类型:
openstack volume type create lvm
。
在计算节点添加存储:编辑
/etc/cinder/cinder.conf
,设置
enabled_backends = lvm
。
创建卷:
openstack volume create –size 1 vol1
。
附加到实例:
openstack server add volume test-instance vol1
。
避坑指南
:
存储后端错误:如果使用 LVM,确保物理卷
pvcreate /dev/sdb
和卷组
vgcreate cinder-volumes /dev/sdb
。
权限:
sudo chown -R cinder:cinder /var/lib/cinder/volumes
。
第四部分:测试与验证
4.1 启动第一个虚拟机
使用上面的
launch_instance.sh
脚本启动实例。
完整测试流程
:
分配浮动 IP:
openstack floating ip create public
,然后
openstack server add floating ip test-instance
。
SSH 登录:
ssh cirros@
(密码:gocubsgo)。
验证网络:
ping 8.8.8.8
。
代码示例
:完整测试脚本
full_test.sh
:
#!/bin/bash
source /root/admin-openrc
echo “Creating keypair…”
openstack keypair create mykey –public-key ~/.ssh/id_rsa.pub
echo “Launching instance…”
NET_ID=$(openstack network list | grep private | awk ‘{print $2}’)
openstack server create –flavor m1.tiny –image cirros –nic net-id=$NET_ID –key-name mykey test-instance
echo “Allocating floating IP…”
FLOAT_IP=$(openstack floating ip create public | grep floating_ip_address | awk ‘{print $4}’)
openstack server add floating ip test-instance $FLOAT_IP
echo “Instance IP: $FLOAT_IP”
echo “Wait 30 seconds for boot…”
sleep 30
echo “Testing SSH…”
ssh -o StrictHostKeyChecking=no cirros@$FLOAT_IP “ping -c 3 8.8.8.8”
运行:
bash full_test.sh
。
避坑指南
:
实例卡在 Scheduling:检查 Nova 调度器日志
/var/log/nova/nova-scheduler.log
。
无法 SSH:安全组规则,添加入口规则
openstack security group rule create –proto icmp –src-ip 0.0.0.0/0 default
和
–proto tcp –dst-port 22 default
。
如果实例启动失败,检查
/var/log/nova/nova-compute.log
。
4.2 访问 Dashboard
Horizon 提供 Web UI。访问
http://192.168.1.10/dashboard
(admin/密码)。
避坑指南
:
404 错误:确保 Apache 运行
systemctl status httpd
。
登录失败:检查 Keystone 端点
openstack endpoint list
。
第五部分:高级配置与优化
5.1 配置负载均衡(可选)
使用 HAProxy 为 OpenStack 服务负载均衡。
步骤
:
安装 HAProxy:
sudo dnf install -y haproxy
。
编辑
/etc/haproxy/haproxy.cfg
,添加 Nova API 等后端。
启动:
sudo systemctl enable –now haproxy
。
避坑指南
:证书问题,使用自签名 SSL。
5.2 监控与日志
安装 Ceilometer(可选)监控资源。
步骤
:
在 answer 文件中启用
CONFIG_CEILOMETER_INSTALL=y
,重跑 Packstack。
查看日志:所有服务日志在
/var/log/openstack/
。
5.3 备份与恢复
备份数据库:
mysqldump -u root -p nova > nova.sql
。
第六部分:实战避坑指南
6.1 常见错误与解决方案
错误:RabbitMQ 连接失败
原因:端口 5672 被阻塞。
解决:
sudo firewall-cmd –add-port=5672/tcp –permanent && sudo firewall-cmd –reload
(如果启用防火墙)。检查
systemctl status rabbitmq-server
。
错误:数据库连接超时
原因:MySQL 未监听 0.0.0.0。
解决:编辑
/etc/my.cnf.d/mariadb-server.cnf
,添加
bind-address=0.0.0.0
,重启
systemctl restart mariadb
。
错误:计算节点无法注册
原因:Libvirt 未配置。
解决:
sudo systemctl enable –now libvirtd
,检查
/etc/nova/nova.conf
中的
compute_driver=libvirt.LibvirtDriver
。
错误:网络命名空间问题
原因:Neutron L3 代理未运行。
解决:
systemctl status neutron-l3-agent
,重启
systemctl restart neutron-l3-agent
。
性能问题
:实例启动慢。
解决:增加计算节点资源,或使用 SSD 存储。监控
top
和
iostat
。
6.2 安全最佳实践
更改默认密码:
openstack user password set admin
。
使用 HTTPS:配置 SSL 证书。
限制访问:使用 iptables 规则限制 Dashboard 访问 IP。
定期更新:
sudo dnf update openstack-*
。
6.3 卸载与重装
如果失败,卸载:
packstack –answer-file=/root/answer.txt –uninstall
。清理:
rm -rf /var/lib/openstack/
。
结论
通过以上步骤,你已成功在 CentOS Stream 上搭建 OpenStack 私有云。从环境准备到测试实例,我们覆盖了全流程。实践是关键:多尝试不同配置,查看日志学习。参考 OpenStack 官方文档(
https://docs.openstack.org/)获取最新更新。如果你遇到特定错误,提供日志细节,我可以进一步指导。享受你的私有云之旅!