OpenStack命令行参考

hello,大家好,这里是费冰。在使用OpenStack的过程中,固然我们可以通过 web 页面完成绝大多数的操作,但作为管理人员,不能不知晓 OpenStack 命令行的有关知识。

OpenStack 是一个开源的公有云和私有云的云计算平台,一系列的相关项目提供了一套云基础设施的解决方案。当我们提及OpenStack命令时,一般指两种命令。

其一,OpenStackClient 项目提供了一个统一的命令行客户端,它使我们能够通过易于使用的命令访问项目API,创建和管理OpenStack中的资源。

其二,大多数的OpenStack项目为每个服务提供了一个命令行客户端,我们可以通过项目命令来创建和管理项目中的有关资源。

在命令行或脚本中执行命令之前,我们必须提供 OpenStack 凭据,这些命令才能够成功运行。

在使用 OpenStack API 前,我假设你熟悉 HTTP, RESTful Web服务,OpenStack服务和JSON或XML数据序列化格式。

约定

本文档使用多种排版约定。

其实是我用这个语雀还不太熟,这和markdown还不太一样,很多语法不是共通的,而且显示代码块也不是我常用的格式,那么为了阅读不烧cpu。作以下约定。

这里是代码,比如说
openstack --version

为了方便理解和阅读,在介绍每个命令时,会在其后给出示例。

[root@controller ~]# openstack --version    # 这里是演示的代码
openstack 5.4.0 #这里是代码的输出

并且,在命令中的大写字段为需要替换的在实际环境中的具体字段。

本文档参考了无名小歌的博客,以下是博客原文。

【收藏级】88条关于OpenStack命令的手册(常看常新)

显示OpenStack客户端版本号

为了查看 openstack 客户端版本号,运行以下命令:

openstack --version

示例

[root@controller ~]# openstack --version
openstack 5.4.0

认证(keystone)

列出所有的用户

openstack user list

示例

列出认证服务目录

openstack catalog list

列出可用服务

openstack service list

创建用户

openstack user create --domain Default --password PASSWORD USERNAME

将项目和用户加入到角色中

openstack role add --project PROJECTNAME --user USERNAME ROLE

创建服务实体

openstack service create --name NAME --description “DESCTIPTION” SERVICE

创建 API 端点

OpenStack使用三个API端点来代表每种服务:admin, internal 和 public。默认情况下,管理API端点允许修改用户和租户而公共和内部API不允许这些操作。

openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller:5000/v3

public代表公共地址,internal表示组件内部地址,admin则是管理员地址

查看用户信息

openstack user show USERNAME

列出所有的端点地址

openstack endpoint list

列出当前用户的token

openstack token issue

在openstack中,运行命令行前都必须通过身份验证,否则命令将无法正常运行。

一般想要通过身份验证,我们需要提供以下信息

  • username 用户的名称
  • user_domain_name 用户域的名称
  • password 用户的密码
  • project_name 项目名称
  • project_domain_name 项目域的名称
  • auth_url Keystone认证服务的API地址
  • identity_api_version 应始终设置为3

我们一方面可以将这些值作为变量传递给openstack命令行,另一方面可以在环境中设置这些变量,显然在环境中设置更为简便,无需每次使用命令行都声明这些变量。

我们可以编写如下所示的环境变量文件,在系统中加载以便快速通过认证。

 export OS_USERNAME=my_username
export OS_USER_DOMAIN_NAME=my_user_domain
export OS_PASSWORD=my_password
export OS_PROJECT_NAME=my_project
export OS_PROJECT_DOMAIN_NAME=my_project_domain
export OS_AUTH_URL=http://localhost:5000/v3
export OS_IDENTITY_API_VERSION=3

镜像服务(glance)

glance在openstack中提供镜像服务,glance中的镜像可以处于以下几种状态之一:

  • queued glance服务已经创建了镜像的注册表,但是并没有上传实体镜像,这时候镜像大小为0。
  • saving 表示镜像的原始数据正在上传至glance,需要注意的是,当镜像通过调用 post/images注册并且提供了“x-image-meta-location”信息头,则该镜像不会处于saving状态,因为镜像数据已经在其他的可用位置。
  • uploading 表示已经进行导入镜像的过程中
  • importing 表示已经进行导入调用,但是镜像尚未准备就绪供使用
  • active 表示在glance中完全可用的镜像
  • deactivated 表示不允许任何非管理员访问镜像。
  • killed 表示上传镜像数据时发生错误,并且镜像不可读。
  • deleted glance保留了镜像的信息,但是不再可供使用,该镜像将会在指定的日期自动删除。
  • pending_delete 类似于删除,但是glance尚未删除镜像数据,该状态下镜像不可恢复。

列出镜像

openstack image list

查看镜像详细信息

openstack image show 镜像id/name

上传镜像

openstack image create cirros --disk-format qcow2 --container-format bare --public --file cirros-0.6.1-x86_64-disk.img

参数说明:

  • disk-format: 磁盘格式,可选项有 raw, vhd, vhdx, vmdk, vdi, iso, ploop qcow2
  • container-format: 容器格式,可选项有bare, ovf, aki, ari, ami, ova, docker, compressed
  • --file 指定上传的镜像文件
  • --public 指定镜像的访问权限,public表示公开可用,也可以设置为--private | --community | --shared

更新镜像

openstack image set 镜像id/name 镜像属性

示例,修改镜像cirrors的最小启动ram和最小启动磁盘

openstack image set cirrors --min-ram 1 --min-disk 2

删除镜像

openstack image delete 镜像id/name

镜像下载

openstack image save 镜像id/name --file 镜像保存文件

网络服务(neutron)

网络服务管理一般需要管理员对网络知识作相应了解,例如BGP动态录有,DHCP分发服务,浮动IP端口转发等等,这里我列举几个常用的命令。

网络创建有太多的参数可用,就留给各位补充吧。

创建内部网络

openstack network create NETWORK --internal

创建外部网络

openstack network create NETWORK --external

可选参数补充:

  • provider-network-type:虚拟网络类型,例如flat,geneve,gre,vlan,vxlan
  • privider-physical-network 物理网络名称
  • project 所属的项目

创建网络子网

openstack subnet create SUBNETNAME --subnet-range 192.168.10.0/24 --gateway 192.168.10.2 --network NETWORK

参数说明:

  • subnet-range:子网范围
  • gateway: 指定子网的网关
  • network:指定子网所属的网络

列出所有网络

openstack network list

查看网络详细信息

openstack network show NETWORK

删除网络

openstack network delete NETWORK

如果删除网络前,删除的网络被占用,则删除失败。

创建路由器

openstack router create ROUTER

设置路由器外部网络

openstack router set ROUTER --external-gateway NETWORK --fixed-ip subnet=SUBNET,ip-address=192.168.10.10

其中,

  • external-gateway 用作路由器的外部网络
  • fixed-ip 路由器的外部网络ip地址

设置路由器内部网络

openstack router add subnet ROUTER SUBNET

列出所有路由器

openstack router list

查看路由器详细信息

openstack router show ROUTER

删除路由器

openstack router delete ROUTER

计算服务(NOVA)

列出所有云主机类型

openstack flavor list

创建云主机类型

openstack flvaor create FLAVOR --ram 1024 --disk 10 --vcpu 2

参数说明:

  • id 指云主机类型的id,默认创建uuid
  • ram 指内存大小,单位为MB ,不指定时默认值为256M
  • disk 磁盘大小,单位为GB,默认值为0
  • vcpu cpu数量,默认为1
  • ephemeral 指临时磁盘,单位为GB,默认为0
  • swap 指swap磁盘,单位为MB
  • rxtx-factor 指rx/tx因子,默认为1.0
  • public 云主机类型的权限,public为公开可用,private则为不共享
  • project 指定一个项目共享云主机类型,必须和private参数同时使用

查看云主机类型详细信息

openstack flavor show FLAVOR

列出所有安全组

openstack security group list

查看安全组中的规则

openstack security group rule list 安全组id/name

查看安全组规则的详细信息

openstack security group rule show 规则id

创建安全组

openstack security group create 安全组name

删除安全组

openstack security group delete 安全组id/name

删除安全组规则

openstack security group rule delete 规则id

在安全组中添加规则

安全组规则非常多,常见的有icmp,tcp,udp,dns等等。

安全组规则在添加时需要指定方向,分为入口(ingress)和出口(egress)。

添加安全组规则时还需要选择策略类型,指定如icmp,igmp,tcp,udp的一种。

安全组规则当然还可以指定端口范围或ip,当你需要指定端口范围时,使用dst-port参数,当你需要指定ip时,使用remote-ip参数。需要说明的是,如果你希望指定一个端口,那么dst-port的参数可用是这样 22:22,这就指定22端口。

以下演示从入口方向放行所有icmp,tcp,udp规则

openstack security group rule create --protocol icmp --ingress 安全组name/id
openstack security group rule create --protocol tcp --ingress 安全组name/id
openstack security group rule create --protocol udp --ingress 安全组name/id

创建云主机

openstack server create --image 镜像id/name --flavor 云主机类型name/id --network 网络name/id 云主机name

参数说明:

  • image 使用的镜像
  • flavor 创建云主机应用的云主机类型
  • network 将创建的云主机连接到的网络

更多可用参数不一一列举。

列出云主机

openstack server list

查看云主机的控制台日志

openstack console log show 云主机name/id

显示云主机的远程控制台 URL

openstack console url show 云主机name/id

云主机的重启,关机,启动,暂停,取消暂停

说实话我很难区分暂停,挂起,释放。我相信你也是一样,所以让我来解释一下。

暂停,是指将虚拟机的状态保存到内存,暂停中的虚拟机仍然以冻结状态运行。

挂起,这是虚拟机管理器级别的操作,是指将虚拟机的内存保存到磁盘中,会释放虚拟机在宿主机中的资源,由libvirt完成该操作。内存信息会被保存到 /var/lib/libvirt/qemu/save/ 下。当再次启动该虚拟机时,会从该目录下使用内存文件启动,启动完成后,该文件会自动消失。

释放,也叫搁置,目的时将长时间不使用的虚拟机从底层释放从而节约服务器资源。一些长时间不使用的虚拟机,即使处于关机状态,仍然会占用集群资源,因此可用释放来释放资源。

如果虚拟机使用glance镜像创建,则创建一个快照并存储至glance,然后将虚拟机占用的资源从集群中删除;如果虚拟机从cinder存储中创建,则删除虚拟机占用的物理资源但保留磁盘,磁盘状态为保留。

openstack server reboot 云主机name/id
openstack server stop 云主机name/id
openstack server start 云主机name/id
openstack server pause 云主机name/id
openstack server unpause 云主机name/id

云主机的挂起,取消挂起

openstack server suspend 云主机name/id
openstack server resume 云主机name/id

云主机的释放和取消释放

openstack server shelve 云主机name/id
openstack server unshelve 云主机name/id

云主机创建快照

在创建云主机快照时,云主机状态应为关机。

openstack server image create 云主机name/id --name 快照name

如果不指定--name,则默认使用云主机name作为快照name

调整云主机大小

你需要确定nova中配置了scheduler_default_filters参数。

openstack server resize 云主机name/id --flavor 云主机类型name/id
openstack server resize --confirm 云主机名称

云主机挂载云硬盘

openstack server add volume 云主机name/id 磁盘id/name

创建密钥对

openstack keypair create test

可用重定向将输出结果导入到文件中。

创建云主机使用密钥对

openstack server create --image cirros --flavor os --key-name test 云主机name

这里的key-name参数指定的就是密钥对。

使用密钥连接云主机

ssh -i test.pem cirros@172.17.0.1

这里的test.pem就是创建密钥对时,将输出重定向保存的文件。

创建浮动ip

openstack floating ip create 网络name/id --floating-ip-address 172.17.0.1

如果不指定floating-ip-address,则由dhcp服务自动分发ip。

云主机绑定浮动ip

openstack server add floating ip 云主机name/id 浮动ip地址

例如:

openstack server add floating ip cirros 172.17.0.2

块存储(cinder)

显示所有卷

openstack volume list

创建新卷

openstack volume create 卷name --size 1 --type __DEFAULT__

参数说明:

  • size 指定卷大小,单位为GB,此为必须参数
  • type 指定卷类型
  • read-only 指定卷为只读,默认情况下为可读写
  • image 将镜像作为卷资源添加至卷中

创建卷类型

openstack volume type create 卷类型name

将卷连接到云主机

openstack server add volume 云主机name/id 卷name/id

可选参数:

  • device 指定卷内部名称
  • enable-delete-on-termination 意思是云主机被清除后删除卷
  • disable-delete-on-termination 云主机被清除后保留卷

扩展卷

在卷状态为 available的前提下。

openstack volume set 卷name/id --size 调整的大小

实际上set可以更新很多volume的属性,以下是部分可选参数。

  • name 设置卷name
  • size 以GB为单位设置卷大小
  • type 设置卷类型

对象存储(swift)

在开始之前,你需要自行了解什么是对象存储,以及对象存储是如何存储数据的。

创建容器

openstack container create 容器name

列出容器

openstack container list

查看容器详细信息

openstack container show 容器name/id

创建对象,上传对象

openstack object create create 容器name/id 文件name/id

列出容器中的对象

openstack object list 容器name/id

查看对象详情

openstack object show 容器name/id 对象name/id

从容器中下载对象

openstack object save 容器name/id 对象name/id

删除对象

openstack object delete 容器name/id 对象name/id

删除容器

openstack container delete 容器name/id

只能删除空容器

递归删除容器

openstack container delete 容器name/id -r

参数说明:

  • r 是recursive的简写,指先删除容器内存储的对象,再删除容器本身

模板编排服务(heat)

orchestration服务可以实现对多个组合云应用的编排,这个服务支持通过REST API 使用原生HOT模板。

这些灵活的模板语言使应用程序开发人员能够借以描述openstack的资源类型,如实例,浮动ip地址,卷,安全组,用户等等。这些资源一旦创建,将被称为stacks,可以通过heat服务加以管理。

编排创建cinder卷

$ cat cinder.yaml
heat_template_version: "2018-08-31"
resources:
Volume_1:
type: "OS::Cinder::Volume"
properties:
name: heat_cinder1
size: 2
volume_type: "__DEFAULT__"
#创建堆栈,并创建volume
openstack stack create -t cinder.yaml cinder-1

编排创建swift容器

$ cat swift.yaml
heat_template_version: "2018-08-31"
resources:
Container_1:
type: "OS::Swift::Container"
properties:
name: heat_swift
"X-Container-Write": true #创建堆栈,并创建swift
$ openstack stack create -t swift.yaml swift-1(栈名称)

编排创建network和subnet

heat_template_version: "2018-08-31"
resources:
Network_1:
type: "OS::Neutron::Net"
properties:
admin_state_up: true
name: Heat_Network
shared: true
Subnet_1:
type: "OS::Neutron::Subnet"
properties:
name: "Heat-Subnet"
ip_version: 4
cidr: "172.17.0.0/24"
network_id:
get_resource: Network_1 # #创建堆栈,并创建网络
$ openstack stack create -t network.yaml network(栈名称)

编排创建flavor

$ cat falvor.yaml
heat_template_version: "2018-08-31"
resources:
Nova_flavor:
type: OS::Nova::Flavor
properties:
name: os.flavor
disk: 20
is_public: True
ram: 1024
vcpus: 2 # 创建堆栈,并创建falvor
$ openstack stack create -t falvor.yaml flavor

编排创建云主机

$ cat server.yaml
heat_template_version: "2018-08-31"
resources:
Server_1:
type: "OS::Nova::Server"
properties:
networks:
- network: "Heat_Network"
flavor: "os.flavor"
name: Heat_Server
image: "cirros-0.6.1-x86_64-disk.img" # #创建堆栈,并创建server
$ openstack stack create -t server.yaml server(栈名称)

编排创建user

$ cat user.yaml
heat_template_version: "2018-08-31"
resources:
user:
type: OS::Keystone::User
properties:
name: "Heat-User"
password: "123456"
domain: "default"
default_project: "admin"
roles: [{"role": admin, "project": admin}] # 创建堆栈,并创建user
$ openstack stack create -t user.yaml user(栈名称)

列出所有堆栈

openstack stack list

列出堆栈详细信息

openstack stack show 堆栈name/id

删除堆栈

openstack stack delete 堆栈name/id -y

文件共享服务(manila)

openstack共享文件系统服务manila为虚拟机提供文件存储,简单点说,和云盘差不多,但是这是一个专用于虚拟机的云盘。

在开始之前,我浅浅的解释一下什么是DHSS。在部署manila时,有两个驱动模式可选,其一是不使用驱动程序来支持共享服务器的管理,在这种模式下,需要部署nfs服务器和一块manila卷组的附加磁盘,这种模式称为DHSS=False模式;其二,选择将manila与管理共享服务器的后端驱动程序一起运行,因此需要安装nova,glance,neutron一同管理的驱动程序,和块存储服务cinder来创建共享,

这种模式称为DHSS=True模式。

在官方示例中,为简单期间,配置使用DHSS=False模式。但是个人觉得DHSS=True的配置更为简单,仅仅只是配置项多了一部分,换来集中的管理和磁盘的节约,并且在某些发行版中,manila服务无法正确运行LVM驱动程序。

创建禁用DHSS的默认共享类型

manila type-create default_share_type False

列出共享类型

manila type-list

创建共享目录

manila create NFS 1 --name 共享名称

参数说明:

  • share_protocol 共享协议(NFS,CIFS,CephFS,GlusterFS,HDFS,MAPRFS)
  • size 共享大小,单位为GB
  • --name 共享名称

列出共享目录

manila list

查看共享目录详情

manila show 共享名称

允许访问共享目录

manila access-allow 共享name/id ip 172.17.0.0/24

参数说明:

  • share 共享的名称或者是id
  • access_type 访问规则类型,仅限于ip,user,支持cert或cephx
  • access_to 定义访问的网段ip
  • access-level 定义共享访问权限,rw,ro均受支持,不指定时,默认为rw。

查看共享目录权限和开放网段

manila access-list 共享name/id

挂载共享目录

manila show 共享name/id |grep path

计算节点挂载共享目录

mount -t nfs 172.17.0.1:/path /mnt/

OpenStack命令行参考的更多相关文章

  1. OpenStack 命令行速查表

    OpenStack 命令行速查表   updated: 2017-07-18 08:53 Contents 认证 (keystone) 镜像(glance) 计算 (nova) 实例的暂停.挂起.停止 ...

  2. OpenStack命令行工具与API

    Openstack命令行工具 我们推荐Openstack命令行工具和Openstack的Dashboard两者结合使用.一些用户由于使用过其他云技术背景的,可能会使用EC2兼容的API,相对于我们需要 ...

  3. openstack 命令行管理 - 目录

    原文http://blog.csdn.net/signmem/article/details/19513775 相关 openstack  命令行管理, 分下面部分进行介绍 openstack 命令行 ...

  4. openstack命令行

    openstack的每一个子项目(project)都有自己对应的命令行API,所有的这些API都是基于RESTful的,python代码实现的API.也就是说,这些API都是基于HTTP实现的,所以A ...

  5. Net 服务命令行参考之一

    转自:http://blog.sina.com.cn/s/blog_55035e9501015p05.html ----------------------------------最实用高效的网络管理 ...

  6. Openstack命令行创建不同vlan段虚拟机

    默认使用nova-network的vlan模式,但是在使用默认的dashboard的时候,不能指定创建的虚拟机的使用网段,固定IP地址. 实际上该功能是在存在的,只是openstack的dashbbo ...

  7. Openstack命令行删除虚拟机硬件模板flavor

    openstack中,有一种概念叫flavor,其实flavor就是一种创建虚拟机的硬件尺寸模板化.比如我先创建一个flavor,该flavor包含的CPU数目,内存大小,硬盘大小都预先设置好,在创建 ...

  8. openstack操作之一 命令行

    在openstack环境中提供了多种操作虚拟机的方法,有最简单直接的dashborad界面,有不直观但高效的命令行,还有进阶版的postman调用openstack restfulapi和命令行中使用 ...

  9. Windows 命令行切换目录

    Windows 命令行切换目录 特别注意:切换到其它盘符不需要 cd 命令 1. 切换到 C 盘根目录 打开终端 cmd 后,输入cd C:\(一定要加上后面的反斜扛) 2.切换到 C 盘子目录 打开 ...

  10. 使用openssl在命令行加密

    对于需要在应用软件中进行加密编程的开发者,通过命令行把基本的加密操作做一遍是很有意义的.openssl支持在命令行进行各种基本加密算法的操作.这些操作过程无需编程,其命令参数与程序函数调用加密的参数有 ...

随机推荐

  1. ISCTF2022WP

    ISCTF2022改名叫套CTF吧(bushi),博主菜鸡一个,套题太多,挑一些题写下wp,勿喷. MISC 可爱的emoji   下载下来是个加密压缩包,根据hint掩码爆破密码 得到密码:KEYI ...

  2. networkQuality

    基本使用 networkQuality 是一个命令行工具,需要使用「终端」App(或者你首选的其他终端模拟器)运行.方法是: 首先,点按「程序坞」(Dock)中的「启动台」(LaunchPad)图标, ...

  3. Jenkins发版通知企业微信机器人

    1)开始通知 在Jenkins发版过程的第一步添加下面内容,调用下面脚本实现机器人发版通知(注意脚本路径和传参) ${BUILD_USER}是Jenkins内置变量,执行发布的用户名,需要安装插件-B ...

  4. 直播CDN调度技术关键挑战与架构设计

    作者:胡济麟 1.背景介绍 1.1 直播业务特点 互联网视频直播是一种消息媒介形态,提供时产时消的内容,经过多年,已经发展出秀场.游戏.电商.体育等多种业务形态.主要特点是:内容实时产生实时消费,对时 ...

  5. webrtc编译,不使用内置boringssl,使用openssl的

    前言 在项目开发过程中,会遇到使用https.TLS.DTLS等场景,这些第三方库一般会使用openssl作为加密套件.例如,qt中加密套件就会使用openssl,但是webrtc会默认使用borin ...

  6. 一次MTU问题导致的RDS访问故障

    导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起.IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性.但是VPN网络经常会带来一些连通性 ...

  7. 除了 filter 还有什么置灰网站的方式?

    大家都知道,当一些重大事件发生的时候,我们的网站,可能需要置灰,像是这样: 当然,通常而言,全站置灰是非常简单的事情,大部分前端同学都知道,仅仅需要使用一行 CSS,就能实现全站置灰的方式. 像是这样 ...

  8. windows通过sshfs挂载linux目录

    之前讲过一种方法,PC跟VM在同局域网的情况下,可以用samba的方式挂载linux系统的目录到windows上.但是当PC跟VM不同局域网时这种方式就没办法了. 网络环境 在示意图中,PC只能直连物 ...

  9. 学习.NET MAUI Blazor(三)、创建.NET MAUI Blazor应用并使用AntDesignBlazor

    大致了解了Blazor和MAUI之后,尝试创建一个.NET MAUI Blazor应用. 需要注意的是: 虽然都叫MAUI,但.NET MAUI与.NET MAUI Blazor 并不相同,MAUI还 ...

  10. [OpenCV实战]13 OpenCV中使用Mask R-CNN进行对象检测和实例分割

    目录 1 背景介绍 1.1 什么是图像分割和实例分割 1.2 Mask-RCNN原理 2 Mask-RCNN在OpenCV中的使用 2.1 模型下载 2.2 模型初始化 2.3 模型加载 2.4 输出 ...