旧版 OpenStack 环境经常混用 nova、neutron、glance 和 cinder 命令。新脚本应优先采用统一的 openstack CLI,旧命令只在维护老平台或确认版本差异时使用。本文按日常操作整理常用命令,并统一使用占位符,避免把真实资源 ID 和密码写进文档。
## 1. 环境与身份确认
加载环境变量后,先确认当前身份和项目:
```bash
source openrc
openstack token issue
openstack project list
openstack user list
openstack endpoint list
openstack catalog list
```
如果命令报 401、Endpoint 不存在或连接错误,检查认证地址、Region、项目、用户域和系统时间。不要在共享终端中打印长期有效密码。
## 2. 输出格式与筛选
统一 CLI 支持多种输出格式:
```bash
openstack server list --long
openstack server list -f value -c ID -c Name -c Status
openstack server show VM_NAME -f json
openstack port list --server VM_NAME
```
自动化脚本优先使用 -f value、-f json 和 -c,不要用复杂的 grep/awk 去解析表格边框。资源名可能重复,破坏性操作应优先使用 ID。
## 3. Flavor 管理
```bash
openstack flavor list
openstack flavor show FLAVOR
openstack flavor create \
--vcpus 4 --ram 8192 --disk 50 \
general-4c8g
openstack flavor set general-4c8g \
--property hw:cpu_policy=shared
openstack flavor delete FLAVOR_ID
```
RAM 单位通常为 MiB,磁盘单位为 GiB。修改 extra specs 前确认其与计算节点、主机聚合、NUMA、Huge Page 或 PCI 配置匹配。
## 4. 实例管理
```bash
openstack server list --all-projects
openstack server show VM
openstack server create \
--flavor general-4c8g \
--image IMAGE \
--network NETWORK \
--key-name KEYPAIR \
--security-group default \
VM_NAME
openstack server stop VM
openstack server start VM
openstack server reboot --hard VM
openstack server delete VM
```
查看创建事件和控制台:
```bash
openstack server event list VM
openstack server event show VM REQUEST_ID
openstack console log show VM
openstack console url show VM
```
变更规格:
```bash
openstack server resize --flavor NEW_FLAVOR VM
openstack server resize confirm VM
# 验证失败时
openstack server resize revert VM
```
不要在未验证业务、磁盘和网络的情况下直接 confirm。
## 5. 网络、子网与端口
```bash
openstack network list
openstack network show NETWORK
openstack subnet list
openstack port list
openstack router list
openstack network agent list
```
创建网络和子网:
```bash
openstack network create demo-net
openstack subnet create \
--network demo-net \
--subnet-range 192.0.2.0/24 \
--allocation-pool start=192.0.2.100,end=192.0.2.200 \
--gateway 192.0.2.1 \
--dns-nameserver 1.1.1.1 \
demo-subnet
```
创建固定 IP 端口并连接实例:
```bash
openstack port create \
--network demo-net \
--fixed-ip subnet=demo-subnet,ip-address=192.0.2.120 \
demo-port
openstack server add port VM demo-port
openstack server remove port VM demo-port
```
使用文档保留网段作为示例,生产时替换为经过规划的网络;先确认地址未占用和端口未绑定。
## 6. 安全组
```bash
openstack security group create web-sg
openstack security group rule create \
--ingress --ethertype IPv4 \
--protocol tcp --dst-port 22 \
--remote-ip 198.51.100.0/24 \
web-sg
openstack security group rule create \
--ingress --ethertype IPv4 \
--protocol tcp --dst-port 443 \
--remote-ip 0.0.0.0/0 \
web-sg
openstack server add security group VM web-sg
```
不要为了排障永久放行 1:65535 或关闭端口安全。若临时放开,必须有变更记录、回收时间和替代防护。
## 7. 镜像管理
```bash
openstack image list
openstack image show IMAGE
openstack image create \
--file server.qcow2 \
--disk-format qcow2 \
--container-format bare \
--private \
server-image
openstack image save --file downloaded.qcow2 IMAGE
openstack image set --protected IMAGE
```
上传前使用 qemu-img info 检查格式,并验证来源、校验和、cloud-init、VirtIO 驱动和安全更新。
## 8. 卷、快照与备份
```bash
openstack volume list
openstack volume create --size 20 data-volume
openstack server add volume VM data-volume
openstack server remove volume VM data-volume
openstack volume snapshot create --volume data-volume data-snapshot
openstack volume backup create data-volume
```
卷挂载成功后还需在操作系统内检查设备、创建文件系统和挂载。卸载前先停止写入、卸载文件系统,再从实例分离,避免数据损坏。
## 9. 计算节点与服务状态
```bash
openstack compute service list
openstack hypervisor list --long
openstack hypervisor show HYPERVISOR
openstack resource provider list
openstack allocation candidate list \
--resource VCPU=4 \
--resource MEMORY_MB=8192
```
维护节点前先禁用调度并确认实例迁移策略:
```bash
openstack compute service set --disable COMPUTE_HOST nova-compute
openstack compute service set --enable COMPUTE_HOST nova-compute
```
## 10. 命令执行前的安全检查
- 用 show 确认资源 ID、项目和状态。
- 删除、迁移、分离卷等操作先备份并确认影响范围。
- 自动化脚本启用错误退出和日志,但不得记录 Token 或密码。
- 命令是否支持取决于服务版本和 API microversion,执行前查询本环境帮助:openstack help COMMAND。
- 对重要操作使用 --wait 并检查最终状态与服务日志。
## 参考资料
- https://docs.openstack.org/python-openstackclient/latest/cli/command-list.html
- https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html
- https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/port.html