前言

最近一直在折腾云计算相关的技术,总想着自己亲手搭一个 OpenStack 环境来学习和测试。但说实话,一想到它那出了名的复杂部署流程,就有点望而却步。传统的 DevStack 脚本虽然方便,但坑也不少;从源码手动部署,那更是重量级的挑战。

我的需求其实很简单:一个资源占用不高(手头只有一台 8核8G 的服务器)、能快速搭建、功能够用的 OpenStack 环境。

一番搜索之后,我发现了一个宝藏项目——MicroStack。它是 Ubuntu 的母公司 Canonical 官方维护的,通过 Snap 打包,号称能把 OpenStack 的部署变成几条命令的事。听起来正合我意!

于是,我决定拿它“开刀”,在一台崭新的 Ubuntu 22.04 服务器上实践一下。这篇博文,就是我这次部署过程的全程实录,记录了我从零开始,在半小时内搭建起一个单节点 OpenStack 私有云的所有步骤和一些心得。希望能给同样想快速入门 OpenStack 的朋友们提供一份清晰、可复现的参考。

下面,就是我的部署笔记。

部署方案概述

  • 操作系统: Ubuntu 22.04 LTS

  • 部署工具: MicroStack (基于 Snap)

  • 部署模式: 单节点一体化 (All-in-One)

  • 目标环境: 学习、开发和功能测试

  • 核心组件: Keystone (认证), Glance (镜像), Nova (计算), Neutron (网络), Horizon (Web仪表盘) 等。

第 1 步:环境准备与检查

1.1 更新系统

保持系统最新是一个好习惯,可以避免许多未知问题。

sudo apt update
sudo apt upgrade -y

1.2 检查硬件虚拟化支持

OpenStack 的核心计算服务 Nova 依赖于 CPU 的硬件虚拟化技术(Intel VT-x 或 AMD-V)来创建高性能的虚拟机。

egrep -c '(vmx|svm)' /proc/cpuinfo

检查输出:
如果输出结果是 1 或更大的数字(如 16),则表示硬件虚拟化已开启,一切准备就绪!如果输出是 0,你需要进入服务器的 BIOS/UEFI 设置,找到并启用 "Virtualization Technology" 或类似的选项。

第 2 步:安装与初始化 MicroStack

2.1 安装 MicroStack Snap 包

我们使用 edge 频道来获取最新的功能版本,并采用 --devmode 以减少权限限制,适合测试环境。

sudo snap install microstack --devmode --edge
Start snap "microstack" (245) services                                                                                                                                                                          
Run configure hook of "microstack" snap if present                                                                                                                                                              
Run configure hook of "microstack" snap if present                                                                                                                                                              
microstack (edge) ussuri from Canonical✓ installed

看到 installed 字样,说明 MicroStack 的“安装包”已经就位。

2.2 一键初始化 OpenStack

这是最激动人心的命令。它会自动完成所有核心组件的配置、数据库初始化、网络设置等一系列复杂工作。

sudo microstack init --auto --control
...
Waiting for 10.0.0.101:9292
2025-07-20 19:20:25,890 - microstack_init - INFO - Adding cirros image ...
2025-07-20 19:20:29,911 - microstack_init - INFO - Creating security group rules ...
2025-07-20 19:20:40,509 - microstack_init - INFO - Configuring the Cinder services...
2025-07-20 19:21:44,740 - microstack_init - INFO - Running Cinder DB migrations...
2025-07-20 19:21:53,800 - microstack_init - INFO - restarting libvirt and virtlogd ...
2025-07-20 19:22:06,189 - microstack_init - INFO - Complete. Marked microstack as initialized!  

参数解读:

  • --auto: 自动回答所有配置问题,使用默认值。

  • --control: 将此节点设置为主控制节点。

这个过程会持续几分钟到十几分钟不等,具体取决于你的网络和硬件性能。你可以看到屏幕上会滚动显示各个服务的配置日志。

关键成功标志:
当你在日志末尾看到下面这行信息时,就意味着你的 OpenStack 私有云已经搭建完毕!

2025-07-20 19:22:06,189 - microstack_init - INFO - Complete. Marked microstack as initialized!

第 3 步:验证部署状态

部署完成后,我们需要确认所有服务是否都正常运行。

3.1 检查服务状态

使用 snap services 命令可以清晰地看到 MicroStack 管理的所有服务的状态。

sudo snap services microstack

检查输出:
你会看到一个长长的列表,其中大部分核心服务(如 keystone-uwsgi, nova-compute, neutron-api, horizon-uwsgi 等)的状态都应该是 enabled 和 active。这表明 OpenStack 已经“心跳正常”。

3.2 检查 OpenStack 内部组件

我们还可以使用 OpenStack 的命令行客户端来确认内部组件是否正常。

sudo microstack.openstack user list
+----------------------------------+-----------+
| ID                               | Name      |
+----------------------------------+-----------+
| 91acbf4e9c724960bfa50ea6001b313f | admin     |
| 138edfc9a1f0474a9cc993f6c6412cbb | placement |
| ec7b1f705ff3400783173ba34f0d2c2e | nova      |
| 3a56f05a468c45e38700b8918057c7d3 | neutron   |
| f32cb4dc18714a0ca0e6ef606c56b82b | glance    |
| c12da9e3881c488692c8d5ca99e8f401 | cinder    |
+----------------------------------+-----------+

如果能成功列出 admin, nova, neutron 等系统用户,说明 OpenStack 的身份认证服务 (Keystone) 和命令行工具已经可以正常工作了。

第 4 步:访问 Horizon Web 仪表盘

现在,让我们通过图形化界面来感受 OpenStack 的魅力。

4.1 获取管理员密码

执行以下命令获取 admin 用户的初始密码。

sudo snap get microstack config.credentials.keystone-password
txYEKL4U9TtDB4C6bPhmzKcxirLD4VHj

4.2 登录 Horizon

  1. 打开你电脑上的浏览器(如 Chrome, Firefox)。

  2. 在地址栏输入你的服务器 IP 地址:http://<你的服务器IP> (例如: http://10.0.0.101)。

    ⚠️ 注意:MicroStack 默认可能使用 HTTP (80端口) 或 HTTPS (443端口)。如果 HTTP 无法访问,请尝试 https://<你的服务器IP>,并接受浏览器弹出的安全风险提示。

  3. 在登录页面,使用以下信息登录:

    • 用户名: admin

    • 密码: 上一步获取到的密码

成功登录后,你将看到 OpenStack 的主仪表盘,这里展示了项目的资源概览。

第 5 步:实战演练:创建第一台云主机

5.1 创建 SSH 密钥对

为了能够安全地登录到我们创建的虚拟机,需要先创建一个密钥对。

# 创建密钥对,并将私钥保存到 mykey.pem 文件中
sudo microstack.openstack keypair create mykey > mykey.pem
# 设置私钥文件权限,确保安全
chmod 600 mykey.pem

5.2 启动虚拟机实例

我们使用预置的 cirros 测试镜像和 m1.tiny 规格来创建一个名为 test-vm 的虚拟机。

sudo microstack.openstack server create --image cirros --flavor m1.tiny --key-name mykey --network test test-vm

5.3 检查实例状态

sudo microstack.openstack server list

当 Status 列变为 ACTIVE 时,说明虚拟机已成功启动并运行。你会看到它被分配了一个私有IP地址。

5.4 分配浮动 IP 并远程连接

为了能从外部访问这台虚拟机,我们需要给它分配一个“浮动IP”(即公网IP)。

# 1. 从 external 网络池中创建一个浮动 IP
FLOATING_IP=$(sudo microstack.openstack floating ip create external -c floating_ip_address -f value)
echo "创建的浮动IP是: $FLOATING_IP"

# 2. 将这个浮动 IP 绑定到我们的 test-vm 实例上
sudo microstack.openstack server add floating ip test-vm $FLOATING_IP

# 3. 使用 SSH 连接到虚拟机
# Cirros 镜像比较老,需要临时允许旧的 ssh-rsa 算法
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa -i mykey.pem cirros@$FLOATING_IP

# 4. 连接成功后,验证一下
$ hostname
test-vm
$ ip a
...
inet 192.168.222.45/24 ...

第 6 步:体验图形化管理

命令行固然高效,但图形化界面对于日常管理和监控同样重要。

查看虚拟机列表:
登录 Horizon 后,在左侧导航栏找到 项目 (Project) -> 计算 (Compute) -> 实例 (Instances)。这里会列出你所有的虚拟机,包括我们刚刚创建的 test-vm。

对虚拟机执行操作:
在 test-vm 所在行的最右侧,点击 操作 (Actions) 下拉菜单,你可以对虚拟机进行暂停、挂起、软/硬重启、关机甚至删除等操作。

查看虚拟机详情和控制台:
点击实例名称 test-vm,可以进入详情页面。最重要的功能是 控制台 (Console) 标签页。点击它,你可以在浏览器里直接访问虚拟机的“显示器”,这在网络不通时是排错的救命稻草。

结论:

到这里,这次用 MicroStack 快速搭建 OpenStack 的实践记录就告一段落了。回过头看,整个过程确实如预想中那样流畅和迅速。从一台纯净的 Ubuntu 系统,到拥有一个功能齐全、可以通过 Web 和命令行管理的私有云,真正动手的时间加起来也就半个多小时。

这次经历让我深刻体会到,像 MicroStack 这样的工具,极大地降低了我们接触和学习 OpenStack 的门槛。它屏蔽了底层复杂的组件配置,让我们能把更多精力聚焦在 OpenStack 本身的使用和探索上。

当然,这次搭建的只是一个单节点的“一体化”环境,它是我个人学习和测试的起点。接下来,我计划在这个环境上做更多的尝试,比如:

  • 上传和管理自己的操作系统镜像。

  • 深入玩转 Neutron 的网络配置,构建更复杂的网络拓扑。

  • 研究 Cinder 块存储,给云主机挂载和卸载云盘。

  • 甚至,挑战一下将计算节点扩展到另一台机器上,感受分布式架构的魅力。

如果你也按照这篇笔记成功搭建了自己的环境,恭喜你!我们都在探索云计算的道路上迈出了坚实的一步。希望我的这份记录能对你有所帮助,也欢迎随时交流实践中遇到的问题和心得。

探索之路,未完待续。