ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenStack私有云搭建实战:从裸机到可运行虚拟机的最小化部署指南

OpenStack私有云搭建实战:从裸机到可运行虚拟机的最小化部署指南 简介这份PDF面向云计算运维人员与OpenStack初学者系统讲解基于OpenStack搭建私有云的完整实践过程帮助读者理解从基础环境准备到核心组件部署的落地路径。资源包共1个PDF文件大小约1.64MB内容以图文步骤与配置说明为主便于按章节对照查阅。目录涵盖compute01节点的基础环境搭建、NTP时间同步、NOVA计算服务与NEUTRON网络服务的安装配置并延伸至PackStack快速安装、Cell创建、用户查看、页面登录与日志排查等环节同时涉及Cinder、Glance、Swift、Horizon等组件的集成思路以及安全监控、自动化部署与测试优化等运维要点。已有890人学习下载适合需要掌握私有云部署流程、组件协作关系与常见排错方法的读者参考可作为搭建实验环境与梳理知识体系的实践资料。1. 从一台裸机到能跑虚拟机的私有云OpenStack 搭建到底在搭什么很多团队第一次动私有云的念头往往不是因为预算多而是因为几台闲置的物理服务器实在浪费——每台机器各自跑着互不相干的服务CPU 常年 10% 以下内存却因为不敢超卖而空着一大半。这时候「基于 OpenStack 搭建私有云」就成了一个绕不开的选项。但真正动手前得先想清楚OpenStack 不是一个装完就能用的软件它是一套由十几个子项目拼起来的云操作系统搭建的本质是把计算Nova、镜像Glance、网络Neutron、存储Cinder、认证Keystone、面板Horizon这些组件按正确的顺序和依赖关系串起来让它们能协同工作。这篇笔记面向的是手上有 2 到 4 台物理机或虚拟机的运维和开发人员目标是把一套能创建实例、能挂载卷、能分配浮动 IP 的最小可用私有云跑通而不是追求生产级高可用。下面从选型、部署、验证到踩坑一步步拆开讲。2. 部署前必须定下来的三件事版本、拓扑与网络模型2.1 版本怎么选别追新追稳定和文档匹配OpenStack 每半年发一个版本命名按字母顺序走。截至近两年社区里讨论度较高、资料相对齐全的是 Yoga、Zed、Antelope 这几个版本。选版本的核心原则不是「越新越好」而是「你手上的操作系统和部署工具是否官方支持这个版本」。比如 Ubuntu 22.04 LTS 对 Yoga 和 Zed 的支持就比较完整CentOS Stream 9 则更适合较新的版本。如果你打算用 Packstack 这类快速部署工具它对版本和系统的组合有明确要求选错了会在依赖解析阶段就翻车。我一般的做法是先确定操作系统再去 OpenStack 官方文档的「Installation Guides」里找对应系统的推荐版本然后锁定这个组合不再改。版本一旦定下来后面所有组件的配置都以这个版本的官方文档为准不要混着看不同版本的教程这是新手最容易踩的坑之一。2.2 节点拓扑一体化还是分离部署最小规模的私有云有两种典型拓扑拓扑类型节点数适用场景资源要求一体化部署1 台学习验证、功能测试16 核 / 32GB / 200GB SSD控制计算分离2 台小团队内部使用控制节点 8 核/16GB计算节点 16 核/64GB控制计算存储分离3 台以上接近生产的小规模每类节点按角色配置一体化部署把所有服务塞在一台机器上好处是简单、排错方便坏处是资源争抢严重跑两三个实例就卡。分离部署更接近真实架构但网络配置复杂度会上升一个量级。如果你是第一次搭我建议先用一体化把流程跑通再拆成两节点。2.3 网络模型Provider 网络还是 Self-service 网络这是决定你后续能不能给实例分配浮动 IP 的关键选择。Provider 网络模式下实例直接桥接到物理网卡IP 由外部 DHCP 分配配置简单但灵活性差。Self-service 网络模式下实例先接入一个虚拟的私有网络再通过路由器做 NAT 转换出去这是更接近公有云体验的方式但需要额外配置 Neutron 的 ML2 插件和 OVS 或 Linux Bridge 代理。对于初次搭建如果只是想让实例能通外网、能 SSH 进去Provider 网络足够。如果想让不同租户的实例网络隔离就必须上 Self-service。选哪种取决于你的实际需求不要为了「完整」而强行上复杂方案。3. 用 Packstack 在单节点上跑通最小 OpenStack3.1 环境准备与依赖安装Packstack 是 Red Hat 系生态里最省事的 OpenStack 部署工具它把大量配置项封装成应答文件一条命令就能拉起整套服务。以下操作在 CentOS Stream 9 或 Rocky Linux 9 上验证可行其他系统请对照官方文档调整。# 关闭 SELinux 和防火墙避免部署过程中被拦截 setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config systemctl stop firewalld systemctl disable firewalld # 配置主机名和 hosts 解析OpenStack 对主机名很敏感 hostnamectl set-hostname openstack.local echo 192.168.1.100 openstack.local /etc/hosts # 安装 Packstack 仓库 dnf install -y centos-release-openstack-yoga dnf update -y dnf install -y openstack-packstack这几步里SELinux 和防火墙的关闭是必须的因为 OpenStack 组件之间通信端口非常多逐个放行不现实。主机名解析也必须配好Keystone 在签发令牌时会用主机名做校验解析不对会直接导致认证失败。Packstack 仓库的版本要和你的系统版本匹配centos-release-openstack-yoga这个包名里的yoga就是 OpenStack 版本代号。3.2 生成应答文件并修改关键参数Packstack 支持用--gen-answer-file生成一份默认配置然后按需修改。# 生成应答文件 packstack --gen-answer-fileanswer.txt # 查看需要修改的关键项 grep -E CONFIG_(NOVA|NEUTRON|GLANCE|CINDER|KEYSTONE|HORIZON) answer.txt | head -30生成后重点改这几项# 控制节点和计算节点都指向本机 CONFIG_CONTROLLER_HOST192.168.1.100 CONFIG_COMPUTE_HOSTS192.168.1.100 # 网络接口改成你实际的物理网卡名 CONFIG_NEUTRON_OVS_BRIDGE_IFACESeth0 # 关闭不需要的服务减少资源占用 CONFIG_PROVISION_DEMOn CONFIG_NAGIOS_INSTALLn # 设置管理员密码不设会随机生成 CONFIG_KEYSTONE_ADMIN_PWYourStrongPassword # 启用 Cinder 块存储 CONFIG_CINDER_INSTALLy CONFIG_CINDER_VOLUMES_CREATEy CONFIG_CINDER_VOLUMES_SIZE50GCONFIG_NEUTRON_OVS_BRIDGE_IFACES是最容易填错的一项它指定哪个物理网卡被桥接到 OVS 网桥上。填错会导致实例创建后拿不到 IP。CONFIG_CINDER_VOLUMES_SIZE是给 Cinder 划分的卷组大小按你实际磁盘空间来不要超过可用容量。3.3 执行部署与验证# 开始部署过程大约 20 到 40 分钟 packstack --answer-fileanswer.txt # 部署完成后加载管理员凭证 source /root/keystonerc_admin # 验证各服务状态 openstack service list openstack endpoint list openstack network agent listopenstack service list应该能看到 keystone、nova、neutron、glance、cinder 等条目状态都是 enabled。openstack network agent list里所有 agent 的 State 应该是 UPAlive 是 True。如果有 agent 显示 down先看对应服务的日志通常在/var/log/neutron/或/var/log/nova/下。部署完成后用 Horizon 面板登录http://192.168.1.100/dashboard用户名 admin密码就是你在应答文件里设的那个。能登录进去、能看到概览页说明核心组件已经串起来了。4. 创建第一个实例从镜像上传到 SSH 登录4.1 上传镜像并配置安全组# 下载一个精简的 CirrOS 镜像用于测试 curl -O http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img # 上传到 Glance openstack image create cirros \ --file cirros-0.6.2-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public # 确认镜像状态 openstack image list镜像上传后状态应该是 active。如果卡在 queued 或 saving通常是 Glance 后端存储配置有问题检查/etc/glance/glance-api.conf里的stores和default_store设置。# 创建安全组规则放行 SSH 和 ICMP openstack security group rule create --proto tcp --dst-port 22 default openstack security group rule create --proto icmp default安全组默认只放行出站入站全部拒绝。不放行 22 端口实例起来后你根本连不进去这是新手最常见的「实例跑起来了但 SSH 不通」的原因。4.2 创建网络、子网和路由# 创建外部网络Provider 网络 openstack network create --external --provider-physical-network physnet1 \ --provider-network-type flat public # 创建外部子网 openstack subnet create --network public \ --subnet-range 192.168.1.0/24 \ --gateway 192.168.1.1 \ --allocation-pool start192.168.1.200,end192.168.1.250 \ --no-dhcp public-subnet # 创建租户私有网络 openstack network create private openstack subnet create --network private \ --subnet-range 10.0.0.0/24 \ --gateway 10.0.0.1 \ --dns-nameserver 8.8.8.8 private-subnet # 创建路由器并连接两个网络 openstack router create router1 openstack router set router1 --external-gateway public openstack router add subnet router1 private-subnet--provider-physical-network physnet1这个名字要和 Neutron 配置文件里bridge_mappings定义的一致不一致会导致网络创建失败。--allocation-pool是浮动 IP 的地址池范围不要和物理网络里已有的设备冲突。4.3 启动实例并验证连通性# 生成密钥对 openstack keypair create mykey mykey.pem chmod 600 mykey.pem # 启动实例 openstack server create --flavor m1.tiny --image cirros \ --nic net-id$(openstack network show private -f value -c id) \ --security-group default --key-name mykey test-instance # 查看实例状态 openstack server list # 分配浮动 IP openstack floating ip create public openstack server add floating ip test-instance 浮动IP地址 # SSH 登录 ssh -i mykey.pem cirros浮动IP地址实例状态从 BUILD 变成 ACTIVE 通常需要几十秒。如果一直卡在 BUILD用openstack server show test-instance看 fault 字段里面会写明具体原因常见的是调度失败资源不足或网络分配失败。浮动 IP 分配后从外部网络能 ping 通、能 SSH 上去说明整套链路已经打通。5. 搭建过程中最容易翻车的五个地方5.1 实例创建成功但拿不到 IP现象openstack server list显示 ACTIVE但实例内部ip addr看不到网卡有地址或者只有 IPv6 链路本地地址。原因Neutron 的 DHCP agent 没有正常工作或者 OVS 网桥配置和物理网卡不匹配。常见于bridge_mappings里定义的物理网络名和创建网络时用的--provider-physical-network参数不一致。解决先openstack network agent list确认 DHCP agent 是 UP 状态。然后检查/etc/neutron/plugins/ml2/openvswitch_agent.ini里的bridge_mappings确保physnet1:br-ex这样的映射存在且br-ex上确实绑定了正确的物理网卡。改完配置后重启 neutron-openvswitch-agent 和 neutron-dhcp-agent。5.2 Horizon 面板登录报 500 错误现象打开 dashboard 能显示登录页输入账号密码后跳转报 Internal Server Error。原因Keystone 认证通过但 Horizon 无法获取服务目录通常是 endpoint 配置有问题或者 memcached 服务没起来。Horizon 依赖 memcached 缓存会话memcached 挂了就会 500。解决systemctl status memcached确认服务运行中。然后openstack endpoint list检查每个服务的 endpoint URL 是否可达特别是 public 类型的 endpoint 地址是否和实际访问地址一致。如果 endpoint 里写的是主机名但 DNS 解析不了也会出这个问题。5.3 Cinder 卷创建卡在 creating 状态现象openstack volume create后卷一直显示 creating最终变成 error。原因Cinder 的卷组没有正确创建或者cinder.conf里的volume_group名称和实际 LVM 卷组名不匹配。Packstack 部署时如果CONFIG_CINDER_VOLUMES_CREATEy但磁盘空间不足也会导致卷组创建失败。解决vgs查看是否存在 cinder-volumes 卷组。如果没有手动创建先用pvcreate初始化一块空分区再用vgcreate cinder-volumes /dev/sdX建卷组。然后确认/etc/cinder/cinder.conf里volume_group cinder-volumes。重启 cinder-volume 服务。5.4 删除实例后资源没有释放现象删除了实例但openstack server list里看不到了可配额里显示资源仍被占用新建实例时报配额不足。原因实例删除时 Neutron 端口没有同步清理或者 Nova 的数据库记录和实际状态不一致。这种情况在部署不稳定时偶发。解决openstack port list查看是否有孤立的端口手动openstack port delete删掉。然后openstack resource provider usage show检查资源提供者的使用量。如果确认是数据库不一致可以openstack server list --all-projects看是否有残留记录必要时用nova-manage db archive_deleted_rows清理。5.5 重启物理机后服务起不来现象物理机重启后OpenStack 各服务没有自动启动或者启动了但状态异常。原因部分服务没有设置开机自启或者启动顺序不对导致依赖失败。比如 Neutron 的 agent 依赖 OVS 服务先起来。解决systemctl enable所有相关服务httpd、memcached、openstack-keystone、openstack-nova-api、openstack-nova-conductor、openstack-nova-scheduler、openstack-glance-api、openstack-cinder-api、openstack-cinder-scheduler、openstack-cinder-volume、openstack-neutron-server、openstack-neutron-openvswitch-agent、openstack-neutron-dhcp-agent、openstack-neutron-l3-agent。如果 OVS 服务启动慢可以给 neutron agent 加Afteropenvswitch.service的依赖。6. 让私有云真正可用配额、监控与快照的三个进阶技巧搭建完成只是起点要让这套环境真正能承载团队日常使用还得在几个细节上做文章。配额管理默认配额对测试够用但多人使用时必须调整。openstack quota set --instances 20 --cores 40 --ram 81920 project可以按项目设置。我一般会给每个项目单独设配额而不是改默认值这样出问题容易定位是哪个项目超了。查看当前用量用openstack quota show project配合openstack limits show --absolute能看到实际消耗。监控接入OpenStack 自带 Ceilometer 做计量但如果你只是想知道实例的 CPU 和内存使用率直接在每个计算节点上部署 node_exporter 加 Prometheus 更轻量。关键指标看三个nova_compute_vms实例数、neutron_agent_stateagent 存活状态、cinder_volume_free_gb卷组剩余空间。这三个指标异常时基本能覆盖 80% 的常见故障。快照策略Cinder 支持卷快照但快照不是备份它依赖原卷存在。我习惯的做法是对关键实例的系统盘做定期快照同时用openstack image create把运行中的实例导出成镜像存到 Glance 后端。导出镜像的命令是openstack server image create --name 镜像名 实例名这个过程会短暂暂停实例建议在业务低峰期做。# 查看当前所有卷的快照 openstack volume snapshot list --all-projects # 批量清理超过 30 天的快照需要配合脚本 for snap in $(openstack volume snapshot list -f value -c ID -c CreatedAt | awk $2 $(date -d 30 days ago %Y-%m-%d) {print $1}); do openstack volume snapshot delete $snap done最后说一个我自己的习惯每次改完 OpenStack 配置先openstack service list和openstack network agent list各跑一遍确认所有服务状态正常再去做其他操作。这个动作花不到十秒但能避免很多「改了 A 结果 B 挂了」的玄学问题。私有云搭建这件事快就是慢慢就是快把每一步的验证做扎实后面省下的排错时间远超你的想象。希望帮到你。本文还有配套的精品资源点击获取
返回列表