第一次接触OpenStack部署时,我对着满屏的英文文档和零散的教程差点放弃。直到发现先电IaaS镜像这个"救命稻草",才真正理解了什么叫开箱即用。这里分享的实战经验,能帮你避开我踩过的所有坑。
硬件配置是地基,建议controller节点至少3GB内存+双核CPU,compute节点可以稍低但不要低于2GB内存。我试过用1GB内存硬扛,结果服务启动时直接卡死。网络配置要特别注意:VMnet1作为管理网络(比如192.168.28.0/24),VMnet2作为数据网络(比如192.168.128.0/24),两个节点都要配双网卡。
镜像准备有个小技巧:先用lsblk确认光盘设备名,有时候不是/dev/cdrom而是/dev/sr0。挂载时遇到"mount: no medium found"错误,多半是虚拟机设置里没勾选"已连接"。我习惯用这条命令批量操作:
bash复制mkdir -p /opt/{centos,iaas} && mount -o loop /opt/XianDian-IaaS-v2.2.iso /opt/iaas
yum源配置最容易翻车。有次我忘了删CentOS自带的repo文件,缓存始终报错。正确姿势应该是:
bash复制cd /etc/yum.repos.d && mkdir backup && mv CentOS-* backup/
cat > local.repo <<EOF
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1
EOF
执行yum makecache时如果看到"元数据缓存已建立"才算成功,出现任何红色报错都要倒回去检查路径。
很多人部署失败就卡在网络配置。先电镜像默认用GRE隧道模式,这对初学者其实更友好。我的经验是:先搞定管理网络,再处理数据网络。
controller节点的双网卡要这样配:
关键配置都在/etc/xiandian/openrc.sh里,我建议用sed命令批量修改:
bash复制sed -i 's/INTERFACE_NAME=.*/INTERFACE_NAME=ens34/' /etc/xiandian/openrc.sh
sed -i 's/METADATA_SECRET=.*/METADATA_SECRET=000000/' /etc/xiandian/openrc.sh
特别注意INTERFACE_NAME要对应第二个网卡名称,用ip a命令确认。
计算节点有个隐藏坑点:ftp.repo的baseurl必须指向controller:
bash复制baseurl=ftp://192.168.28.10/centos
有次我手误写成http协议,导致后续安装全部失败。验证方法很简单:
bash复制curl ftp://192.168.28.10/iaas/iaas-repo/repodata/repomd.xml
能正常返回XML内容才算配置正确。
安装服务时一定要按顺序执行脚本,我的血泪教训是:先装MySQL再装Keystone,顺序错了就得重装系统。controller节点推荐用组合脚本:
bash复制cat > /usr/local/bin/all-in-one.sh <<EOF
iaas-install-mysql.sh
iaas-install-keystone.sh
iaas-install-glance.sh
iaas-install-nova-controller.sh
iaas-install-neutron-controller.sh
iaas-install-dashboard.sh
EOF
chmod +x /usr/local/bin/all-in-one.sh
常见错误及解决方案:
/etc/hosts是否包含两节点IP映射systemctl restart httpd/var/log/nova/nova-compute.log日志neutron agent-list确认所有agent状态有次我遇到Neutron服务反复崩溃,最后发现是防火墙没彻底关闭。建议用以下命令核验:
bash复制systemctl status firewalld
getenforce
iptables -L
安装完成后别急着庆祝,先用这些命令做健康检查:
bash复制source /etc/keystone/admin-openrc.sh
openstack service list # 应显示7个服务
nova service-list # 所有服务状态应为up
neutron agent-list # 所有agent状态应为:-)
登录Dashboard时注意:
http://控制节点IP/dashboard创建第一个实例的避坑指南:
有次我创建的实例始终获取不到IP,后来发现是DHCP服务没启动。排查步骤:
bash复制neutron net-list
neutron subnet-list
dhcp-agent-list-hosting-net <network-id>
最后提醒:所有节点执行完iaas-pre-host.sh后必须重启,否则nova-compute服务会异常。我在凌晨3点才发现这个问题,希望大家别重蹈覆辙。