尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

openstack命令详解

openstack命令详解 openstack 是未来它是 OpenStack 官方指定的统一命令行工具所有新功能和新 API 都会优先在这里体现。统一性openstack 的命令结构和参数设置风格高度一致记住了 create就知道了 delete记住了 server就知道了 network。这种范式化的设计极大地降低了学习曲线。功能强大openstack 客户端不仅仅是简单命令的集合它还支持处理其他客户端如 cinder难以实现的高级功能如资源标签--tag、资源集--all-projects等。首选工具对于任何新项目的日常运维、自动化脚本编写和技术研究都应该将 openstack 命令作为唯一且首选的工具。下面我们将按照不同的 OpenStack 服务模块对 openstack 命令进行详细的、模块化的讲解。openstack核心结构命令模式如下openstack 服务名 操作 [参数] [参数值] 服务名: 指定你要操作的是哪个 OpenStack 服务。例如 server (对应之前的 nova管理虚拟机) network (对应之前的 neutron管理网络) volume / volume v2 (对应之前的 cinder管理块存储) image (对应之前的 glance管理镜像) flavor (nova 的规格) security group (安全组) keypair (密钥对) 操作: 你想要执行的动作。常用的有 list: 列出资源 show: 显示资源详情 create: 创建资源 delete: 删除资源 add: 添加关联 remove: 移除关联 set: 设置资源属性 unset: 取消某个属性计算服务模块server1. 创建虚拟机这是启动新虚拟机的核心命令。# 演示创建一台虚拟机 openstack server create \ --image ubuntu-22.04-server \ # 指定系统镜像 --flavor m1.medium \ # 指定硬件规格 --key-name my-ssh-key \ # 指定SSH密钥对 --security-group default \ # 指定安全组 --network provider-net \ # 指定网络 --user-data-file /path/to/init.yaml \ # 指定cloud-init脚本文件 my-compute-instance-01 # 虚拟机名称常用参数详解 (--option value) 形式--file filenamefilepath: 指定要注入文件的路径和目标文件名例如 --file /path/to/ssh-key.pubauthorized_keys。--hint groupserver-group-name: 将虚拟机放入指定的服务器组用于亲和性/反亲和性调度。--volume volume-id: (创建时)挂载一个已存在的云硬盘。--availability-zone zone-name: 指定虚拟机所在可用区。创建虚拟机的命令有点复杂命令又很长很多的操作命令。所以建议拆分成两部分这样更容易创建出一个符合自己预期的虚拟机# 创建一个作为系统盘的volume卷 openstack volume create \ --image a70caee0-3055-4737-b5e7-074b22512a7b \ --size 40 \ --type volume_222 \ Edge_20260321_maccrt02_SystemDisk # 创建虚拟机 openstack server create \ --flavor Edge_12U56G \ --volume volume-id \ # 创建好的可以作为启动系统盘的volume卷的id --nic net-id767c5153-ed3f-40ea-9327-7cf38cf5b009 \ --hint Edge_hostgrouptrue \ Edge_20260321_maccrt02上面的虚拟机创建好之后就可以查看详情得到IP地址以后使用终端工具本地连接。接下来是给虚拟机添加数据盘例如# 创建一个空的云磁盘注意选择磁盘类型 openstack volume create \ --size 350 \ --type volume_222 \ Edge_20260321_maccrt01_1 # 查询volume Host1-I0719-2U-Slot03:~ # openstack volume list | grep Edge_20260321_maccrt01_1 | 20aacd54-0dbc-4ddf-9bb9-078457d7a14e | Edge_20260321_maccrt01_1 | available | 350 # 查询虚拟机server Host1-I0719-2U-Slot03:~ # openstack server list | grep Edge_20260321_maccrt01 | 61c155e7-265d-4cd9-a5ce-c14ede84a311 | Edge_20260321_maccrt01 | ACTIVE | GC_OM_1748.7.174.170 核心命令openstack server add volume openstack server add volume --device vdb server volume 61c155e7-265d-4cd9-a5ce-c14ede84a311 20aacd54-0dbc-4ddf-9bb9-078457d7a14e openstack server add volume --device /dev/vdb 61c155e7-265d-4cd9-a5ce-c14ede84a311 20aacd54-0dbc-4ddf-9bb9-078457d7a14e 或者使用名称 openstack server add volume --device /dev/vdb Edge_20260321_maccrt01 Edge_20260321_maccrt01_1添加完成以后可以在虚拟机上查看结果如下[rootedge-20260321-maccrt01 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 100G 0 loop └─docker-252:2-1920-pool 252:4 0 100G 0 dm loop1 7:1 0 2G 0 loop └─docker-252:2-1920-pool 252:4 0 100G 0 dm vda 253:0 0 50G 0 disk ├─vda1 253:1 0 1023M 0 part /boot ├─vda2 253:2 0 14G 0 part / └─vda3 253:3 0 24G 0 part ├─sysos-var_log 252:0 0 4G 0 lvm /var/log ├─sysos-var_tmp 252:1 0 4G 0 lvm /tmp │ /var/tmp ├─sysos-var 252:2 0 8G 0 lvm /var └─sysos-swap 252:3 0 8G 0 lvm [SWAP] vdb 253:16 0 350G 0 disk可以看到已经添加成功了2. 控制虚拟机状态用于虚拟机的日常运维。# 关闭虚拟机 openstack server stop my-compute-instance-01 # 开启虚拟机 openstack server start my-compute-instance-01 # 正常重启虚拟机 openstack server reboot my-compute-instance-01 # 强制重启 (模拟物理机重启键) openstack server reboot --hard my-compute-instance-01 # 强制关闭 (模拟断电) openstack server stop --hard my-compute-instance-01 # 删除虚拟机 (确认后执行无法恢复) openstack server delete my-compute-instance-013. 管理浮动 IP浮动 IP 是一个可以从互联网访问的公网 IP 地址。# 1. 创建一个浮动IP并分配给外部网络 (网络名称通常是 provider-net) FLOATING_IP$(openstack floating ip create -- floating IP pool for public access provider-net -f value -c floating_ip_address) # 2. 关联这个浮动IP到虚拟机 openstack server add floating ip my-compute-instance-01$FLOATING_IP # 3. 从虚拟机上移除浮动IP openstack server remove floating ip my-compute-instance-01 $FLOATING_IP # 4. 删除浮动IP (确保没有虚拟机在使用它) openstack floating ip delete$FLOATING_IP-f value -c floating_ip_address 是让命令只输出 IP 地址本身方便存储到变量中。4. 虚拟机应急模式当虚拟机系统损坏无法启动时可以使用紧急模式。该模式会用一个最小的系统启动让你进入虚拟机修复原系统。# 将虚拟机投入紧急模式 openstack server rescue my-compute-instance-01 # 之后你可以通过 VNC 控制台或救援模式网络接入并修复它 # 修复完成后退出紧急模式 openstack server unrescue my-compute-instance-01网络服务模块network管理虚拟网络的各种资源。1. 创建网络和子网# 创建一个租户私有网络 openstack network create my-private-network # 在该网络上创建一个子网 openstack subnet create \ --subnet-range 192.168.100.0/24 \ --network my-private-network \ --dns-nameserver 8.8.8.8 \ --allocation-pool start192.168.100.10,end192.168.100.200 \ my-private-subnet2. 创建路由器并关联外部网络让私有网络能够访问外部网络。# 创建路由器 openstack router create my-router # 设置路由器的外部网关 (关联到provider-net) openstack router set --external-gateway provider-net my-router # 添加子网接口到路由器 (建立连接) openstack router add subnet my-router my-private-subnet存储服务模块volume管理云硬盘块存储。1. 创建卷# 创建一个 100GB 的空卷 openstack volume create --size 100 my-empty-data-volume # 从一个镜像创建一个 50GB 的系统盘 openstack volume create \ --image a70caee0-3055-4737-b5e7-074b22512a7b \ --size 50 \ my-system-disk-from-image # 从快照创建一个卷 openstack volume create \ --snapshot-id snap-12345 \ --size 80 \ my-volume-from-snapshot个人操作如下创建一个带有操作系统镜像数据的卷后面用来作为虚拟机的系统盘命令如下openstack volume create \ --image a70caee0-3055-4737-b5e7-074b22512a7b \ --size 50 \ --type volume_222 \ Edge_20260321_maccrt01_SystemDisk # 注意 # --image不能写成--image-id这个是旧命令nova boot的 # --type参数可以执行使用的磁盘类型执行结果如下----------------------------------------------------------- | Field | Value | ----------------------------------------------------------- | attachments | [] | | availability_zone | az1.dc1 | | bootable | false | | consistencygroup_id | None | | created_at | 2026-03-21T08:09:20.217143 | | description | None | | encrypted | False | | id | 4360119e-6beb-4e33-9c9d-63301108ccb6 | | migration_status | None | | multiattach | False | | name | Edge_20260321_maccrt01_SystemDisk | | properties | | | replication_status | None | | shareable | False | | size | 50 | | snapshot_id | None | | source_volid | None | | status | creating | | type | volume_222 | | updated_at | None | | user_id | f7794be8538c421a96d49cbf63e8297a | -----------------------------------------------------------下面展示一下详情发现bootable参数默认是true... | bootable | true ...如果不是的话可以执行如下命令设置作为启动系统盘# 将带有操作系统数据的云磁盘设置为可启动 openstack volume set --bootable Edge_20260321_maccrt01_SystemDisk接下来的目的一般是创虚拟机先查询一下规格的id系统盘的id主机组信息等执行如下命令创建虚拟机# 查询自己想要设置的规格 Host1-I0719-2U-Slot03:~ # openstack flavor list | grep Edge_12 | 198ef143-c731-4afb-8fb6-ba1f394bb1ca | Edge_12U40G_X86 | 803bed13-6ed8-48d8-a759-d18ccc08bd2a | Edge_12U56G # 查询网络信息 Host1-I0719-2U-Slot03:~ # openstack network list --------------------------------------------------------------- | ID | Name --------------------------------------------------------------- | 014e8711-1abf-4fc6-9d6c-7bc1b939f724 | external_om | 0e7e9f55-0bd9-49ca-b904-d95b3e7e78fc | internal_base | 38ac2da1-992b-47e9-afba-bf13cb920023 | OP_External_176 | 3f05ceff-fe67-4bde-81dd-be8e93561ace | GC_APPOM_170 | 721a9d67-0bf3-4ec0-9dc3-29bc39833870 | OP_Service_175 | 767c5153-ed3f-40ea-9327-7cf38cf5b009 | GC_OM_174 | ab352644-db52-430e-86d3-0b9f114f0f04 | GC_Servcie_External_173 | c98780d0-3a21-4e0a-a2dc-ba1c0b35cfa3 | OP_OM_85 | dc95beb9-aac9-48d6-a0ef-b74f3d9b548b | GC_Extertal_171 | e3419e8e-6d42-474d-8cfa-dd70afb30b53 | GC_Service_172 | eb84deae-f4ce-4e94-9ca4-7383bcb2b5b3 | OP_APPOM_86 | f11af4b4-4f53-4361-9409-4ed0ce2832f4 | OP_ServiceExternal_177 --------------------------------------------------------------- # 以使用GC_OM_174为例 # 创建虚拟机 openstack server create \ --flavor Edge_12U56G \ --volume 4360119e-6beb-4e33-9c9d-63301108ccb6 \ --nic net-id767c5153-ed3f-40ea-9327-7cf38cf5b009 \ --hint Edge_hostgrouptrue \ Edge_20260321_maccrt01 ------------------------------------------------------------ | Field | Value ------------------------------------------------------------ | OS-DCF:diskConfig | MANUAL | OS-EXT-AZ:availability_zone | az1.dc1 | OS-EXT-SRV-ATTR:host | None | OS-EXT-SRV-ATTR:hypervisor_hostname | None | OS-EXT-SRV-ATTR:instance_name | instance-00002503 | OS-EXT-STS:power_state | NOSTATE | OS-EXT-STS:task_state | scheduling | OS-EXT-STS:vm_state | building | OS-SRV-USG:launched_at | None | OS-SRV-USG:terminated_at | None | accessIPv4 | | accessIPv6 | | addresses | | adminPass | None | config_drive | | created | 2026-03-21T09:00:20Z | flavor | Edge_12U56G (803bed13- | hostId | | id | 61c155e7-265d-4cd9-a5c | image | | key_name | None | name | Edge_20260321_maccrt01 | progress | 0 | project_id | 6f0898eb96654d6cb6af87 | properties | | security_groups | namedefault | status | BUILD | updated | 2026-03-21T09:00:20Z | user_id | f7794be8538c421a96d49c | volumes_attached | ------------------------------------------------------------2. 管理卷# 列出所有卷 openstack volume list # 查看某个卷的详情 openstack volume show my-system-disk-from-image # 删除一个卷 openstack volume delete my-empty-data-volume3. 管理快照# 从一个正在使用的卷上创建快照 openstack volume snapshot create \ --volume my-system-disk-from-image \ --name backup-2023-10-27 # 列出所有快照 openstack volume snapshot list镜像服务模块image管理虚拟机镜像。1. 上传镜像可以从 OpenStack 格式的镜像文件如 .qcow2, .raw等上传镜像。 # 示例从本地文件上传一个镜像文件 # --disk-format 指定镜像格式 # --container-format 指定容器格式 (bare, ovf, etc) # --public 指定为公共镜像 # --min-disk 指定运行该镜像所需的最小磁盘大小 # --min-ram 指定运行该镜像所需的最小内存大小 openstack image create \ --file /path/to/my-image.qcow2 \ --disk-format qcow2 \ --container-format bare \ --public \ --min-disk 20 \ --min-ram 2048 \ my-custom-image基础资源和安全管理1. 密钥对# 添加一个新的SSH密钥对 openstack keypair add --public-key-file ~/.ssh/id_rsa.pub my-key-pair # 列出所有密钥对 openstack keypair list # 删除一个密钥对 openstack keypair delete my-key-pair # 注意--public-key-file 后面跟的是公钥文件的路径。2. 安全组安全组是虚拟机的虚拟防火墙。# 列出所有安全组 (默认属于当前项目) openstack security group list # 创建一个新的安全组 openstack security group create --description For web servers web-sg # 给安全组添加规则 (允许SSH访问) openstack security group rule create --protocol tcp --dst-port 22:22 web-sg # 给安全组添加规则 (允许HTTP访问) openstack security group rule create --protocol tcp --dst-port 80:80 web-sg # 给安全组添加规则 (允许ICMP, 用于Ping) openstack security group rule create --protocol icmp web-sg # 移除规则 openstack security group rule delete rule_id3. 规格# 列出所有可用的虚拟机规格 openstack flavor list辅助和全局命令1. 查看当前身份信息显示你当前的认证凭证Token、项目 ID、用户名等便于确认你当前是以哪个身份在操作。openstack token issue2. 项目管理 (管理员)注意这些命令通常只有管理员才能执行。# 列出所有项目 openstack project list # 创建新项目 openstack project create \ --domain domain-name \ --description My new project \ new-project-name3. 用户管理 (管理员)# 列出所有用户 openstack user listFAQ1、怎么切换到执行的项目下创建虚拟机呢好的这个问题非常经典是 OpenStack 日常运维中的核心操作之一如何在多个项目租户之间切换执行操作。 您当前的输出显示您正在操作的项目是 dc_system_dc1 bash OS_PROJECT_NAMEdc_system_dc1 而您想要切换到 Service_VPC 项目其 ID 为 8b2826629dd0402283d5d2b23bb58cd0。 核心方法使用 openstack project set 命令 这是在当前命令行会话中切换项目的标准方法。它会修改您的环境变量使后续的 openstack 命令都自动在新指定的项目下执行。 命令格式 bash openstack project set --project 目标项目的ID或名称 目标项目的名称 --project ID|名称指定您想要切换到的目标项目可以通过ID也可以通过名称指定。 名称命令的最后一个参数明确指出您要设置成哪个项目。 操作步骤 步骤 1使用项目名称执行切换 这是最直观的方法通过 Service_VPC 这个名称来切换。 bash openstack project set --project Service_VPC Service_VPC 命令执行后不会有任何输出这是一个正常的特征。 步骤 2验证切换是否成功 再次查看当前的环境变量如果切换成功OS_PROJECT_NAME 的值就会变成 Service_VPC。 bash echo ${OS_PROJECT_NAME} 预期输出 Service_VPC 或者更完整一点用 OpenStack 官方推荐的方式查看当前令牌信息 bash openstack token issue 在输出结果的 Project Name 栏您会看到 Service_VPC。 为什么需要这样做 让我们来理解一下背后的原理。 环境变量当您第一次通过 openstack CLI 登录 OpenStack 时CLI 会将您的认证信息如用户名、密码、项目、域等保存在一系列以 OS_ 开头的环境变量中。 作用域这些环境变量的作用域是当前终端/Shell 会话。您打开一个新的终端这些变量就必须重新设置通常通过执行 source 脚本。 命令的上下文当您运行 openstack server create 或 openstack volume list 这样需要操作资源的命令时OpenStack CLI 会读取这些 OS_ 环境变量从而知道您是以哪个身份哪个项目下的哪个用户去执行操作的。 openstack project set 命令的原理就是直接修改了内存 OS_PROJECT_NAME 这个环境变量的值。因此它是一条瞬时生效的“隐身衣”让您看起来仿佛直接登录到了 Service_VPC 项目下而您实际上依然是通过同一个认证凭证在操作。 总结与最佳实践 核心命令openstack project set --project 项目名称 项目名称 效果无缝切换当前终端的操作项目所有后续 openstack 命令都在新项目下生效。 验证使用 echo ${OS_PROJECT_NAME} 或 openstack token issue 来确认当前项目。 重要提示这个切换只在当前终端会话内有效。如果您关闭了终端这些修改会丢失。下次需要操作 Service_VPC 项目时需要重新执行一遍这个切换命令。 现在您就可以在这个终端里安心地创建属于 Service_VPC 项目的云硬盘、网络和虚拟机了而不用担心会误操作到 dc_system_dc1 下的资源。
返回列表