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-envsource openstack-env/bin/activateuv 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=mtvexxopenstack 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,usergroup <add|remove> usergroup contains user
rolerole 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-vm1volume_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.comssh -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- 连通外网的南北向路由添加对应子网的端口
openstackrouter add subnetdev-ew-router dev-db-subnet- 东西向路由添加对应子网的端口
- 通过为东西向路由添加另一个子网的端口实现不同网段之间的连接
openstack port create --network dev-www-net dev-db-portopenstackrouter add portdev-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=Avol_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=Bopenstack volume transfer request accept --auth-key $trans_key $trans_id
openstack volume summary
Swift 对象存储管理
三层模型 account, container, object
openstack object storeaccountlist
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=3600X-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 事件
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/openstack_client
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
