本文定位:OpenStack Rocky 单节点的 Packstack 一键部署,目标是快速跑起来用于学习/测试。 如果你想学手动逐组件部署原理,请看 [[posts/openstack-guide/index.md]] 第 3 章「Rocky 版手动搭建」。 Python SDK / RESTful API 运维开发见 [[posts/openstack-python-ops/index.md]]。
1. 环境
| 项 | 值 |
|---|---|
| 操作系统 | CentOS Linux release 7.9.2009 (Core) |
| VMware 网卡类型 | VMnet8(NAT 模式) |
| 内存建议 | 8 GB 以上 |
| 磁盘建议 | 系统盘 30 GB + 数据盘 25 GB(用于 Cinder) |
注意:VMware 虚拟网卡需关闭 DHCP,避免和 OpenStack 内部网络冲突。
2. 网络配置
修改网卡配置文件,设置静态 IP 和 DNS:
$ vi /etc/sysconfig/network-scripts/ifcfg-ens32TYPE=EthernetBOOTPROTO=dhcpDEFROUTE=yesNAME=ens32DEVICE=ens32ONBOOT=yesIPADDR=192.168.10.100NETMASK=255.255.255.0GATEWAY=192.168.10.2DNS1=223.5.5.5配置文件里
BOOTPROTO应为static,源文档此处写的是dhcp,写成 dhcp 时下方的IPADDR等字段不会生效,请按需修改。
验证连通性:
$ ip a | grep ens$ ping -c 3 aliyun.com$ ping -c 3 223.5.5.53. 关闭安全策略
$ systemctl stop firewalld && systemctl disable firewalld$ setenforce 0$ sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config$ systemctl stop NetworkManager && systemctl disable NetworkManager
NetworkManager必须关闭——OpenStack Neutron 会自己接管网络,两者并存会冲突。
4. 配置 YUM 仓库
$ mv /etc/yum.repos.d/* /media/$ curl -o /etc/yum.repos.d/aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo$ yum clean all && yum makecache5. 修改主机名
主机名必须是 FQDN 格式,否则 Packstack 会报错:
$ hostnamectl set-hostname rocky.openstack.org6. 创建 Cinder 卷组
OpenStack 块存储服务 Cinder 默认使用名为 cinder-volumes 的 LVM 卷组:
$ lsblk # 确认数据盘 sdb 存在$ fdisk /dev/sdb # 创建一个主分区$ partprobe$ pvcreate /dev/sdb1$ vgcreate cinder-volumes /dev/sdb1$ vgs VG #PV #LV #SN Attr VSize VFree centos 1 1 0 wz--n- <29.00g 0 cinder-volumes 1 0 0 wz--n- <25.00g <25.00g卷组名
cinder-volumes是 Packstack 默认值,改名需要同步修改应答文件。
7. 配置 OpenStack Rocky 源
$ cat >> /etc/yum.repos.d/rocky.repo <<EOF[centotack-rocky]name=openstack-rockybaseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/enabled=1gpgcheck=0
[qemu-kvm]name=qemu-kvmbaseurl=https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/enabled=1gpgcheck=0EOF$ yum clean all && yum makecache8. 一键部署 OpenStack
$ yum install -y openstack-packstack$ packstack --allinone \ --provision-demo=n \ --os-neutron-ovs-bridge-mappings=extnet:br-ex \ --os-neutron-ovs-bridge-interfaces=br-ex:ens32 \ --os-neutron-ml2-type-drivers=vxlan,flat参数说明:
--allinone:所有组件部署到同一台机器--provision-demo=n:不创建示例资源(demo 项目、demo 用户等),保持干净--os-neutron-ovs-bridge-mappings=extnet:br-ex:把外部网络extnet桥接到 OVS 网桥br-ex--os-neutron-ovs-bridge-interfaces=br-ex:ens32:把br-ex绑定到物理网卡ens32--os-neutron-ml2-type-drivers=vxlan,flat:启用 VXLAN 与 Flat 两种二层驱动
这一步耗时较长(半小时到一小时),中途不要中断网络。
部署完成后查看管理员凭证:
$ cat keystonerc_adminunset OS_SERVICE_TOKEN export OS_USERNAME=admin export OS_PASSWORD='<部署生成的随机密码>' export OS_REGION_NAME=RegionOne export OS_AUTH_URL=http://192.168.10.128:5000/v3 export PS1='[\u@\h \W(keystone_admin)]\$ '
export OS_PROJECT_NAME=adminexport OS_USER_DOMAIN_NAME=Defaultexport OS_PROJECT_DOMAIN_NAME=Defaultexport OS_IDENTITY_API_VERSION=3加载凭证:
$ source keystonerc_admin9. 切换为 KVM 虚拟化
默认 Nova 用 qemu 跑虚拟机,性能差。如果宿主机 CPU 支持嵌套虚拟化,切到 KVM:
$ sed -i 's/virt_type=qemu/virt_type=kvm/' /etc/nova/nova.conf
# 验证$ grep "^virt_type=" /etc/nova/nova.confvirt_type=kvm修改硬件机型为 RHEL7 兼容型:
$ sed -i 's/#hw_machine_type=<None>/hw_machine_type=x86_64=pc-i440fx-rhel7.2.0/' \ /etc/nova/nova.conf$ grep hw_machine_type /etc/nova/nova.confhw_machine_type=x86_64=pc-i440fx-rhel7.2.0重启 Compute 服务生效:
$ systemctl restart openstack-nova-compute10. Dashboard 创建外部网络
浏览器访问 http://<节点IP>/dashboard,用 keystonerc_admin 中的账号登录后操作:
管理员 → 网络 → 网络 → 创建网络 · 名称:自拟,例如 ext-net · 项目:admin · 供应商网络类型:vxlan · 勾选 "共享的" 与 "外部网络" · 子网与子网详情:按实际网段填写创建完成后,普通项目即可创建虚拟机并通过该外部网络出网。
11. 常见问题
| 现象 | 排查点 |
|---|---|
packstack 报主机名解析错误 | 主机名必须 FQDN,并写入 /etc/hosts |
| 部署中途网络断 | 重新跑 packstack --answer-file=... 续传 |
| Dashboard 502 | systemctl status httpd、查 /var/log/httpd/error_log |
| 虚拟机创建失败找不到 vCPU | 宿主机 BIOS 未开 VT-x,或 VMware 未勾选嵌套虚拟化 |
vgs 看不到 cinder-volumes | 数据盘没分区或卷组名拼错 |
12. 小结
- Packstack 是 RDO 项目对 Puppet 的封装,是 CentOS 上跑 OpenStack 最快的方式
- 网络部分是单节点部署最容易踩坑的环节:网卡名、桥接接口、ml2 驱动三者要对齐
- 部署完成后优先做的事:切 KVM 虚拟化、源化
keystonerc_admin、建外部网络 - 单节点仅适合学习/测试,生产环境请走多节点架构(控制 / 计算 / 存储分离)