news 2026/9/23 17:48:48

OpenStack私有云搭建实战:CentOS 7容器化部署与多节点扩展

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack私有云搭建实战:CentOS 7容器化部署与多节点扩展

简介:这份PDF面向云计算运维人员、OpenStack初学者及需要落地私有云的技术团队,系统梳理基于OpenStack搭建私有云的完整实践路径,帮助读者理解从基础环境准备到核心组件集成的关键环节。资源包共1个PDF文件,大小约1.64MB,内容以图文步骤与配置说明为主,便于按章节查阅与对照实践。文档围绕Rancher容器基础环境、NTP时间同步、NOVA计算服务、NEUTRON网络服务等核心模块展开,并延伸至Cinder、Glance、Swift、Horizon等组件的安装配置,同时覆盖安全监控、自动化部署与测试优化等运维要点。目录结构清晰,包含compute01节点操作、PackStack快速安装、Cell创建、用户查看、页面登录与日志排查等实操记录,适合作为私有云部署的参考手册与排错指南。目前已有890人学习下载,可供读者在搭建与验证OpenStack环境时借鉴具体配置思路。

1. 从一台 CentOS 7 容器说起:这份 OpenStack 私有云搭建笔记到底能跑通什么

如果你手上只有一两台物理机,却想搭一套能创建云主机、能绑浮动 IP、能 SSH 登录的私有云环境,这份《私有云实践-基于 OpenStack 的私有云搭建》大概率能帮你省掉大量翻官方文档的时间。它不讲 OpenStack 各组件的抽象概念,而是直接以 compute01 计算节点为主线,从 Rancher 生成容器、NTP 时间同步、NOVA 计算服务安装,一路写到 NEUTRON 网络服务、PackStack 快速安装、实例管理、计算节点扩展、镜像与数据管理、网络拓扑创建,最后落到聚合多物理节点创建云主机的完整流程。适合正在做 OpenStack 私有云搭建、需要一份可照抄的 CentOS 7 + Liberty 版本实操记录的运维和云计算从业者。下面按「资源是什么 → 怎么用 → 坑在哪」的顺序拆开讲。

2. 基础环境与 NOVA 计算服务:从容器生成到服务注册的完整链路

2.1 用 Rancher 或 Docker 生成 compute01 容器

这份笔记的第一步不是装系统,而是用 Rancher 生成容器作为基础环境。原文给了一条 Docker 直接创建的命令,我把它整理成可直接执行的版本:

# 创建 controller 容器,privileged=true 让容器内可以跑 systemd docker run -d --name controller --privileged=true \ docker.io/sf2gis/openstack:ntp /usr/sbin/init # 进入容器 docker exec -it controller /bin/bash

逻辑说明:--privileged=true是必须的,因为容器里要跑 libvirtd、nova-compute 这类需要访问内核模块和设备的服务,普通容器权限不够。/usr/sbin/init作为入口命令,是为了让容器内能用 systemctl 管理服务,否则 systemctl 会报 “Failed to get D-Bus connection”。

参数说明:容器名controller对应控制节点,计算节点在 Rancher 里要单独设置 IP10.42.0.11和主机名compute01。进入容器后第一件事是写/etc/hosts

# 在 compute01 容器内执行 cat >> /etc/hosts <<EOF 10.42.0.10 controller 10.42.0.11 compute01 EOF

这一步不做,后面 nova-compute 连 controller 的 RabbitMQ 会直接失败,而且报错信息往往只显示连接超时,排查起来很费时间。

2.2 NTP 时间同步:分布式系统的隐形地基

OpenStack 各节点之间靠消息队列通信,时间不同步会导致 token 校验失败、日志时间错乱、服务注册异常。笔记里明确要求 compute01 同步 controller 的时间。常见做法是在 compute01 上装 chrony 或 ntpdate,指向 controller:

# 安装 chrony yum install chrony -y # 编辑 /etc/chrony.conf,把 server 指向 controller sed -i 's/^server.*/server controller iburst/' /etc/chrony.conf # 启动并设置开机自启 systemctl enable chronyd.service systemctl start chronyd.service # 验证同步状态 chronyc sources -v

逻辑说明:iburst参数让 chrony 在启动时快速发送一组包,缩短首次同步时间。验证时看chronyc sources输出里 controller 前面有没有^*,有就说明同步成功。如果显示^?,说明 controller 的 NTP 服务没起来或者防火墙挡了 UDP 123。

2.3 修改 YUM 源并安装 NOVA 计算服务

原文花了大量篇幅在 YUM 源修改上,这不是啰嗦,而是因为 CentOS 7 默认源里没有 OpenStack Liberty 的包。笔记里备份源、改 Base 源、加 OpenStack Liberty 源、改 rdo-release.repo 和 rdo-testing.repo,步骤很细。我把它压缩成可执行的核心操作:

# 备份原有源 mkdir -p /etc/yum.repos.d/bak_tmp cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak_tmp/ # 安装 OpenStack Liberty 源 yum install centos-release-openstack-liberty -y # 安装 nova-compute yum install openstack-nova-compute -y

逻辑说明:centos-release-openstack-liberty这个包会自动写入正确的 repo 文件,比手动改五六个 repo 文件更稳。原文手动改源的方式适合源包不可用或需要指定 buildlogs 地址的场景。装完 nova-compute 后,先确认 CPU 是否支持硬件加速:

egrep -c '(vmx|svm)' /proc/cpuinfo

返回 1 或更大值,说明支持 KVM 加速,不用额外配置。返回 0,就必须在/etc/nova/nova.conf[libvirt]段里加virt_type = qemu,否则实例创建会卡在 spawn 阶段。

2.4 配置 nova.conf 并启动服务

原文的 nova.conf 配置是整份笔记里最值得抄的部分。它先备份、再用egrep -v "^#|^$"去掉注释和空行,得到一个干净配置,然后逐段写入。核心段落如下:

[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:abc123@controller auth_strategy = keystone my_ip = 10.42.0.11 use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = nova [vnc] enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html [glance] api_servers = http://controller:9292 [oslo_concurrency] lock_path = /var/lib/nova/tmp

参数说明:my_ip必须写计算节点自己的管理 IP,写错会导致 VNC 代理地址不对。firewall_driver设为 NoopFirewallDriver 是因为 Neutron 已经接管了网络和防火墙,Nova 再管会冲突。transport_url里的abc123是 RabbitMQ 密码,要和 controller 上保持一致。lock_path目录必须存在且 nova 用户可写,否则并发操作会报锁文件错误。

启动服务:

systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service

原文特别提醒:polkit 服务可能启动失败,重装后重启可以解决;重启后要检查/etc/hosts保证 controller 可解析。这两条都是实际踩过的坑。

2.5 在 controller 端验证计算节点注册

计算节点服务起来后,必须到 controller 上验证:

# 加载 admin 凭证 source admin-openrc # 列出计算服务 openstack compute service list # 列出 nova 服务组件 nova service-list # 查看认证服务端点 nova endpoints

逻辑说明:openstack compute service list应该显示四个服务组件在控制节点上启用,一个在计算节点上启用。如果 compute01 没出现,先看 compute01 上systemctl status openstack-nova-compute的状态,再看/var/log/nova/nova-compute.log里有没有连 RabbitMQ 或 Keystone 失败的记录。常见原因是/etc/hosts没写对,或者 RabbitMQ 密码不匹配。

3. NEUTRON 网络服务与 PackStack:两条部署路线的取舍

3.1 安装 neutron-linuxbridge 并配置通用组件

NOVA 管计算,NEUTRON 管网络。原文在 compute01 上装的是openstack-neutron-linuxbridge,这是 Linux 桥接代理,适合没有硬件 SDN 设备的场景。

yum install openstack-neutron-linuxbridge ebtables ipset -y

装完后配置/etc/neutron/neutron.conf,同样先备份、去注释、再写核心段:

[DEFAULT] transport_url = rabbit://openstack:abc123@controller auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = neutron password = neutron

参数说明:transport_url和 nova 用的是同一个 RabbitMQ,但用户名密码是 neutron 的。auth_strategy = keystone表示认证走 Keystone。如果这里密码写错,neutron-linuxbridge-agent 会反复重启,日志里报AMQP server on controller:5672 is unreachable

3.2 配置 Linux 桥接代理并重启服务

Linux 桥接代理的配置文件在/etc/neutron/plugins/ml2/linuxbridge_agent.ini,核心是物理网卡映射和 VXLAN 开关:

[linux_bridge] physical_interface_mappings = provider:eth0 [vxlan] enable_vxlan = True local_ip = 10.42.0.11 l2_population = True [securitygroup] enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

参数说明:physical_interface_mappings里的provider:eth0表示把宿主机的 eth0 映射为 provider 网络,eth0 要换成实际网卡名。local_ip写计算节点管理 IP。l2_population = True开启 VXLAN 的 L2 填充,减少广播。改完后重启服务:

systemctl restart neutron-linuxbridge-agent.service systemctl enable neutron-linuxbridge-agent.service

验证还是在 controller 上执行openstack network agent list,看 compute01 上的 Linux bridge agent 是否 Alive 且 State 为 UP。

3.3 PackStack 快速安装:适合验证,不适合生产

原文第 2 章给了 PackStack 快速安装路线。PackStack 是 RDO 提供的自动化部署工具,一条命令能拉起全部核心组件,适合快速验证和实验环境。核心步骤:

# 安装 PackStack yum install openstack-packstack -y # 生成应答文件 packstack --gen-answer-file=answer.txt # 编辑 answer.txt,至少改这几项 # CONFIG_DEFAULT_PASSWORD=xxx # CONFIG_NOVA_COMPUTE_HOSTS=10.42.0.11 # CONFIG_NEUTRON_L2_AGENT=linuxbridge # 执行安装 packstack --answer-file=answer.txt

逻辑说明:--gen-answer-file生成模板,改完再执行,比交互式安装可控。安装完成后原文提到要创建 Cell、查看用户、页面登录、查看日志。Cell 是 Nova 的单元概念,Liberty 版本里默认只有一个 cell,创建 cell 是为了后续扩展。页面登录走 Horizon,默认地址是http://controller/dashboard,账号 admin,密码在 answer.txt 里。

PackStack 的边界:它把配置都写死了,后期改一个参数可能牵动多个服务,生产环境更推荐手动分组件部署或者用 Kolla。这份笔记把 PackStack 作为快速验证路线,定位是准确的。

3.4 实例管理:从创建到 VNC 和 SSH

原文第 3 章讲 OpenStack 管理,实例管理是核心。创建实例前要准备镜像、网络、安全组、密钥对。创建完成后,两种管理方式:

VNC:在 Horizon 里点击实例名称,进控制台或 VNC,能直接看到系统界面。适合调试启动阶段的问题,比如实例卡在 grub 或网络没配好。

SSH:先绑定浮动 IP,再用 SSH 远程管理。浮动 IP 从外部网络分配,绑到实例的端口上。绑定后如果 SSH 不通,先检查安全组有没有放行 22 端口,再检查实例内部防火墙,最后看路由器有没有正确连接内外网。

实例控制操作包括启动、停止、删除、编辑。删除实例时要注意,如果实例有挂载的卷,先卸载再删,否则卷会残留。

3.5 计算节点扩展:加节点比装第一个节点更容易翻车

原文 3.4 节讲计算节点扩展,步骤和装第一个计算节点类似,但有几个额外注意点:

配置 hostname 时改/etc/hosts,把新节点和 controller 都写进去。配置 nova 时,参数参考 controller 上的配置,但my_ip要改成新节点的 IP。启动服务后,到 controller 上验证openstack compute service list,看新节点是否注册。

常见翻车点:新节点的 YUM 源没配好,装出来的 nova 版本和 controller 不一致;新节点的 NTP 没同步,导致 token 校验失败;新节点的/etc/hosts里 controller 解析不对,连不上 RabbitMQ。这三个问题占扩展失败原因的八成以上。

4. 网络拓扑与存储管理:外部网络、内部网络、路由器怎么串

4.1 创建外部网络和内部网络

原文 3.7 节把网络管理讲得很清楚。外部网络在管理员视角创建,模拟物理网卡,是物理网卡的代理。创建时要指定 provider 网络的 VLAN 或 flat 类型,以及物理网卡映射。

内部网络在项目视角创建,模拟内部局域网。创建时指定子网和 CIDR,比如192.168.1.0/24。内部网络的实例默认不能访问外网,需要路由器做 NAT。

创建外部网络的命令示例:

# 加载 admin 凭证 source admin-openrc # 创建外部网络 openstack network create --share --external \ --provider-physical-network provider \ --provider-network-type flat public # 创建外部子网 openstack subnet create --network public \ --allocation-pool start=10.42.0.100,end=10.42.0.200 \ --dns-nameserver 114.114.114.114 \ --gateway 10.42.0.1 \ --subnet-range 10.42.0.0/24 public-subnet

参数说明:--external标记为外部网络,--share让所有项目可见。--provider-physical-network provider对应 linuxbridge_agent.ini 里的映射名。--allocation-pool是浮动 IP 池,范围要在物理网络里可用且没被占用。

4.2 创建路由器并连接内外网

路由器是外部网络和内部网络的连接器。创建路由器时指定外部网络,然后添加内部子网接口:

# 创建路由器 openstack router create router1 # 设置路由器外部网关 openstack router set router1 --external-gateway public # 把内部子网加到路由器 openstack router add subnet router1 private-subnet

逻辑说明:--external-gateway public让路由器能走外部网络出去。add subnet把内部子网挂到路由器上,路由器自动做 NAT,内网实例就能访问外网。如果内网实例 ping 不通外网,先检查路由器的外部网关设了没,再检查外部网络的子网网关是否可达。

4.3 外网访问内网:绑定浮动 IP

内网访问外网靠路由器 NAT,外网访问内网靠浮动 IP。浮动 IP 从外部网络的 allocation pool 里分配,绑到实例的端口上:

# 创建浮动 IP openstack floating ip create public # 绑定到实例 openstack server add floating ip my-instance 10.42.0.101

绑定后,从外部网络里的机器就能 SSH 到10.42.0.101。如果 SSH 不通,按顺序查:安全组有没有放行 22、实例内部 sshd 有没有起来、路由器有没有正确连接内外网、浮动 IP 有没有真的绑到实例端口上。

4.4 Swift 与 Cinder:对象存储和块存储的分工

原文 3.6 节区分了 Swift 和 Cinder。Swift 是对象存储,类似 Web 服务的网盘,适合存镜像、备份、静态文件。Cinder 是块存储,提供硬盘及网络存储,挂到实例上当数据盘用。

选型理由:需要共享、可扩展、通过 HTTP 访问的,用 Swift;需要挂到单台实例上、像本地硬盘一样读写、支持快照的,用 Cinder。两者不是替代关系,是互补关系。私有云里如果只是跑几台云主机,Cinder 更常用;如果要存大量非结构化数据,Swift 更合适。

5. 避坑与排查:这份笔记里没写全但一定会遇到的五个问题

5.1 现象:nova-compute 启动后反复重启,日志报 AMQP 连接失败

原因:compute01 的/etc/hosts里没有 controller 的解析记录,或者 RabbitMQ 密码和 controller 不一致。

解决:先ping controller确认解析,再cat /etc/nova/nova.conf | grep transport_url对比 controller 上的密码。改完重启openstack-nova-compute

5.2 现象:实例创建卡在 spawn 阶段,长时间不变成 ACTIVE

原因:CPU 不支持硬件加速,但 nova.conf 里没配virt_type = qemu,libvirt 尝试用 KVM 启动失败。

解决:egrep -c '(vmx|svm)' /proc/cpuinfo确认返回值,如果是 0,在/etc/nova/nova.conf[libvirt]段加virt_type = qemu,重启 nova-compute 和 libvirtd。

5.3 现象:实例绑了浮动 IP,但 SSH 不通

原因:安全组没放行 22 端口,或者路由器没连内外网,或者浮动 IP 没绑到正确端口。

解决:openstack security group rule list看有没有 22 规则;openstack router show router1看外部网关和接口;openstack server show my-instance看浮动 IP 有没有在 addresses 里。

5.4 现象:PackStack 安装到一半报错退出,重跑也失败

原因:之前安装残留了配置或数据库,PackStack 不是幂等的。

解决:清理/etc/nova/etc/neutron/etc/keystone等目录下的配置,删掉 MariaDB 里的相关库,再重跑。更稳的做法是重装系统或回滚快照。

5.5 现象:计算节点扩展后,新节点上的实例 VNC 打不开

原因:新节点的vncserver_proxyclient_address写的是旧 IP,或者 controller 上的 novncproxy 连不到新节点的 VNC 端口。

解决:检查新节点 nova.conf 里的my_ipvncserver_proxyclient_address,确保是当前节点 IP。在 controller 上curl新节点的 6080 端口,确认网络可达。

6. 聚合多物理节点创建云主机:从规划到 SSH 登录的完整验证

原文第 4 章是整份笔记的收口,把前面所有组件串成一条完整链路。整体规划阶段要确定控制节点、计算节点、网络节点的角色分配,以及管理网络、业务网络、存储网络的网段划分。添加计算节点时,按 3.4 节的步骤扩展,每加一个节点就在 controller 上验证一次服务注册。

安装操作系统镜像时,常见做法是用openstack image create上传 qcow2 镜像,指定--disk-format qcow2 --container-format bare。创建安全组时,至少放行 22 和 ICMP,否则 SSH 和 ping 都不通。创建密钥对时,公钥存在 OpenStack 里,私钥下载到本地,SSH 时用-i指定私钥。

创建网络拓扑时,按 4.1 到 4.3 的顺序:先外部网络,再内部网络,再路由器,最后浮动 IP。创建实例时分配资源、系统、网络,启动后进控制台看启动日志,确认 cloud-init 正常执行。绑定浮动 IP 后,用 SSH 远程管理,验证整条链路。

整体概况验证清单:

验证项命令预期结果
计算服务openstack compute service list控制节点 4 个,计算节点 1 个
网络代理openstack network agent listLinux bridge agent Alive
实例状态openstack server list实例 ACTIVE
浮动 IPopenstack floating ip list已绑定到实例端口
SSH 连通ssh -i private.key user@floating-ip登录成功

我自己的习惯是,每加一个计算节点、每改一次网络配置,都强制走一遍这张表。有一次扩展节点后忘了验证网络代理,结果新节点上的实例死活拿不到 IP,查了两个小时才发现是 linuxbridge agent 没起来。从那以后我每次扩展节点都先跑openstack network agent list,确认新节点的 agent 是 Alive 再继续。希望帮到你。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 17:47:36

新手GEO软件有用吗?单纯依靠软件能做好AI获客吗?

很多刚接触 GEO 的朋友都会问&#xff1a;GEO 软件到底值不值得入手&#xff1f;能不能开个软件&#xff0c;点几下&#xff0c;客户就自动找上门&#xff1f;今天就用大白话跟大家聊清楚&#xff0c;参考抓词 GEO 官网的思路来讲。先说结论&#xff1a;GEO 软件对新手是有用的…

作者头像 李华
网站建设 2026/9/23 17:42:24

MATLAB空间导航强化学习实战:MBRL环境建模与奖励塑形

简介&#xff1a;本资源是一套面向计算机、电子信息工程及数学等专业本科生的强化学习实践代码包&#xff0c;聚焦空间导航这一典型AI应用场景&#xff0c;提供基于模型的强化学习&#xff08;MBRL&#xff09;Matlab实现方案&#xff0c;适用于课程设计、期末大作业与毕业设计…

作者头像 李华
网站建设 2026/9/23 17:42:10

Qt植物大战僵尸课设实战:从架构设计到编译发布全解析

简介&#xff1a;这是一份基于Qt Graphics View框架开发的植物大战僵尸游戏完整课程设计源码包&#xff0c;面向C程序设计课程的期末项目&#xff0c;适合需要完成同类游戏开发或学习Qt图形编程的高校学生。项目采用面向对象设计&#xff0c;通过封装、继承与多态实现植物、僵尸…

作者头像 李华
网站建设 2026/9/23 17:41:20

树增强型朴素贝叶斯(TAN)Java实战:从原理到可部署模型

简介&#xff1a;本资源是一份面向Java开发者与数据挖掘初学者的树型朴素贝叶斯&#xff08;TAN&#xff09;算法实战源码包&#xff0c;聚焦于多类别分类任务建模与实现&#xff0c;解决传统朴素贝叶斯在特征依赖场景下精度受限的问题。压缩包共5个文件&#xff0c;含4个核心J…

作者头像 李华
网站建设 2026/9/23 17:36:21

SECS/GEM协议源码解析:secs4j-master消息编码与GEM状态机实现

简介&#xff1a;secs4j-master 是一套面向半导体设备自动化领域的 Java 版 SECS/GEM 协议实现库&#xff0c;适合从事设备通信、工厂自动化系统开发的工程师与学习者使用。它把 SECS-I、SECS-II 的物理层与应用层协议&#xff0c;以及 GEM 规范中的设备初始化、状态报告、命令…

作者头像 李华