创建第一台实例:Horizon ↔ CLI
前置:DevStack 安装、OpenStack 是什么 目标:用页面和命令各开一台虚机,搞清镜像 / Flavor / 网络 / 安全组 / 项目作用域。
引言
环境起来了,下一步是真正开出一台实例。 很多第一次失败不是「OpenStack 坏了」,而是:镜像架构不对、网络没选、安全组没放行、或者开在了错误的项目里。
本文按「准备材料 → Horizon 走一遍 → CLI 走一遍 → 核对状态」写,两边对照。
开始前:确认环境与作用域
bash
# 进入 stack 用户后
source ~/devstack/openrc admin admin
# 或 demo 用户:source ~/devstack/openrc demo demo
openstack token issue
openstack project list
| 注意 | 说明 |
|---|---|
openrc 第二个参数是项目名 |
admin admin = 用户 admin、项目 admin |
| 列表为空 | 先怀疑项目 / 用户是否搞错,再怀疑「资源没了」 |
| Apple Silicon | 用 aarch64 镜像;见安装篇 cpu_mode = none |

开实例需要的四样东西
| 材料 | 是什么 | 怎么查 |
|---|---|---|
| 镜像 Image | 虚拟机磁盘模板 | openstack image list |
| 规格 Flavor | vCPU / 内存 / 磁盘套餐 | openstack flavor list |
| 网络 Network | 实例插哪张「虚拟网卡」 | openstack network list |
| 安全组 Security Group | 防火墙规则集合 | openstack security group list |
可选但强烈建议:密钥对 Keypair(SSH 公钥)。Cirros 也可用控制台 + 默认密码试登录;正式镜像基本靠密钥。密钥对专篇见后续。
bash
openstack image list
openstack flavor list
openstack network list
openstack security group list

DevStack 通常自带 Cirros 镜像和 private 一类租户网;Flavor 常见 m1.nano / m1.tiny(小规格适合学习机)。
路径 A:Horizon 创建
- 浏览器打开
http://<HOST_IP>/dashboard,用admin/ 你的ADMIN_PASSWORD登录。 - 右上角确认当前项目 (例如
admin或demo)。 - 计算 → 实例 → 启动实例。
建议按向导填:
| 步骤 | 建议 |
|---|---|
| 详情 | 实例名称如 web-01 |
| 源 | 从镜像启动;选匹配架构的 Cirros / Ubuntu |
| 规格 | m1.nano 或 m1.tiny |
| 网络 | 勾选一条可用的私有网络 |
| 安全组 | 先用 default(后面再改规则) |
| 密钥对 | 有则选;没有可先跳过(Cirros + 控制台) |

创建后到 实例 列表,状态应到 运行中 / ACTIVE。点实例名可看 IP、控制台。

打开控制台 ,Cirros 常见提示用户 cirros,密码看控制台输出(或文档默认 gocubsgo,以你镜像为准)。

路径 B:CLI 创建
先拿网络 ID(示例取第一条非 external 的网;以你环境为准):
bash
source ~/devstack/openrc admin admin
# 看清镜像名(Apple Silicon 选 aarch64)
openstack image list -c Name -c Status
# 网络
openstack network list
NET_ID=$(openstack network list -f value -c ID -c Name | awk '/private/{print $1; exit}')
# 若没有叫 private 的网,手动:
# NET_ID=<你的网络 UUID>
openstack server create web-cli-01 \
--flavor m1.nano \
--image cirros-0.6.3-aarch64-disk \
--nic net-id=$NET_ID \
--wait
openstack server list
openstack server show web-cli-01
镜像名以
openstack image list为准;x86 环境把镜像换成对应的 amd64 Cirros。

对照表:同一件事两种入口
| 动作 | Horizon | CLI |
|---|---|---|
| 列表 | 计算 → 实例 | openstack server list |
| 创建 | 启动实例 | openstack server create ... |
| 详情 | 点实例名 | openstack server show <名或ID> |
| 控制台 | 控制台 Tab | openstack console url show <名>(VNC/SPICE 链接) |
| 删除 | 删除实例 | openstack server delete <名> |
bash
openstack console url show web-cli-01
openstack server delete web-cli-01
项目作用域:为什么「我刚创建的看不见」
典型坑:
- Horizon 右上角项目是
demo,CLI 却source openrc admin admin。 - 管理员用了
--all-projects才看得见,普通列表只显示当前项目。
bash
# 只看当前项目
openstack server list
# 管理员看全部
openstack server list --all-projects

口诀:先确认「我是谁、在哪个项目」,再谈资源在不在。
创建失败时先看这三处
- 实例状态 →
ERROR:openstack server show <名>,看fault字段。 - 计算服务 →
openstack compute service list,nova-compute是否up。 - 架构 / CPU 模式 → Apple Silicon 必看安装篇热修复;镜像必须是 aarch64。
bash
openstack server show web-cli-01 -c status -c fault -c addresses
openstack compute service list
更系统的排障见后续「实例 ERROR」专篇。

小结
- 开实例 = 镜像 + Flavor + 网络(+ 安全组 / 密钥对)。
- Horizon 与 CLI 是同一套 API;学习时两边都做一遍。
- 列表为空优先查项目作用域。
- 下一篇起按组件拆开:Keystone → Glance → Nova → Neutron → Cinder。
下一篇:身份与权限:Keystone