1. 项目概述
DevStack 是 OpenStack 官方提供的快速部署工具,它通过自动化脚本帮助开发者和运维人员在单机上快速搭建完整的 OpenStack 开发环境。对于想要学习 OpenStack 但又不想花费大量时间在环境搭建上的技术人员来说,DevStack 无疑是最佳选择。
我在过去三年中曾为多家企业部署过基于 DevStack 的 OpenStack 开发环境,也用它来进行过多次 PoC 验证。相比手动部署 OpenStack 各组件,DevStack 可以将部署时间从几天缩短到几十分钟,这对于快速验证新功能或进行开发测试来说非常宝贵。
2. 环境准备
2.1 系统要求
DevStack 对硬件和操作系统有一定要求:
- 操作系统:推荐使用 Ubuntu 18.04/20.04 LTS 或 CentOS 7/8。我个人更推荐 Ubuntu,因为社区支持更好,遇到问题更容易找到解决方案。
- 硬件配置:至少 4GB 内存(8GB 更佳),50GB 磁盘空间,支持硬件虚拟化的 CPU。如果计划运行多个虚拟机实例,建议配置更高。
- 网络:需要稳定的网络连接以下载软件包和依赖。
注意:虽然 DevStack 可以在虚拟机中运行,但为了获得更好的性能,建议直接在物理机上安装。如果必须在虚拟机中运行,请确保启用了嵌套虚拟化。
2.2 基础环境配置
在开始部署前,需要完成以下准备工作:
-
更新系统:
bash复制sudo apt update && sudo apt upgrade -y -
创建 stack 用户:
DevStack 不建议在 root 用户下运行,因此需要创建一个专用用户:bash复制sudo useradd -s /bin/bash -d /opt/stack -m stack echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack sudo su - stack -
安装 Git:
bash复制sudo apt install -y git
3. DevStack 部署流程
3.1 获取 DevStack 代码
切换到 stack 用户后,克隆最新的 DevStack 代码:
bash复制git clone https://opendev.org/openstack/devstack
cd devstack
建议检查最新的稳定分支:
bash复制git checkout stable/<最新版本>
3.2 配置 local.conf
DevStack 的行为通过 local.conf 文件控制。创建一个基本的配置文件:
bash复制cat > local.conf << EOF
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=\$ADMIN_PASSWORD
RABBIT_PASSWORD=\$ADMIN_PASSWORD
SERVICE_PASSWORD=\$ADMIN_PASSWORD
# 启用基础服务
enable_service key
enable_service rabbit
enable_service mysql
enable_service horizon
enable_service nova
enable_service placement
enable_service neutron
enable_service glance
enable_service cinder
# 网络配置
HOST_IP=<你的主机IP>
FLAT_INTERFACE=eth0
EOF
提示:在实际生产环境中,请使用更复杂的密码替换 'secret',并确保配置文件权限设置为 600。
3.3 开始部署
运行安装脚本:
bash复制./stack.sh
这个过程会持续 30-60 分钟,具体时间取决于网络速度和主机性能。脚本会自动:
- 安装所有必要的依赖包
- 下载并配置各个 OpenStack 组件
- 创建数据库和服务账户
- 启动所有服务
4. 部署后验证
4.1 检查服务状态
部署完成后,可以通过以下命令检查服务状态:
bash复制source openrc admin admin
openstack compute service list
openstack network agent list
4.2 访问 Dashboard
DevStack 会自动安装 Horizon 仪表板,可以通过浏览器访问:
code复制http://<主机IP>/dashboard
使用 admin/secret 登录(密码是 local.conf 中设置的 ADMIN_PASSWORD)。
4.3 创建测试实例
验证环境是否正常工作:
bash复制openstack network create test-net
openstack subnet create --network test-net --subnet-range 192.168.100.0/24 test-subnet
openstack server create --flavor m1.tiny --image cirros --nic net-id=test-net test-instance
5. 常见问题与解决
5.1 依赖安装失败
现象:在运行 stack.sh 时出现包安装错误。
解决方案:
- 检查网络连接是否正常
- 尝试更换软件源:
bash复制sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt update
5.2 服务启动失败
现象:某个 OpenStack 服务无法启动。
解决方案:
- 检查日志文件(通常位于 /opt/stack/logs/)
- 尝试重新启动服务:
bash复制sudo systemctl restart devstack@<服务名> - 如果问题持续,可以尝试重新运行 stack.sh
5.3 网络问题
现象:虚拟机无法获取 IP 或无法访问外网。
解决方案:
- 检查 neutron 服务是否正常运行
- 验证网络配置:
bash复制
openstack network agent list ip a - 确保 FLAT_INTERFACE 在 local.conf 中设置正确
6. 日常使用与维护
6.1 启动和停止环境
停止所有服务:
bash复制./unstack.sh
完全清理环境(慎用):
bash复制./clean.sh
6.2 更新 DevStack
要更新到最新代码:
bash复制git pull origin master
./stack.sh
6.3 添加额外组件
可以通过修改 local.conf 来启用更多服务,例如:
bash复制enable_service heat
enable_service barbican
7. 性能优化建议
7.1 资源分配
对于开发环境,可以调整资源分配以避免主机过载:
bash复制# 在 local.conf 中添加
NOVA_CPU_ALLOCATION_RATIO=1.0
NOVA_RAM_ALLOCATION_RATIO=1.0
7.2 日志管理
DevStack 会产生大量日志,可以配置日志轮转:
bash复制sudo tee /etc/logrotate.d/devstack << EOF
/opt/stack/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 stack stack
}
EOF
7.3 镜像优化
使用更小的测试镜像可以提高启动速度:
bash复制wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
openstack image create --file cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
8. 进阶配置
8.1 多节点部署
虽然 DevStack 主要用于单机部署,但也可以配置多节点环境:
-
在控制节点上:
bash复制
enable_service n-cpu enable_service n-cond enable_service n-sch -
在计算节点上:
bash复制disable_all_services enable_service n-cpu enable_service q-agt SERVICE_HOST=<控制节点IP> MYSQL_HOST=\$SERVICE_HOST RABBIT_HOST=\$SERVICE_HOST GLANCE_HOSTPORT=\$SERVICE_HOST:9292
8.2 插件支持
DevStack 支持多种插件,例如 Kubernetes 集成:
bash复制enable_plugin neutron-lbaas https://opendev.org/openstack/neutron-lbaas
enable_plugin barbican https://opendev.org/openstack/barbican
8.3 自定义配置
可以覆盖 OpenStack 组件的默认配置:
bash复制# 在 local.conf 中
[[post-config|/etc/nova/nova.conf]]
[DEFAULT]
scheduler_default_filters=AllHostsFilter
9. 开发环境使用技巧
9.1 调试服务
要调试某个服务,可以手动启动它:
bash复制sudo systemctl stop devstack@n-api
cd /opt/stack/nova
python -m nova.cmd.api --config-file /etc/nova/nova.conf --debug
9.2 代码修改热加载
大多数 Python 服务支持热加载,修改代码后只需发送 HUP 信号:
bash复制sudo pkill -HUP -f nova-api
9.3 单元测试
运行 Nova 单元测试:
bash复制cd /opt/stack/nova
tox -e py37
10. 生产环境注意事项
虽然 DevStack 主要用于开发和测试,但如果要在准生产环境中使用,需要考虑:
- 安全性:修改所有默认密码,配置防火墙规则
- 备份:定期备份数据库和配置文件
- 监控:部署监控系统跟踪服务状态
- 高可用:考虑多节点部署关键服务
我在实际工作中发现,很多团队会先用 DevStack 快速验证概念,然后再转向更健壮的部署工具如 Kolla-Ansible 或 OpenStack-Helm。这种渐进式的方法可以大大缩短评估周期。