当前位置: 首页 > news >正文

从零搭建OpenStack私有云:我是如何用两台旧电脑打造个人开发测试平台的

从零搭建OpenStack私有云:我是如何用两台旧电脑打造个人开发测试平台的

去年整理仓库时发现两台闲置的旧台式机,配置都是i5-6500加16GB内存。看着它们积灰实在可惜,我决定用这两台"老伙计"搭建一个OpenStack私有云环境,用于日常开发测试。整个过程充满意外和挑战,但也收获了不少实战经验。本文将详细记录这次搭建之旅,希望能给同样想用有限资源构建私有云的开发者一些参考。

1. 硬件准备与系统规划

两台旧电脑的配置如下:

设备类型CPU内存硬盘网卡
控制节点i5-650016GB256GB SSD千兆有线×1
计算节点i5-650016GB256GB SSD+1TB千兆有线×1

关键决策点

  • 将SSD用于系统盘和数据库存储,机械硬盘作为计算节点的实例存储
  • 由于只有单网卡,选择Linuxbridge而非OVS简化网络配置
  • 控制节点需要运行大部分服务,分配更多内存资源

安装Ubuntu 18.04 LTS时遇到第一个坑:UEFI启动模式下安装程序无法识别SSD。解决方法是在BIOS中切换为Legacy启动模式。系统安装完成后,立即执行以下基础配置:

# 更新系统并安装必要工具 sudo apt update && sudo apt upgrade -y sudo apt install -y git vim net-tools # 设置主机名和hosts文件 sudo hostnamectl set-hostname controller # 控制节点 # 或 sudo hostnamectl set-hostname compute1 # 计算节点 # 编辑/etc/hosts添加两节点的IP和主机名映射 192.168.1.100 controller 192.168.1.101 compute1

提示:确保两台机器的时间同步非常重要,后续的认证服务对时间差极其敏感。建议安装chrony并配置NTP服务器:

sudo apt install -y chrony sudo systemctl restart chrony

2. OpenStack Stein基础环境搭建

选择Stein版本是因为它在稳定性和资源消耗之间取得了较好平衡。首先在两台机器上安装OpenStack客户端和数据库:

# 添加OpenStack仓库 sudo apt install -y software-properties-common sudo add-apt-repository cloud-archive:stein # 安装MySQL数据库(仅控制节点) sudo apt install -y mariadb-server python-pymysql

创建MySQL配置文件/etc/mysql/mariadb.conf.d/99-openstack.cnf

[mysqld] bind-address = 192.168.1.100 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8

安装消息队列服务时遇到了第二个坑:RabbitMQ服务启动后无法连接。排查发现是防火墙阻止了5672端口。解决方案:

# 安装RabbitMQ sudo apt install -y rabbitmq-server # 创建OpenStack用户 sudo rabbitmqctl add_user openstack RABBIT_PASS sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*" # 检查端口监听状态 sudo netstat -tnlp | grep 5672

注意:如果使用UFW防火墙,记得开放必要端口:

sudo ufw allow 3306/tcp # MySQL sudo ufw allow 5672/tcp # RabbitMQ sudo ufw allow 80/tcp # Horizon

3. 核心组件安装与配置

3.1 Keystone身份服务

安装Keystone时,特别注意要提前创建好数据库:

mysql -u root -p -e "CREATE DATABASE keystone;" mysql -u root -p -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';" mysql -u root -p -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';"

配置完成后,测试认证服务是否正常工作:

openstack --os-auth-url http://controller:5000/v3 \ --os-project-domain-name Default --os-user-domain-name Default \ --os-project-name admin --os-username admin token issue

3.2 Glance镜像服务

将下载的CirrOS测试镜像添加到Glance:

wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img openstack image create "cirros" \ --file cirros-0.4.0-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public

3.3 Nova计算服务

计算节点的配置需要特别注意资源分配。在/etc/nova/nova.conf中调整以下参数:

[DEFAULT] compute_driver = libvirt.LibvirtDriver [libvirt] virt_type = qemu cpu_mode = none

由于使用的是旧硬件,选择qemu而非KVM可以获得更好的兼容性,虽然性能会有所下降。

4. 网络与服务验证

4.1 Neutron网络服务

采用最简单的provider网络模式,配置如下:

[linux_bridge] physical_interface_mappings = provider:enp3s0 [securitygroup] firewall_driver = nova.virt.firewall.NoopFirewallDriver enable_security_group = True

创建网络和子网:

openstack network create --share --external \ --provider-physical-network provider \ --provider-network-type flat provider openstack subnet create --network provider \ --allocation-pool start=192.168.1.150,end=192.168.1.200 \ --dns-nameserver 8.8.8.8 --gateway 192.168.1.1 \ --subnet-range 192.168.1.0/24 provider

4.2 创建测试实例

通过Horizon仪表板创建第一个实例时,遇到了VNC控制台无法连接的问题。排查发现是nova-consoleproxy服务没有正确配置。解决方法:

# 编辑/etc/nova/nova.conf [vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html

最终成功创建并登录测试实例:

ssh -i mykey.pem cirros@192.168.1.150

5. 实际应用场景

这个简易OpenStack环境已经稳定运行了三个月,主要支撑以下开发场景:

  • 多版本测试:同时运行Python 3.6/3.8/3.10环境进行兼容性测试
  • CI/CD实验:部署Jenkins slave节点进行构建任务
  • 网络原型验证:测试不同网络拓扑下的应用表现
  • 教学演示:向团队新人展示云计算基础概念

资源监控显示平均负载:

节点CPU使用率内存使用磁盘IO
控制节点35%12GB中等
计算节点60%14GB较高

对于性能瓶颈,我的优化策略是:

  • 对开发测试实例启用内存气球(ballooning)技术
  • 调整Nova调度器的权重配置,优先选择负载较低的节点
  • 对不重要的实例设置CPU配额限制

6. 遇到的典型问题与解决

时间同步问题:某天突然所有API调用都返回401错误。检查发现控制节点的时间比NTP服务器快了5分钟。解决方法:

# 强制同步时间 sudo chronyc -a makestep sudo systemctl restart apache2

镜像上传失败:Glance报错"Unable to add image to store"。原因是/var/lib/glance/images目录权限问题:

sudo chown glance:glance /var/lib/glance/images sudo systemctl restart glance-api

实例启动卡住:查看Nova日志发现是计算节点libvirt服务崩溃。根本原因是旧电脑的BIOS中需要禁用CPU的C-states节能功能。

http://www.jsqmd.com/news/856116/

相关文章:

  • 2026年知名的成都加工中心机/高速加工中心机/五轴加工中心机/成都五轴加工中心机公司对比推荐 - 品牌宣传支持者
  • 别再死记硬背Payload了!用PHP+MySQL本地复现floor报错注入全过程
  • 靖江注册公司需要多少钱?2026最新费用明细与隐形消费避坑指南
  • 阿里云ECS新手避坑指南:搞定校园网、安全组和SSH端口映射(附XShell连接测试)
  • RT-Thread实战:基于STM32F103的线程创建与LED控制
  • 蓝桥杯单片机备赛避坑指南:从温度读取异常到电压输出不稳,这些调试经验帮你省时
  • 3分钟完成Windows包管理器Winget安装:PowerShell自动化部署方案
  • 2026年比较好的酸洗池耐酸砖/工业耐酸砖推荐品牌厂家 - 行业平台推荐
  • 2026年评价高的显示器玻璃清洗机/小型玻璃清洗机/1600玻璃清洗机/镜片玻璃清洗机制造厂家 - 品牌宣传支持者
  • 别再让容器‘断网’了!Docker DNS配置保姆级教程(从全局到单容器,含8.8.8.8等常用DNS)
  • 2026年知名的装载机耙齿/山东耙齿/弯耙齿主流厂家对比评测 - 行业平台推荐
  • 在PyTorch里手把手实现ODConv:一个Attention类搞定多维注意力卷积
  • QT版本选择与离线安装全解析:告别在线安装器,搞定5.14及以下旧版本部署
  • IDEA 和 Eclipse 在 Maven 项目支持上有哪些核心差异?
  • 2026年4月靠谱的光谱仪生产厂家推荐,分析仪/测试仪/libs/xrf/光谱仪/测厚仪/X射线,光谱仪生产厂家哪个好 - 品牌推荐师
  • Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图
  • 2026年比较好的三亚别墅庭院设计施工装修实力公司推荐 - 品牌宣传支持者
  • 2026年靠谱的工业耐酸砖/酸洗池耐酸砖/实验室耐酸砖厂家哪家好 - 行业平台推荐
  • 基于Python图像识别的自动化连连看:3步实现高效游戏破解
  • 2026年高透PVC全新料/浙江PVC颗粒/PVC/PVC软料高口碑品牌推荐 - 品牌宣传支持者
  • ESP32-C3开发踩坑记:我把Panic Handler从‘重启’改成‘挂起’,调试效率翻倍了
  • 2026年质量好的佛山不锈钢风口/不锈钢防雨百叶推荐厂家精选 - 品牌宣传支持者
  • PCB设计避坑指南:用ANSYS Designer快速评估耦合长度,别再盲目布线了
  • 深入理解STM32的FSMC:如何像访问内存一样轻松驱动TFTLCD屏
  • 告别安装失败!Proe5.0 M280终极版从下载到成功运行的完整配置流程
  • Koopman算子理论在移动机器人非线性控制中的应用
  • 告别付费弹窗!手把手教你配置Fiddler Everywhere进行本地API调试与Mock
  • DeepLearnToolbox:在Matlab/Octave中掌握深度学习的艺术
  • 2026年比较好的三亚装修/三亚装饰设计装修年度精选公司 - 品牌宣传支持者
  • 别再到处找封装了!手把手教你用嘉立创EDA专业版自建个人元件库,效率翻倍