ARTICLE DETAIL

资讯详情

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

OpenStack私有云搭建实战:从计算节点到多节点聚合的避坑指南

OpenStack私有云搭建实战:从计算节点到多节点聚合的避坑指南 简介这份PDF面向云计算运维人员、OpenStack初学者及需要落地私有云的技术团队系统梳理基于OpenStack搭建私有云的完整实践路径帮助读者理解各核心组件的作用与配置方法。资源包共1个PDF文件大小约1.64MB内容以图文步骤形式呈现便于按章节对照学习。目录涵盖基础环境准备、NTP时间同步、NOVA计算服务与NEUTRON网络服务的安装配置以及PackStack快速安装、Cell创建、用户查看、页面登录与日志排查等模块并延伸至Cinder、Glance、Swift、Horizon等组件的集成思路同时涉及安全监控、自动化部署与测试优化。已有890人学习下载适合希望从零掌握私有云部署流程、积累组件集成与排错经验的读者参考。1. 从一台 compute01 说起这份 OpenStack 私有云搭建笔记到底能帮你省掉多少试错如果你手上只有两三台物理机却要交付一套能跑虚拟机、能划内外网、能挂块存储的私有云环境大概率绕不开 OpenStack。但真正动手时你会发现官方文档是按组件拆开的装完 Keystone 装 Glance装完 Nova 又回头补 Neutron中间任何一步认证或消息队列对不上后面全是连锁报错。这份《私有云实践-基于 OpenStack 的私有云搭建》走的是另一条路它以一个名为 compute01 的计算节点为主线把 Rancher 生成容器、NTP 时间同步、Nova 计算服务、Neutron 网络服务、PackStack 快速安装、实例与网络管理、多物理节点聚合这一整条链路串了起来。它适合两类人一是第一次搭 OpenStack、需要一份能照着敲的落地清单的运维新手二是已经装过但卡在网络或计算节点注册环节、想找一份带验证命令的参考手册的熟手。下面我按自己拆包复现的顺序把这份资料里真正能用的部分讲透。2. 基础环境与 Nova 计算节点容器、NTP、YUM 源三件事的顺序不能乱2.1 用 Rancher 或 Docker 起一个干净的 compute01资料里基础环境给了两条路Rancher 生成容器或者直接用 docker run。核心是拿到一个带 systemd、能跑 systemctl 的容器所以必须加--privilegedtrue入口指向/usr/sbin/init。我一般会先用 Docker 命令把容器拉起来验证再决定要不要上 Rancher 做编排。# 创建容器privileged 让容器内能用 systemd入口用 init docker run -d --name controller --privilegedtrue docker.io/sf2gis/openstack:ntp /usr/sbin/init # 进入容器 docker exec -it controller /bin/bash逻辑说明-d后台运行--privilegedtrue是让容器内 systemd 能正常接管服务的关键少了它systemctl start会直接报权限或 D-Bus 错误。/usr/sbin/init作为入口保证容器起来后 PID 1 是 init 而不是 bash。参数上镜像名docker.io/sf2gis/openstack:ntp是资料里给的已经预置了 NTP 相关包省掉后面单独装 chrony 的步骤。用 Rancher 时资料强调要在网络里固定 IP10.42.0.11和主机名compute01安全里选全部权限。这一步的坑在于主机名和 IP 必须和后面/etc/hosts里写的一致否则 Nova 注册到 controller 时用的就是错的名字。# 进入容器后设置 hostscontroller 和 compute01 必须能互相解析 cat /etc/hosts EOF 10.42.0.10 controller 10.42.0.11 compute01 EOF逻辑说明OpenStack 各组件之间靠主机名通信RabbitMQ、Keystone、Glance 的地址在配置文件里写的都是controller这种名字。如果/etc/hosts里没有对应记录服务启动时会卡在域名解析日志里表现为连接超时而不是明确的“找不到主机”。参数上10.42.0.10 是控制节点10.42.0.11 是本计算节点这两个地址要和后续 nova.conf 里的my_ip保持一致。2.2 NTP 时间同步分布式系统的隐形地基资料把 NTP 单独列了一节配置为同步 controller 时间。很多人会跳过这步觉得差几秒无所谓但 OpenStack 的 token 有有效期节点间时间偏差过大会直接导致认证失败报错信息还特别含糊属于典型的玄学问题。# 在 compute01 上把时间源指向 controller ntpdate controller # 或者写入 chrony/ntpd 配置长期同步逻辑说明ntpdate是一次性同步适合搭建阶段快速对齐生产环境应该写进 NTP 配置文件做持续同步。参数上时间源填 controller 的主机名或 IP 都行前提是 controller 自己已经同步了可靠时间源。这一步做完可以用date对比两台机器差在 1 秒以内再往下走。2.3 改 YUM 源装 NovaLiberty 源的启用状态是重点资料里装 Nova 之前先改 YUM 源备份原有 repo然后改 Base、CentOS-OpenStack-liberty、rdo-release、rdo-testing 四个文件。这里最容易翻车的是 enabled 字段centos-openstack-liberty默认enabled0而centos-openstack-liberty-test是enabled1如果你不改装出来的可能是测试版包。# 备份原有源 cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak_tmp/ # 安装 nova 计算服务 yum install openstack-nova-compute -y逻辑说明备份是为了改坏了能回滚这是血泪经验别省。openstack-nova-compute是计算节点包控制节点装的是openstack-nova-api那一套别装混。参数上Base 源换成阿里云镜像https://mirrors.aliyun.com/centos/7/os/$basearch/是为了国内下载速度gpgcheck 保持 1 保证包完整性。装之前资料给了一条关键检查命令# 检查 CPU 是否支持硬件虚拟化返回 1 或更大说明支持 egrep -c (vmx|svm) /proc/cpuinfo逻辑说明返回 0 说明不支持硬件加速必须把/etc/nova/nova.conf里[libvirt]段的virt_type改成qemu否则实例起不来。这是物理机或嵌套虚拟化环境里最常见的坑很多人装完发现虚拟机卡在 spawning 状态就是这里没改。2.4 nova.conf 配置认证、消息队列、VNC 三块要对齐资料用egrep -v ^#|^$把备份文件里的注释和空行过滤掉生成新配置这个做法能让配置文件干净很多。核心配置分几块[DEFAULT] enabled_apis osapi_compute,metadata transport_url rabbit://openstack:abc123controller 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逻辑说明transport_url里的openstack:abc123是 RabbitMQ 的用户名密码必须和 controller 上创建的一致否则计算节点连不上消息队列服务起不来。my_ip填本机管理网 IPVNC 的vncserver_proxyclient_address引用它。firewall_driver用 Noop 是因为网络和防火墙交给 Neutron 管Nova 自己别再插一脚。[glance]的api_servers指向控制节点的镜像服务实例创建时要从这里拉镜像。配置完启动服务systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service逻辑说明enable是设置开机自启start是立即启动两条都要。资料特别提醒 polkit 服务可能启动失败重装后重启能解决另外重启后要确认/etc/hosts里 controller 还能解析因为 compute 服务要连 controller 的 MQ。2.5 控制端验证四条命令确认计算节点注册成功装完不是看服务 active 就完事要到 controller 上验证# 在控制节点执行 source admin-openrc openstack compute service list nova service-list nova endpoints逻辑说明admin-openrc是管理员凭证不 source 的话命令会报权限不足。openstack compute service list和nova service-list是两代命令都能列出注册的服务组件。资料说输出应该显示控制节点上四个服务组件、计算节点上一个如果计算节点的 nova-compute 没出现说明注册失败回去查 nova.conf 的认证和 MQ 配置。nova endpoints验证 Keystone 里的 API 端点是否齐全。3. Neutron 网络服务Linux 桥接代理和通用组件怎么配3.1 装包与 neutron.conf 通用组件Neutron 在计算节点上装的是openstack-neutron-linuxbridge、ebtables、ipset三个包。Linuxbridge 是网络代理ebtables 和 ipset 是它依赖的包过滤工具。yum install openstack-neutron-linuxbridge ebtables ipset -y逻辑说明openstack-neutron-linuxbridge提供 Linux 桥接的 agent负责把虚拟机的网卡桥接到物理网络。ebtables 处理二层过滤ipset 管理 IP 集合安全组规则依赖它们。参数上没得选这三个是配套的。配置通用组件时资料同样用egrep -v ^$|^#清理备份文件[DEFAULT] transport_url rabbit://openstack:abc123controller 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。auth_strategy keystone表示认证走 Keystone。[keystone_authtoken]里的用户名密码是 neutron 服务账号必须和 controller 上创建的一致。这里如果密码写错agent 启动后会反复重连日志里刷认证失败。3.2 Linux 桥接代理配置与重启验证Linux 桥接代理的配置文件是/etc/neutron/plugins/ml2/linuxbridge_agent.ini核心是物理网卡映射和 VXLAN 配置。资料里这部分标题重复了两次1.4.3 和 1.4.4 都叫“配置 Linux 桥接代理”实际内容应该是一段配置加一段验证。[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 要换成你机器上实际承载外部网络的网卡名写错会导致外部网络不通。local_ip填本机管理网 IPVXLAN 隧道用这个地址。l2_population开启后能减少广播提升网络效率。firewall_driver用 iptables 实现安全组。配置完重启服务systemctl restart neutron-linuxbridge-agent.service systemctl enable neutron-linuxbridge-agent.service逻辑说明restart让配置生效enable设置开机自启。重启后到 controller 上验证# 控制节点执行 openstack network agent list逻辑说明这条命令列出所有网络 agent计算节点的 Linux bridge agent 应该显示为 up 状态。如果显示 down 或根本没出现检查 neutron.conf 的认证配置和 linuxbridge_agent.ini 的 local_ip。4. PackStack 快速安装与实例管理从一键部署到能登录的虚拟机4.1 PackStack 环境准备与安装资料第 2 章给了 PackStack 快速安装路径适合想先跑通再深入的人。环境准备包括关闭防火墙、SELinux设置主机名和 hosts然后装 PackStack 包。# 关闭防火墙和 SELinux搭建阶段 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config # 安装 PackStack yum install -y openstack-packstack packstack --allinone逻辑说明--allinone是单节点全组件部署适合验证和测试。生产环境应该用 answer file 定制。参数上--allinone会自动生成 answer file 并执行安装过程比较长网络不稳容易断建议在 tmux 里跑。装完会输出 dashboard 地址和 admin 密码记下来。4.2 创建 Cell、查看用户与页面登录PackStack 装完后资料提到创建 Cell、查看用户、页面登录、日志查看。Cell 是 Nova 的扩展单元单节点环境一般用默认 cell 就行多节点才需要显式创建。# 查看 Keystone 用户列表 openstack user list # 查看服务目录 openstack service list逻辑说明openstack user list确认 admin、nova、neutron、glance 等服务账号都在。openstack service list确认各服务的 endpoint 注册完整。页面登录用http://controller/dashboard账号 admin密码在 PackStack 输出的 answer file 里通常是/root/keystonerc_admin。日志查看主要在/var/log/下按组件分目录nova、neutron、keystone、glance 各有自己的日志文件排错时先看对应组件的日志。4.3 实例管理创建、VNC、SSH 三步走资料第 3 章讲实例管理流程是环境准备、创建实例、VNC 控制台、绑定浮动 IP 后 SSH。创建实例前要确保有镜像、有网络、有安全组。# 创建实例命令行方式 openstack server create --flavor m1.small --image cirros --nic net-id内网ID --security-group default --key-name mykey test-vm逻辑说明--flavor是资源规格--image是镜像名--nic net-id指定接入的内网--security-group是安全组--key-name是密钥对。参数里内网 ID 用openstack network list查。创建后状态从 build 变 active 才算成功。VNC 是在页面上点实例名称进控制台适合看启动过程和排查网络不通。SSH 需要先绑定浮动 IP# 绑定浮动 IP openstack server add floating ip test-vm 浮动IP逻辑说明浮动 IP 从外部网络分配绑定后实例才能从外部访问。绑完用ssh -i mykey.pem cirros浮动IP登录。如果连不上先检查安全组是否放行 22 端口再检查路由器是否把内外网连通。4.4 计算节点扩展加节点就是复制配置改 IP资料 3.4 节讲计算节点扩展步骤是环境准备、装计算节点、改 hostname、配 nova、启动服务、控制端验证。核心思路是把 compute01 的配置复制到新节点改my_ip和主机名。# 新节点上改 hostname hostnamectl set-hostname compute02 # 改 /etc/hosts 加入新节点记录逻辑说明新节点的my_ip要改成自己的管理网 IP/etc/hosts里要加上 controller 和所有计算节点的记录。配完启动服务到 controller 上openstack compute service list应该能看到新的 nova-compute。5. 网络与存储管理外部网络、内部网络、路由器、浮动 IP 的创建顺序5.1 创建外部网络与内部网络资料 3.7 节把网络管理讲得比较细。外部网络在管理员视角创建模拟物理网卡内部网络在项目视角创建模拟局域网。# 管理员创建外部网络 openstack network create --external --provider-physical-network provider --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逻辑说明--external标记为外部网络--provider-physical-network provider对应 linuxbridge_agent.ini 里的映射名--provider-network-type flat表示不封装。子网用--no-dhcp因为外部网络的 IP 由物理网络分配。# 项目视角创建内部网络 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逻辑说明内部网络用 vxlan 或 vlan 隔离子网开 DHCP 给虚拟机自动分配 IP。--dns-nameserver让虚拟机内能解析域名。5.2 创建路由器打通内外网路由器是外部网络和内部网络的连接器创建后要设置网关和添加接口。# 创建路由器 openstack router create router1 # 设置外部网关 openstack router set --external-gateway public router1 # 添加内部子网接口 openstack router add subnet router1 private-subnet逻辑说明--external-gateway public让路由器能访问外部网络add subnet把内部子网挂到路由器上。这样内网虚拟机就能通过路由器访问外网SNAT。外网访问内网需要绑定浮动 IPDNAT。5.3 浮动 IP 与安全组浮动 IP 从外部网络分配绑定到实例后实现外网访问。# 创建浮动 IP openstack floating ip create public # 绑定到实例 openstack server add floating ip test-vm 浮动IP逻辑说明浮动 IP 是 NAT 映射绑定后外部流量转到实例的内网 IP。安全组控制哪些端口能进# 放行 SSH openstack security group rule create --protocol tcp --dst-port 22 default逻辑说明默认安全组通常只放行 ICMP 和少量端口SSH 要手动加。--dst-port 22指定端口--protocol tcp指定协议。6. 避坑与排查五条血泪经验6.1 计算节点注册不上openstack compute service list里没有 nova-compute现象服务 active但控制端看不到计算节点。原因nova.conf 里transport_url的 RabbitMQ 密码错或者/etc/hosts里 controller 解析不到。解决先ping controller确认解析再rabbitmqctl list_users确认账号密码最后看/var/log/nova/nova-compute.log里的具体报错。6.2 实例卡在 spawning 或 error现象创建实例后一直 spawning最后 error。原因CPU 不支持硬件虚拟化但virt_type没改成 qemu或者 Glance 镜像服务连不上。解决egrep -c (vmx|svm) /proc/cpuinfo检查返回 0 就改[libvirt] virt_type qemu再确认[glance] api_servers地址能 curl 通。6.3 虚拟机有内网 IP 但访问不了外网现象实例能 ping 通同网段但 ping 不通外网。原因路由器没设外部网关或者外部网络的provider-physical-network映射和 linuxbridge_agent.ini 不一致。解决openstack router show router1看external_gateway_info是否为空空的话openstack router set --external-gateway public router1再核对映射名。6.4 浮动 IP 绑了但 SSH 连不上现象浮动 IP 绑定成功但 SSH 超时。原因安全组没放行 22 端口或者实例内防火墙没关。解决openstack security group rule list default看有没有 22 端口规则没有就加实例内systemctl stop firewalld临时关闭验证。6.5 重启后服务全挂现象机器重启后 OpenStack 服务没起来。原因systemctl enable没做或者/etc/hosts被覆盖导致主机名解析失败。解决逐个systemctl enable关键服务libvirtd、nova-compute、neutron-linuxbridge-agent并把 hosts 配置写进容器启动脚本或镜像里。7. 多物理节点聚合与进阶技巧从单机到能交付的私有云资料第 4 章讲聚合多物理节点创建云主机整体规划、添加计算节点、装镜像、建安全组、建密钥对、建网络拓扑、创建实例、控制台查看、绑浮动 IP、SSH 管理最后给整体概况。这一章是把前面所有单节点操作复制到多节点并保证一致性的过程。多节点最容易出问题的是配置漂移compute01 改了某个参数compute02 忘了改结果实例调度到 compute02 就失败。我一般会用一个检查脚本在每台计算节点上跑一遍#!/bin/bash # 检查计算节点关键配置一致性 echo hostname hostname echo my_ip grep ^my_ip /etc/nova/nova.conf echo transport_url grep ^transport_url /etc/nova/nova.conf echo local_ip grep ^local_ip /etc/neutron/plugins/ml2/linuxbridge_agent.ini echo hosts cat /etc/hosts echo services systemctl is-active libvirtd openstack-nova-compute neutron-linuxbridge-agent逻辑说明这个脚本把每台节点上影响注册和网络的关键参数打出来多节点部署时逐台跑对比输出是否只有my_ip和local_ip不同其余必须一致。systemctl is-active一次性检查三个核心服务输出 active 才算正常。参数上grep ^my_ip只匹配行首避免匹配到注释行。镜像管理方面资料提到 Glance 和 Cinder、Swift。Glance 管镜像Cinder 管块存储Swift 管对象存储。多节点环境里 Glance 通常部署在控制节点计算节点通过[glance] api_servers访问。Cinder 如果没配创建实例时只能用本地磁盘或临时盘数据不持久。我一般会先确认openstack image list有可用镜像openstack volume type list有存储后端再创建实例。网络拓扑在多节点下要确认所有计算节点的 linuxbridge_agent.ini 里local_ip是各自的管理网 IPVXLAN 隧道才能互通。如果实例跨节点通信失败先openstack network agent list看各节点的 agent 是否 up再检查 VXLAN 的local_ip有没有写错。密钥对和安全组是多节点交付前的最后一道检查。密钥对在项目里创建公钥存 OpenStack私钥自己留着。安全组规则要覆盖 SSH、ICMP 和业务端口。我习惯在交付前用一台跳板机 SSH 到每台新建实例确认网络和认证都通再交给用户。从那以后我每次搭多节点 OpenStack都强制先跑一遍上面那个一致性检查脚本确认所有计算节点的my_ip、local_ip、transport_url和 hosts 只有该不同的地方不同再往下创建实例。这个习惯帮我省掉了至少三次“实例调度到某台节点就失败”的排查时间。希望帮到你。本文还有配套的精品资源点击获取
返回列表