Lazy loaded image
OpenstackClient 使用指南
Words 2319Read Time 6 min
2026-1-3
2026-1-3
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Jan 3, 2026 10:56 PM
是否已更新
orginal_page
是否推荐
安装 openstack-client 客户端
  • pip 直接安装
    • pip install python-openstackclient
  • uv 包管理全局安装
    • uv pip install python-openstackclient
  • uv 包管理项目安装
    • uv venv openstack-env
    • source openstack-env/bin/activate
    • uv pip install python-openstackclient
推荐:clouds.yaml 文件配置 openstack API 访问
  • 类似于 kubeconfig 文件,可以快速切换上下文
默认在以下目录查找 clouds.yaml 文件
  • 当前目录
  • $HOME/.config/openstack
  • /etc/openstack
$HOME/.config/openstack/clouds.yaml 样例
另外可以拆分敏感信息到 secure.yaml 中,cli 会自动合并 yaml 文件
  • 路径与 clouds.yaml 文件一致,权限需要为 600
clouds.yaml 样例
secure.yaml 样例
  • 环境变量 OS_CLOUD 设置默认上下文
    • export OS_CLOUD=mtvexx
    • openstack configuration show
      • 查看当前配置上下文
  • 选项 --os-cloud 临时切换上下文
    • openstack --os-cloud mordred configuration show
老办法:openrc.sh 文件配置 openstack 环境变量
  • 可以从 项目-计算-访问与安全 里的 API 访问 选项卡下载 <project-name>-openrc.sh 文件
  • 手动创建 openrc 文件
    • vim <project-name>-openrc.sh
  • 加载 openrc 文件
    • source <project-name>-openrc.sh
  • 可选,openstack-client 选项覆盖对应变量
    • --os-username
    • --os-password
    • --os-project-name
    • --os-user-domain-name
    • --os-project-domain-name
    • --os-auth-url
    • --os-identity-api-version
和其他组件 nova, cinder 等命令行的对应关系
  • 交互式只需输入 openstack 即可
  • 命令式格式 openstack [global-options] [object] [action] [command args]
一些输出控制选项
  • --long 完整输出信息
  • -names 以名称而非 ID 输出
  • -c ID -c Name 输出 ID 和 Name Column
  • -f <table|value|yaml|json> 以表格/值/yaml/json 格式输出
    • 默认为 table
  • --sort <key>[:<direction>] 按某列进行排序
    • 方向默认为 asc
  • --tags, -tags-any, --not-tags, --not-tags-any 部分带 tags 可以筛选
常用 object
  • domain, project
  • group, user
    • group <add|remove> user
    • group contains user
  • role
    • role assignment list -names
  • service, endpoint
  • object, container, account
常用 actions:list, create, show, set, delete
  • list
  • create
  • show
  • set 设置 properties
  • delete
 

Openstack 核心组件常用命令样例

组件管理
  • openstack service list --long
  • openstack service list --long
  • openstack endpoint list
  • openstack compute service list
    • Nova
  • openstack network agent list
    • Neutron
  • openstack orchestration service list
    • Heat
Resource 管理
  • openstack region list
  • openstack domain set --disable <domain-name>
    • 禁用 domain <domain-name>
  • openstack project list --long
    • 显示所有 project
Identity 管理
  • Role 由 policy.json 管理
  • openstack user list --long
  • openstack group list --long
  • openstack group <add|remove> user <group> <user> [<user> ...]
    • 往组中添加或移除用户
  • openstack group contains user <group> <user>
    • 检查组是否包含用户
Glance 镜像管理
  • openstack image list --long
  • openstack image create [--public | --private | --community | --shared] \ --disk-format qcow2 --container-format raw \ --file <filepath> <image-name>
  • openstack image save --file <localpath> <image>
    • 下载镜像
  • openstack image set <image>
    • --min-ram <mb> 最小内存
    • --property key=value 更新元数据
  • 私有镜像分享
    • openstack image <add|remove> project <image> <project>
      • 往项目添加或移除私有镜像
    • openstack image member list --project-domain <project> <image>
    • openstack image set --accept <image>
      • 接受私有镜像
Nova 组件管理
  • openstack host list
    • deprecated,改用 hypervisor list
  • openstack hypervisor list
  • openstack hypervisor stats show
  • nova diagnostics <instance-name>
    • 注意是 nova cli
  • openstack compute service list
  • openstack compute service set --disable --disable-reason "Maintenace" <host> nova-compute
    • 停用 nova-compute 组件用于维护
  • openstack compute service set --enable <host> nova-compute
    • 恢复 nova-compute 组件用于维护
  • openstack usage list
    • 计量信息
实例管理
  • openstack server list
  • openstack server create --flavor m1.tiny --image <imagename> --key-name <keypair> \ --security-group default --network private \ <instance-name>
    • 从镜像创建实例
  • openstack server create --flavor m1.tiny --key-name <keypair> \ --block-device uuid=$volume_id,source_type=volume,destination_type=volume,boot_index=0,delete_on_termination=true \ --security-group default --network private \ <instance-name>
    • 从可启动的 volume 创建实例,volume 需要提前创建
      • openstack volume create --image system-3.5 --size 1 vol-test-vm1
      • volume_id=$(openstack volume show vol-test-vm1 -c Id -f value)
    • delete_on_termination=true 实例删除时同步删除卷
  • openstack server <start | stop | reboot | pause | unpause | suspend | resume | shelve | unshelve>
    • pause 临时挂起(仅 libvirt 层暂停 CPU)
    • pause 暂停(内存写入磁盘)
    • shelve 挂起(释放 vCPU / RAM / local disk)
  • openstack server <resize | rescue | unrescue | rebuild | migrate>
    • rescue 实例关机,挂载 rescue image
    • rebuild 彻底重装 root disk
  • openstack server <add | remove> <volume | fixed ip | floating ip | network | port | security group>
    • 添加相关存储或网络资源
  • openstack server dump create
    • 触发虚拟机内存转储
  • openstack server image create --name <snapname> <instance-name>
    • 创建快照
实例相关资源管理
管理配额
  • openstack quota set --cores <cores> --ram <mb> --volumes <num> <project/class>
管理规格
  • openstack flavor create --vcpus <cores> --ram <mb> \ --disk <gb> --swap <mb> --ephemeral <gb> --property key1=value1 \ --id <num> <flavor-name>
管理主机组
  • openstack aggregate list
  • openstack aggregate create --zone <az> <aggregate>
  • openstack aggregate set --property key1=value1 <aggregate>
    • 创建实例时通过 --property 或者 flavor 本身的 --property 匹配调度
  • openstack aggregate add host <aggregate> <host>
管理密钥对
  • openstack keypair create <keypairname>
  • openstack keypair create --public-key <pubpath> <keypairname>
    • 从已有公钥创建
管理安全组和安全组规则
  • openstack security group create <groupname>
  • openstack security group rule create --protocol icmp --dst-port 0 <groupname>
  • openstack security group rule create --protocol tcp --dst-port 22:22 <groupname>
实例 console url 和日志显示
  • openstack console url show <instance> --novnc
  • openstack console log show <instance> --novnc
Neutron 网络管理
ip netns 直接操作对应网络空间(限 OVS+LinuxBridge)
  • openstack network list
  • ip netns list
    • 前缀为 qdhcp-,剩余部分为 openstack 的 network id
  • ip netns exec <qdhcp-network-id> bash 进入对应网络命名空间
    • ping -c 3 www.baidu.com
    • ssh -i <pri_key> cirros@hostname
  • ip netns exec <qroute-network-id> tcpdump 流量监控
  • openstack network agent list
    • 查看 agent 情况
管理网络(self-service 网络和 provider 网络)
  • openstack network list
  • openstack network create self-net
    • 租户可以自行创建 self-service 网络
    • 不同 self-service 网络私有网段可以相同
  • openstack network create provider --share --external \ --provider-physical-network public --provider-network-type flat
    • --external 创建特殊 provider 网络直连物理网络
    • 每个 physical-network 只能同时存在有一个 --provider-network-type flat
  • openstack network create provider --share --external \ --provider-physical-network public --provider-network-type vlan --provider-segment 100
    • --provider-segment 对应 VLAN ID
管理子网
  • openstack subnet list
  • openstack subnet create <subnet_name> --network <network_name> \ --subnet-range <CIDR> --dns-nameserver <DNS>\ --allocation-pool start=<start_ip>,end=<end_ip>
    • --allocation-pool 指定地址池可用范围
  • openstack ip availability list
    • 子网 ip 使用情况
管理路由
  • openstack router list
  • openstack router create --external-gateway <network_name> dev-ns-router
    • 南北向路由
  • openstack router create dev-ew-router
    • 东西向路由,通过添加端口可以实现隔离子网之间的连接
管理端口
  • openstack port list
  • openstack router add subnet dev-ns-router dev-www-subnet
    • 连通外网的南北向路由添加对应子网的端口
  • openstack router add subnet dev-ew-router dev-db-subnet
    • 东西向路由添加对应子网的端口
  • 通过为东西向路由添加另一个子网的端口实现不同网段之间的连接
    • openstack port create --network dev-www-net dev-db-port
    • openstack router add port dev-ew-router dev-db-port
管理安全组
  • openstack security group create <groupname>
  • openstack security group rule create --protocol icmp --dst-port 0 <groupname>
  • openstack security group rule create --protocol tcp --dst-port 22:22 <groupname>
  • openstack server add security group <instance> <groupname>
管理浮动 IP
  • openstack floating ip list
  • openstack floating ip create <external-provider-network>
    • 必须是 --external 类型
  • openstack server add floating ip <instance> <ip_addr>
    • 实例添加浮动 IP
    • ip_addr=$(openstack floating ip list --network <external-provider-network> -f value -c "Floating IP Address")
      • 获取可用 ip 地址
Cinder 存储卷管理
后端能力查看
  • export OS_CLOUD=admin
  • openstack volume backend pool list
  • openstack volume backend capability show <host>
创建新的卷类型
  • openstack volume type create --property volume_backend_name=<backend> <volume-type>
    • volume_backend_name 用于选择对应后端,需要和 cinder 配置文件中配置的可用后端一致
  • openstack volume type create \ --encryption-provider nova.volume.encryptors.luks.LuksEncryptor \ --encryption-cipher aes-xts-plain64 \ --encryption-key-size 256 --encryption-control-location front-end \ crm-dev-encrypted
    • 加密的卷类型
    • --encryption-control-location 决定由谁来加密
      • front-end 在计算节点(Nova)侧完成加解密,后端存储看到的是密文
      • back-end 在存储侧完成加解密,后端存储看到的可能是明文
        • 不同后端行为不一致
  • openstack volume create --size <gb> --type <volume-type> \ [--source <volume>| --image <image> | --snapshot <snap>] \ <volume-name>
    • 创建卷
  • openstack server <add|remove> volume <instance> <volume>
    • 添加和移除卷到实例
  • openstack server volume list
    • 查看当前附加的卷
创建卷快照
  • openstack volume snapshot create --volume <vol_name> <snapshot>
  • openstack volume create --snapshot <snapshot> [--size <gb>] <vol_name>
    • 从快照创建新卷
创建和恢复卷备份
  • openstack volume backup create --name <backup> <vol_name>
  • openstack volume backup restore <backup> $vol_id
    • 只有创建新卷时可以用 vol_name 否则需要用 vol_id
      • openstack volume show <vol_name> -c Id -f value
    • --force 强制覆盖
私有卷转移,接收方 B 需要知道 trans_key 和 trans_id
  • export OS_CLOUD=A
    • vol_id=$(openstack volume show <vol_name> -c Id -f value)
    • trans_key=$(openstack volume transfer request create demo-vol2 -f value | head -n 1)
      • 创建并记录 transfer key
    • trans_id=$(openstack volume transfer request list -f value | grep $vol_id | cut -d" " -f1)
    • openstack volume transfer request delete $trans_id
      • 不想转移了可以删除任务
  • export OS_CLOUD=B
    • openstack volume transfer request accept --auth-key $trans_key $trans_id
  • openstack volume summary
Swift 对象存储管理
三层模型 account, container, object
  • openstack object store account list
  • openstack container list
  • openstack object list <container>
  • openstack container create sliver-public-container \ --public --storage-policy Policy-sliver
    • 使用特定存储策略的公共桶
    • 存储策略见 swift 配置文件
      • cat /etc/swift/swift.conf | grep -A10 storage-policy
  • openstack object --name <object-name> create <container> <filepath>
    • 上传文件并命名为 <object-name>
  • openstack object save --file <filepath> create <container> <object-name>
    • 下载文件并存储为 <filepath>
set 元数据可能对应设置对象 TTL 和存储桶 ACL --read-acl, --write-acl
  • openstack object store account set <account> \ --property X-Container-Write="<project>::*"
    • X-Account-Access-Control
  • openstack container set <container> \ --property X-Container-Write="<project>::*"
    • X-Container-Write="", X-Container-Read=""
    • ACL 语法
      • .r:*
      • .r:<refer>
      • .r:-<refer>
      • .rlistings
        • 允许列出 bucket,X-Container-Write 不支持
    • keystone ACL 相关语法
      • <project-id>:<user-id>
      • <project-id>:*
      • *:<user-id>
      • *:*
      • <role>
  • openstack object set <container> <object-name> \ --property X-Delete-After=3600
    • X-Delete-At=<UNIX-timestamp>, X-Delete-After=<second>
    • 实测不行,可能是别的名称,文档没说明
Heat 编排管理
  • openstack stack list
  • openstack stack create --enable-rollback --parameter key1=value1 \ --timeout <second> -t <template-file> <stackname>
  • openstack stack update --parameter key1=value1 \ --timeout <second> --existing <stackname>
    • 仅更新现有 stack 模板中的某个参数
  • openstack stack update --parameter key1=value1 \ --timeout <second> -t <template-file> <stackname>
    • 更新现有 stack
  • openstack stack output show --all <stackname>
    • 显示执行结果
  • openstack stack resource list <stackname>
    • 显示 stack 资源
  • openstack stack event list <stackname>
    • 显示 stack 事件
 
上一篇
Jenkin Pipeline 语法和 Jenkinsfile
下一篇
helm 管理 Kubernetes 集群软件

Comments
Loading...