Menu

  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

OpenStack学习笔记

19
Jan
2018

OpenStack学习笔记

By Alex
/ in IaaS
/ tags 学习笔记
1 Comment
简介

OpenStack是一个开源的IaaS解决方案,使用它,你可以通过仪表盘或者利用OpenStack API控制/Provision大规模的计算、存储、网络资源池。

通过“驱动”,OpenStack支持大量商业、开源的计算、存储、网络相关技术框架,从而能够管理各种各样的基础设施。不管是裸金属机器、虚拟机、还是容器,都可以基于OpenStack进行管理,并共享网络、存储等底层资源:

Kubernetes、CloudFoundry等PaaS平台可以构建在OpenStack之上。

项目组成

OpenStack由若干子项目组成,它们围绕着计算、存储、网络这三个核心概念组织:

  1. 计算:提供并管理网络中大量的虚拟机,主要由Nova子项目负责
  2. 存储:供服务器、应用程序使用的对象存储、块存储,分别由Swift、Cinder子项目负责
  3. 网络:可拔插、可扩容、API驱动的网络和IP管理

这三类子项目还具有一些共享的服务:identity、镜像管理(image management)、一个基于Web的UI接口。

总览图

OpenStack项目的总览图如下,其中粗体标出了它的核心子项目,包括Horizon、Heat、Nova、Neutron、Swift、Cinder等:

服务交互

以Bigdata as Service场景为例,各子项目的交互关系如下图:

简单的说明一下:

  1. Keystone提供身份验证服务
  2. Ceilometer提供监控服务
  3. Horizon提供一个管理UI
  4. Nova负责分配虚拟机
  5. Glance提供镜像服务,镜像文件存放在Swift中
  6. Cinder为虚拟机提供块存储卷
  7. Cinder将卷备份到Swift中
  8. Neuron为虚拟机提供网络连接

每个子项目,或者叫OpenStack服务,都通过公共的Identity Service进行身份验证,服务之间通过公共API进行交互。每个服务至少包含一个API进程,此进程监听API请求,进行预处理然后转交给服务的其它部分进行处理。

每个服务可以有多个进程,这些进程之间的通信方式通常是AMQP。服务的状态持久化在数据库中。多种消息代理、RDBMS被支持,例如RabbitMQ、MySQL、MariaDB。

客户端访问

用户访问OpenStack的方式有几种:

  1. 通过Horizon提供的Web仪表盘
  2. 提供CLI客户端
  3. 提供SDK进行编程

不管是何种方式,在底层都会向不同的OpenStack服务发送REST请求。

组件简介
Nova

Nova是OpenStack云中的计算组织控制器。支持OpenStack云中实例(instances)生命周期的所有活动都由Nova处理。这样使得Nova成为一个负责管理计算资源、网络、认证、所需可扩展性的平台。

Neutron

Neutron是openstack核心项目之一,提供云计算环境下的虚拟网络功能。OpenStack网络(neutron)管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础设施(PNI)的接入层。

Cinder

Cinder接口提供了一些标准功能,允许创建和附加块设备到虚拟机,如“创建卷”,“删除卷”和“附加卷”。还有更多高级的功能,支持扩展容量的能力,快照和创建虚拟机镜像克隆。

Octavia

Octavia 是 openstack lbaas的支持的一种后台程序,提供为虚拟机流量的负载均衡。实质是类似于trove,调用 nova 以及neutron的api生成一台安装好haproxy和keepalived软件的虚拟机,并连接到目标网路。

Swift

Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据。这些数据可以检索、调整和必要时进行更新。Swift最适合虚拟机镜像、图片、邮件和存档备份这类数据的存储。

Glance

Glance(OpenStack Image Service)是一个提供发现,注册,和下载镜像的服务。Glance提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(比如 OpenStack Swift)。

Horizon

Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizon 所提供的 DashBoard 服务 , 管理员可以使用通过 WEB UI 对 Openstack 整体云环境进行管理 , 并可直观看到各种操作结果与运行状态。

Ironic

Ironic包含一个API和多个插件,用于安全性和容错性地提供物理服务器。它可以和nova结合被使用为hypervisor驱动,或者用bifrost使用为独立服务。默认情况下,它会使用PXE和IPMI去与裸金属机器去交互。Ironic也支持使用供应商的插件而实现额外的功能。

Cyborg

Cyborg(以前称为Nomad)旨在为加速资源(即FPGA,GPU,SoC, NVMe SSD,DPDK/SPDK,eBPF/XDP …)提供通用管理框架。

Kolla

kolla 的使命是为 openstack 云平台提供生产级别的、开箱即用的交付能力。kolla 的基本思想是一切皆容器,将所有服务基于 Docker 运行,并且保证一个容器只跑一个服务(进程),做到最小粒度的运行 docker。

Kuryr

Kubernetes Kuryr是 OpenStack Neutron 的子项目,其主要目标是通过该项目来整合 OpenStack 与Kubernetes 的网络。该项目在 Kubernetes 中实现了原生 Neutron-based 的网络,因此使用 Kuryr-Kubernetes 可以让你的 OpenStack VM 与 Kubernetes Pods 能够选择在同一个子网上运作,并且能够使用 Neutron 的 L3 与 Security Group 来对网络进行路由,以及阻挡特定来源 Port。

Manila

Manila项目全称是File Share Service,文件共享即服务,用来提供云上的文件共享,支持CIFS协议和NFS协议。

Tacker

Tacker是一个在OpenStack内部孵化的项目, 他的作用是NVF管理器,用于管理NVF的生命周期。Tacker的重点是配置VNF, 并监视他们。如果需要,还可重启和/或扩展(自动修复)NVF。整个进程贯穿ETSIMANO所描述的整个生命周期。

命令
openstack
configuration

显示详细配置信息:

Shell
1
2
# --unmask表示明文显示密码
openstack configuration show [--mask | --unmask]
domain

一个Domain,是用户、组、项目的集合。任何组、项目仅仅属于单个Domain。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
openstack domain create
    [--description <description>]
    [--enable | --disable]
    [--or-show]
    # 禁止删除或修改,除非去掉此标记
    [--immutable | --no-immutable]
    <domain-name>
 
openstack domain delete <domain> [<domain> ...]
 
openstack domain list
    [--sort-column SORT_COLUMN]
    [--name <name>]
    [--enabled]
 
openstack domain set
    [--name <name>]
    [--description <description>]
    [--enable | --disable]
    [--immutable | --no-immutable]
    <domain>
 
openstack domain show <domain>
project

管理项目

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
openstack project create
    [--domain <domain>]
    [--parent <project>]
    [--description <description>]
    [--enable | --disable]
    [--property <key=value>]
    [--or-show]
    [--immutable | --no-immutable]
    [--tag <tag>]
    <project-name>
 
openstack project delete [--domain <domain>] <project> [<project> ...]
 
openstack project list
    [--sort-column SORT_COLUMN]
    [--domain <domain>]
    [--parent <parent>]
    [--user <user>]
    [--my-projects]
    [--long]
    [--sort <key>[:<direction>]]
    [--tags <tag>[,<tag>,...]]
    [--tags-any <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-tags-any <tag>[,<tag>,...]]
 
openstack project set
    [--name <name>]
    [--domain <domain>]
    [--description <description>]
    [--enable | --disable]
    [--property <key=value>]
    [--immutable | --no-immutable]
    [--tag <tag>]
    [--clear-tags]
    [--remove-tag <tag>]
    <project>
 
openstack project show
    [--domain <domain>]
    [--parents]
    [--children]
    <project> 
project purge

清除和指定项目关联的资源

Shell
1
2
3
4
5
openstack project purge
    [--dry-run]
    [--keep-project]
    (--auth-project | --project <project>)
    [--project-domain <project-domain>]
group

用户的组。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 添加用户到组
openstack group add user
    [--group-domain <group-domain>]
    [--user-domain <user-domain>]
    <group>
    <user>
    [<user> ...]
openstack group remove user
    [--group-domain <group-domain>]
    [--user-domain <user-domain>]
    <group>
    <user>
    [<user> ...]
 
# 检查组是否包含用户
openstack group contains user
    [--group-domain <group-domain>]
    [--user-domain <user-domain>]
    <group>
    <user>
 
# 创建组
openstack group create
    [--domain <domain>]
    [--description <description>]
    [--or-show]
    <group-name>
 
 
openstack group delete [--domain <domain>] <group> [<group> ...]
 
openstack group list
    [--sort-column SORT_COLUMN]
    [--domain <domain>]
    [--user <user>]
    [--user-domain <user-domain>]
    [--long]
openstack group show [--domain <domain>] <group>
 
openstack group set
    [--domain <domain>]
    [--name <name>]
    [--description <description>]
    <group> 
user

用户管理

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
openstack user create
    # 用户的默认domain
    [--domain <domain>]
    # 用户的默认project
    [--project <project>]
    [--project-domain <project-domain>]
    # 指定密码
    [--password <password>]
    # 交互的输入密码
    [--password-prompt]
    [--email <email-address>]
    [--description <description>]
    # 禁止连续身份验证失败后,锁定用户
    [--ignore-lockout-failure-attempts]
    [--no-ignore-lockout-failure-attempts]
    # 禁止密码过期
    [--ignore-password-expiry]
    [--no-ignore-password-expiry]
    # 禁止首次使用必须修改密码
    [--ignore-change-password-upon-first-use]
    [--no-ignore-change-password-upon-first-use]
    # 锁定密码,不给修改
    [--enable-lock-password]
    [--disable-lock-password]
    # 启用多因子身份验证
    [--enable-multi-factor-auth]
    [--disable-multi-factor-auth]
    [--multi-factor-auth-rule <rule>]
    # 启用/禁用
    [--enable | --disable]
    # 显示已有的用户
    [--or-show]
    <name>
openstack user delete [--domain <domain>] <user> [<user> ...]
 
openstack user list
    [--sort-column SORT_COLUMN]
    [--domain <domain>]
    [--group <group> | --project <project>]
    [--long]
openstack user show [--domain <domain>] <user>
 
# 修改密码
openstack user password set
    [--password <new-password>]
    [--original-password <original-password>]
 
 
openstack user set
    [--name <name>]
    [--domain <domain>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--password <password>]
    [--password-prompt]
    [--email <email-address>]
    [--description <description>]
    [--ignore-lockout-failure-attempts]
    [--no-ignore-lockout-failure-attempts]
    [--ignore-password-expiry]
    [--no-ignore-password-expiry]
    [--ignore-change-password-upon-first-use]
    [--no-ignore-change-password-upon-first-use]
    [--enable-lock-password]
    [--disable-lock-password]
    [--enable-multi-factor-auth]
    [--disable-multi-factor-auth]
    [--multi-factor-auth-rule <rule>]
    [--enable | --disable]
    <user> 
role

可以创建角色,将角色映射给用户或组。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 将角色赋予组或用户
openstack role add
    [--system <system> | --domain <domain> | --project <project>]
    [--user <user> | --group <group>]
    [--group-domain <group-domain>]
    [--project-domain <project-domain>]
    [--user-domain <user-domain>]
    [--inherited]
    [--role-domain <role-domain>]
    <role>
openstack role remove
    [--system <system> | --domain <domain> | --project <project>]
    [--user <user> | --group <group>]
    [--group-domain <group-domain>]
    [--project-domain <project-domain>]
    [--user-domain <user-domain>]
    [--inherited]
    [--role-domain <role-domain>]
    <role>
 
# 创建角色
openstack role create
    [--description <description>]
    [--domain <domain>]
    [--or-show]
    [--immutable | --no-immutable]
    <role-name>
 
openstack role delete [--domain <domain>] <role> [<role> ...]
 
openstack role list [--sort-column SORT_COLUMN] [--domain <domain>]
 
openstack role set
    [--description <description>]
    [--domain <domain>]
    [--name <name>]
    [--immutable | --no-immutable]
    <role>
 
openstack role show [--domain <domain>] <role> 
role assignment

角色和用户的映射关系。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
openstack role assignment list
    [--role <role>]
    [--role-domain <role-domain>]
    [--user <user>]
    [--user-domain <user-domain>]
    [--group <group>]
    [--group-domain <group-domain>]
    [--domain <domain>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--effective]
    [--inherited]
    [--names] 
implied role

指定角色之间的包含关系。

Shell
1
2
3
4
5
6
#                             被隐含的角色           目标角色
openstack implied role create --implied-role <role> <role>
 
openstack implied role delete --implied-role <role> <role>
 
openstack implied role list [--sort-column SORT_COLUMN] 
trust

提供特定项目中,用户之间的角色代理,支持可选的替身机制(impersonation)。需要 OS-TRUST扩展。

consumer

在Identity服务的OS-OAUTH1扩展中使用,用于创建request token 、access token,仅仅支持Identity v3。

Shell
1
2
3
4
5
openstack consumer create [--description <description>]
openstack consumer delete <consumer> [<consumer> ...]
openstack consumer list [--sort-column SORT_COLUMN]
openstack consumer set [--description <description>] <consumer>
openstack consumer show <consumer>
credential

管理凭证:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
openstack credential create
    [--type <type>]
    [--project <project>]
    <user>
    <data>
 
openstack credential delete <credential-id> [<credential-id> ...]
 
openstack credential list
    [--sort-column SORT_COLUMN]
    [--user <user>]
    [--user-domain <user-domain>]
    [--type <type>]
 
openstack credential set
    --user <user>
    --type <type>
    --data <data>
    [--project <project>]
    <credential-id>
 
openstack credential show <credential-id> 
application credential

使用应用凭证,用户可以给自己的应用程序授予对云资源的有限访问权限。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建新的凭证
openstack application credential create
    [--secret <secret>]
    [--role <role>]
    [--expiration <expiration>]
    [--description <description>]
    [--unrestricted]
    [--restricted]
    [--access-rules <access-rules>]
    <name>
 
openstack application credential delete
    <application-credential>
    [<application-credential> ...]
 
openstack application credential list
    [--sort-column SORT_COLUMN]
    [--user <user>]
    [--user-domain <user-domain>]
 
openstack application credential show <application-credential>
access rule

对应用程序凭证的权限进行细粒度控制。每个访问规则包含一下要素:

服务类型 + 请求路径 + 请求方法

Shell
1
2
3
4
5
6
7
openstack access rule delete <access-rule> [<access-rule> ...]
 
openstack access rule list
    [--user <user>]
    [--user-domain <user-domain>]
 
openstack access rule show <access-rule>
token

创建或吊销一个令牌

Shell
1
2
3
openstack token issue
 
openstack token revoke <token> 
access token

Identity服务的OS-OAUTH1扩展使用访问令牌。consumer可以代表被授权用户来获得新的Identity API token。

Shell
1
2
3
4
5
6
7
openstack access token create
    # consumer的键/密钥
    --consumer-key <consumer-key>
    --consumer-secret <consumer-secret>
    --request-key <request-key>
    --request-secret <request-secret>
    --verifier <verifier>
request token

Identity服务的OS-OAUTH1扩展使用请求令牌。consumer使用此令牌来请求access token

Shell
1
2
3
4
5
6
7
8
9
10
11
# 验证请求令牌
openstack request token authorize
    --request-key <request-key>
    --role <role>
 
# 创建请求令牌
openstack request token create
    --consumer-key <consumer-key>
    --consumer-secret <consumer-secret>
    --project <project>
    [--domain <domain>]
policy

策略是一组规则,可以被远程服务消费。

Shell
1
2
3
4
5
6
7
8
9
openstack policy create [--type <type>] <filename>
 
openstack policy delete <policy> [<policy> ...]
 
openstack policy list [--sort-column SORT_COLUMN] [--long]
 
openstack policy set [--type <type>] [--rules <filename>] <policy>
 
openstack policy show <policy> 
network rbac

基于RBAC的、针对网络资源的授权控制策略。让用户获得某个项目的网络资源的访问权限

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
openstack network rbac create
    --type <type>
    --action <action>
    (--target-project <target-project> | --target-all-projects)
    [--target-project-domain <target-project-domain>]
    [--project <project>]
    [--project-domain <project-domain>]
    <rbac-object>
 
openstack network rbac delete <rbac-policy> [<rbac-policy> ...]
 
openstack network rbac list
    [--sort-column SORT_COLUMN]
    [--type <type>]
    [--action <action>]
    [--long]
 
openstack network rbac set
    [--target-project <target-project>]
    [--target-project-domain <target-project-domain>]
    <rbac-policy>
 
openstack network rbac show <rbac-policy> 
quota

很多API都支持资源配额

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
openstack quota set
    # 为指定的class设置配额
    [--class]
    # 核心数配额
    [--cores <cores>]
    # 固定IP数量配额
    [--fixed-ips <fixed-ips>]
    [--injected-file-size <injected-file-size>]
    [--injected-path-size <injected-path-size>]
    [--injected-files <injected-files>]
    [--instances <instances>]
    [--key-pairs <key-pairs>]
    [--properties <properties>]
    [--ram <ram>]
    [--server-groups <server-groups>]
    [--server-group-members <server-group-members>]
    [--backups <backups>]
    [--backup-gigabytes <backup-gigabytes>]
    [--gigabytes <gigabytes>]
    [--per-volume-gigabytes <per-volume-gigabytes>]
    [--snapshots <snapshots>]
    [--volumes <volumes>]
    [--floating-ips <floating-ips>]
    [--secgroup-rules <secgroup-rules>]
    [--secgroups <secgroups>]
    [--networks <networks>]
    [--subnets <subnets>]
    [--ports <ports>]
    [--routers <routers>]
    [--rbac-policies <rbac-policies>]
    [--subnetpools <subnetpools>]
    [--volume-type <volume-type>]
    [--force]
    # 此配额针对的项目或者class
    <project/class>
 
openstack quota list
    [--sort-column SORT_COLUMN]
    [--project <project>]
    [--detail]
    (--compute | --volume | --network)
 
openstack quota show [--class | --default] [<project/class>]
 
# 显示针对所有项目的默认配额
openstack quota show --default
 
# 增大默认安装下admin项目的资源配额
openstack quota set --cores 32 admin
openstack quota set --ram 131072 admin
openstack quota set --gigabytes 8192 admin
openstack quota set --volumes 32 admin
openstack quota set --snapshots 32 admin
openstack quota set --instances 16 admin
limit

用于在项目级别进行资源配额。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 创建一个配额
openstack limit create
    [--description <description>]
    # 此配额影响的区域
    [--region <region>]
    # 此配额针对的项目
    --project <project>
    # 负责资源的服务
    --service <service>
    # 资源额度
    --resource-limit <resource-limit>
    <resource-name>
 
openstack limit delete <limit-id> [<limit-id> ...]
 
openstack limit list
    [--sort-column SORT_COLUMN]
    [--service <service>]
    [--resource-name <resource-name>]
    [--region <region>]
    [--project <project>]
 
openstack limit set
    [--description <description>]
    [--resource-limit <resource-limit>]
    <limit-id>
 
openstack limit show <limit-id>
registered limit

用于定义OpenStack部署中的默认资源限制

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
openstack registered limit create
    [--description <description>]
    [--region <region>]
    --service <service>
    --default-limit <default-limit>
    <resource-name>
 
openstack registered limit delete
    <registered-limit-id>
    [<registered-limit-id> ...]
 
openstack registered limit list
    [--sort-column SORT_COLUMN]
    [--service <service>]
    [--resource-name <resource-name>]
    [--region <region>]
 
openstack registered limit set
    [--service <service>]
    [--resource-name <resource-name>]
    [--default-limit <default-limit>]
    [--description <description>]
    [--region <region>]
    <registered-limit-id>
 
openstack registered limit show <registered-limit-id> 
limits

显示计算、存储资源用量的限制

Shell
1
2
3
4
5
6
openstack limits show
    [--sort-column SORT_COLUMN]
    (--absolute | --rate)
    [--reserved]
    [--project <project>]
    [--domain <domain>]
usage

显示项目的资源用量

Shell
1
2
3
4
5
6
7
8
9
10
11
openstack usage list
    [--sort-column SORT_COLUMN]
    # 用量统计的起始时间,默认4周前
    [--start <start>]
    # 用量统计的结束日期,默认明天
    [--end <end>]
 
openstack usage show
    [--project <project>]
    [--start <start>]
    [--end <end>] 
region

区域是OpenStack部署中的最大的分区。你可以配置多个sub-region,甚至形成树形结构。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
openstack region create
    [--parent-region <region-id>]
    [--description <description>]
    <region-id>
 
openstack region delete <region-id> [<region-id> ...]
 
openstack region list
    [--sort-column SORT_COLUMN]
    [--parent-region <region-id>]
 
openstack region set
    [--parent-region <region-id>]
    [--description <description>]
    <region-id>
 
openstack region show <region-id> 
availability zone

可用区是云存储、计算、网络服务的逻辑分区。对等的AZ具有构成HA的效果,这和Region不同。

Shell
1
2
3
4
5
6
7
# 列出可用区
openstack availability zone list
    [--sort-column SORT_COLUMN]
    [--compute]
    [--network]
    [--volume]
    [--long] 
aggregate

聚合是一组分组host的机制:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 添加/删除主机到聚合中
openstack aggregate add host <aggregate> <host>
openstack aggregate remove host <aggregate> <host>
 
# 为聚合请求缓存镜像
openstack aggregate cache image <aggregate> <image> [<image> ...]
 
# 创建一个聚合,可以看到聚合是在某个AZ内部的
openstack aggregate create
    [--zone <availability-zone>]
    [--property <key=value>]
    <name>
 
openstack aggregate delete <aggregate> [<aggregate> ...]
 
# 为聚合设置元数据(键值对),然后为Flavor设置scope为aggregate_instance_extra_specs的
# 额外规格,规格键值和元数据一致,可以将Flavor映射到聚合。从Flavor创建的实例将位于聚合的主机中
openstack aggregate set
    [--name <name>]
    [--zone <availability-zone>]
    [--property <key=value>]
    [--no-property]
    <aggregate>
openstack aggregate unset [--property <key>] <aggregate>
 
openstack aggregate show <aggregate>
openstack aggregate list [--sort-column SORT_COLUMN] [--long]
host

运行Hypervisor的物理机器。

Shell
1
2
3
4
5
6
7
8
openstack host list [--sort-column SORT_COLUMN] [--zone <zone>]
 
openstack host set
    [--enable | --disable]
    [--enable-maintenance | --disable-maintenance]
    <host>
 
openstack host show [--sort-column SORT_COLUMN] <host>
hypervisor
Shell
1
2
3
4
5
6
openstack hypervisor list
    [--sort-column SORT_COLUMN]
    [--matching <hostname>]
    [--long]
 
openstack hypervisor show <hypervisor>
hypervisor stats  
Shell
1
openstack hypervisor stats show 
keypair

OpenSSH公钥管理,用于访问创建的server(虚拟机)。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 创建公钥
# 如果什么参数都不指定,则生成新的公钥
openstack keypair create
    [--public-key <file> | --private-key <file>]
    [--type <type>]
    [--user <user>]
    [--user-domain <user-domain>]
    <name>
 
openstack keypair delete
    [--user <user>]
    [--user-domain <user-domain>]
    <key>
    [<key> ...]
 
openstack keypair list
    [--sort-column SORT_COLUMN]
    [--user <user>]
    [--user-domain <user-domain>]
    [--project <project>]
    [--project-domain <project-domain>]
 
openstack keypair show
    [--public-key]
    [--user <user>]
    [--user-domain <user-domain>]
    <key>
versions show

显示所有服务的版本、端点、是否弃用之类的信息

Shell
1
openstack versions show 
catalog

显示服务的类型、名称、端点列表:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
openstack catalog list [--sort-column SORT_COLUMN]
openstack catalog show <service>
 
openstack catalog list
# +-----------+-----------+-----------------------------------------+
# | Name      | Type      | Endpoints                               |
# +-----------+-----------+-----------------------------------------+
# | glance    | image     | zircon                                  |
# |           |           |   public: http://os.gmem.cc:9292        |
# |           |           |                                         |
# | keystone  | identity  | zircon                                  |
# |           |           |   internal: http://os.gmem.cc:5000/v3/  |
# |           |           | zircon                                  |
# |           |           |   public: http://os.gmem.cc:5000/v3/    |
# |           |           | zircon                                  |
# |           |           |   admin: http://os.gmem.cc:5000/v3/     |
# |           |           |                                         |
# | nova      | compute   | zircon                                  |
# |           |           |   internal: http://os.gmem.cc:8774/v2.1 |
# |           |           | zircon                                  |
# |           |           |   public: http://os.gmem.cc:8774/v2.1   |
# |           |           | zircon                                  |
# |           |           |   admin: http://os.gmem.cc:8774/v2.1    |
# |           |           |                                         |
# | placement | placement | zircon                                  |
# |           |           |   public: http://os.gmem.cc:8778        |
# |           |           | zircon                                  |
# |           |           |   admin: http://os.gmem.cc:8778         |
# |           |           | zircon                                  |
# |           |           |   internal: http://os.gmem.cc:8778      |
# |           |           |                                         |
# +-----------+-----------+-----------------------------------------+
extension

很多OpenStack API包含API扩展,这些扩展提供额外的功能。

Shell
1
2
3
4
5
6
7
8
9
10
11
# 列出API扩展
openstack extension list
    [--sort-column SORT_COLUMN]
    [--compute]
    [--identity]
    [--network]
    [--volume]
    [--long]
 
# 显示API扩展
openstack extension show <extension>
endpoint

管理服务的API端点

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 关联项目到端点
openstack endpoint add project
    [--project-domain <project-domain>]
    <endpoint>
    <project>
openstack endpoint remove project
    [--project-domain <project-domain>]
    <endpoint>
    <project>
 
# 创建新的端点
openstack endpoint create
    # 所属的区域
    [--region <region-id>]
    [--enable | --disable]
    # 端点所属的服务
    <service>
    # admin, public 还是 internal
    <interface>
    <url>
 
openstack endpoint delete <endpoint-id> [<endpoint-id> ...]
 
openstack endpoint list
    [--sort-column SORT_COLUMN]
    [--service <service>]
    [--interface <interface>]
    [--region <region-id>]
    [--endpoint <endpoint-group> | --project <project>]
    [--project-domain <project-domain>]
 
openstack endpoint set
    [--region <region-id>]
    [--interface <interface>]
    [--url <url>]
    [--service <service>]
    [--enable | --disable]
    <endpoint-id>
 
openstack endpoint show <endpoint>
endpoint group

一组端点,可以一起关联到项目。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 关联端点组到项目
openstack endpoint group add project
    [--project-domain <project-domain>]
    <endpoint-group>
    <project>
openstack endpoint group remove project
    [--project-domain <project-domain>]
    <endpoint-group>
    <project>
 
 
# 创建端点组
openstack endpoint group create
    [--description DESCRIPTION]
    <name>
    <filename>
openstack endpoint group delete <endpoint-group> [<endpoint-group> ...]
openstack endpoint group set
    [--name <name>]
    [--filters <filename>]
    [--description <description>]
    <endpoint-group>
openstack endpoint group list
    [--sort-column SORT_COLUMN]
    [--endpointgroup <endpoint-group> | --project <project>]
    [--domain <domain>]
openstack endpoint group show <endpointgroup> 
flavor

表示一种虚拟机的规格。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
openstack flavor create
    [--id <id>]
    # 内存大小,MB
    [--ram <size-mb>]
    # 磁盘大小,GB
    [--disk <size-gb>]
    # 临时磁盘大小
    [--ephemeral <size-gb>]
    # 交换分区大小
    [--swap <size-mb>]
    # VCPU数量,默认1
    [--vcpus <vcpus>]
    # RX/TX 因子,默认1.0
    [--rxtx-factor <factor>]
    # 是否可以被其它项目使用
    [--public | --private]
    [--property <key=value>]
    # 所属项目
    [--project <project>]
    [--description <description>]
    [--project-domain <project-domain>]
    # 传统的名字是  XX.SIZE_NAME 格式,现在已经没有要求。不排除某些工具依赖于这种名称格式
    <flavor-name>
 
openstack flavor list
    [--sort-column SORT_COLUMN]
    [--public | --private | --all]
    [--long]
    [--marker <flavor-id>]
    [--limit <num-flavors>]
 
openstack flavor set
    [--no-property]
    [--property <key=value>]
    [--project <project>]
    [--description <description>]
    [--project-domain <project-domain>]
    <flavor>
openstack flavor unset
    [--property <key>]
    [--project <project>]
    [--project-domain <project-domain>]
    <flavor>
 
openstack flavor show <flavor>
 
 
# 创建一个Flavor
openstack flavor create FLAVOR_NAME --id FLAVOR_ID \
    --ram RAM_IN_MB --disk ROOT_DISK_IN_GB --vcpus NUMBER_OF_VCPUS
 
# 创建Flavor并分配给一个租户
openstack flavor create --public m1.extra_tiny --id auto \
    --ram 256 --disk 0 --vcpus 1
openstack flavor set --project PROJECT_ID m1.extra_tiny
 
 
 
# 列出所有flavor
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
openstack flavor create --id 1 --vcpus 1 --ram 512 --disk 8 m1.tiny
openstack flavor create --id 2 --vcpus 1 --ram 2048 --disk 32 m1.small
openstack flavor create --id 3 --vcpus 2 --ram 4096 --disk 64 m1.medium
openstack flavor create --id 4 --vcpus 4 --ram 8192 --disk 128 m1.large
openstack flavor create --id 5 --vcpus 8 --ram 16384 --disk 256 m1.xlarge
 
openstack flavor list
# +----+-----------+-------+------+-----------+-------+-----------+
# | ID | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
# +----+-----------+-------+------+-----------+-------+-----------+
# | 0  | m1.nano   |    64 |    1 |         0 |     1 | True      |
# | 1  | m1.tiny   |   512 |    8 |         0 |     1 | True      |
# | 2  | m1.small  |  2048 |   32 |         0 |     1 | True      |
# | 3  | m1.medium |  4096 |   64 |         0 |     2 | True      |
# | 4  | m1.large  |  8192 |  128 |         0 |     4 | True      |
# | 5  | m1.xlarge | 16384 |  256 |         0 |     8 | True      |
# +----+-----------+-------+------+-----------+-------+-----------+
image

管理镜像。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 允许项目访问镜像
openstack image add project
    [--project-domain <project-domain>]
    <image>
    <project>
openstack image remove project
    [--project-domain <project-domain>]
    <image>
    <project>
 
# 创建镜像
openstack image create
    [--id <id>]
    # 镜像容器格式:ami, ari, aki, bare, docker, ova, ovf。默认bare
    [--container-format <container-format>]
    # 镜像磁盘格式:ami, ari, aki, vhd, vmdk, raw, qcow2, vhdx, vdi, iso, ploop。默认raw
    [--disk-format <disk-format>]
    # 启动镜像需要的最小磁盘尺寸
    [--min-disk <disk-gb>]
    # 启动镜像需要的最小内存
    [--min-ram <ram-mb>]
    # 镜像文件       从卷生成镜像
    [--file <file> | --volume <volume>]
    # 从卷生成镜像时,即便卷正在使用,也强制生成镜像
    [--force]
    # 使用本地私钥签名镜像
    [--sign-key-path <sign-key-path>]
    # 用于镜像签名校验的,位于key manager中的certificate的UUID
    [--sign-cert-id <sign-cert-id>]
    # 保护镜像防止被删除
    [--protected | --unprotected]
    # 公共      项目私有    可被社区使用    共享
    [--public | --private | --community | --shared]
    [--property <key=value>]
    [--tag <tag>]
    [--project <project>]
    [--import]
    [--project-domain <project-domain>]
    <image-name>
 
# 设置镜像属性
openstack image set
    [--name <name>]
    [--min-disk <disk-gb>]
    [--min-ram <ram-mb>]
    [--container-format <container-format>]
    [--disk-format <disk-format>]
    [--protected | --unprotected]
    [--public | --private | --community | --shared]
    [--property <key=value>]
    [--tag <tag>]
    [--architecture <architecture>]
    [--instance-id <instance-id>]
    [--kernel-id <kernel-id>]
    [--os-distro <os-distro>]
    [--os-version <os-version>]
    [--ramdisk-id <ramdisk-id>]
    [--deactivate | --activate]
    [--project <project>]
    [--project-domain <project-domain>]
    [--accept | --reject | --pending]
    <image>
openstack image unset [--tag <tag>] [--property <property-key>] <image>
 
# 删除镜像
openstack image delete <image> [<image> ...]
 
# 将镜像保存到本地
openstack image save [--file <filename>] <image>
 
# 列出镜像
openstack image member list
    [--sort-column SORT_COLUMN]
    [--project-domain <project-domain>]
    <image>
 
# 显示镜像信息
openstack image show [--human-readable] <image>
 
 
# 示例
# 上传镜像
openstack image create --public --disk-format qcow2 --container-format bare \
  --file cirros-0.5.1-x86_64-disk.img cirros-0.5.1-amd64
# 将卷上传为镜像,上传的QCOW2镜像,会自动shrink
# 注意,默认情况下只有Available状态的卷能够上传为镜像,In-use的用--force也不行
# Force upload to image is disabled, Force option will be ignored.
openstack image create --volume 840e9e25-192c-401b-83f5-898fd82839c4 --force centos8-amd64-prepared
compute agent

计算代理是和Hypervisor相关的,且仅仅被 XenAPI hypervisor driver支持。

compute service

Nova相关的服务。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
openstack compute service delete <service> [<service> ...]
 
openstack compute service list
    [--sort-column SORT_COLUMN]
    [--host <host>]
    [--service <service>]
    [--long]
 
openstack compute service set
    [--enable | --disable]
    [--disable-reason <reason>]
    [--up | --down]
    <host>
    <service>
console log

显示虚拟机的控制台日志:

Shell
1
openstack console log show [--lines <num-lines>] <server>
console url

打印各种类型的控制台URL:

Shell
1
2
3
openstack console url show
    [--novnc | --xvpvnc | --spice | --rdp | --serial | --mks]
    <server> 
server group

基于某种策略对服务器进行分组。

Shell
1
2
3
4
5
6
7
8
9
10
openstack server group create [--policy <policy>] <name>
 
openstack server group delete <server-group> [<server-group> ...]
 
openstack server group list
    [--sort-column SORT_COLUMN]
    [--all-projects]
    [--long]
 
openstack server group show <server-group>
server create

创建一个实例(虚拟机,也叫服务器server) 

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
openstack server create
    # --image 从镜像创建服务器的启动磁盘
    # --volume 将卷作为服务器的启动磁盘,会自动创建一个块设备,映射boot index为0
    #          在很多Hypervisor(例如libvirt/kvm)这个磁盘将是vda
    #          不要使用 –block-device-mapping  选项来为此磁盘创建重复的映射
    (--image <image> | --image-property <key=value> | --volume <volume>)
    # 服务器的密码
    [--password <password>]
    # 服务器的风格
    --flavor <flavor>
    # 加入安全组,可以指定多个
    [--security-group <security-group>]
    # 注入到此服务器的OpenSSH公钥
    [--key-name <key-name>]
    # 设置属性
    [--property <key=value>]
    # 在启动之前,注入到镜像中的文件。可以指定多个
    [--file <dest-filename=source-filename>]
    # 从metadata服务器来serve的用户数据文件。用于配置新实例
    [--user-data <user-data>]
    [--description <description>]
    # 在哪个AZ中创建此服务器,可以指定:
    #   <zone-name>:<host-name>:<node-name>
    #   <zone-name>::<node-name>
    #   <zone-name>:<host-name>
    #   <zone-name>
    [--availability-zone <zone-name>]
    # 指定在某个宿主机上创建实例
    [--host <host>]
    [--hypervisor-hostname <hypervisor-hostname>]
    # 和 --image 或 --image-property 一起使用时,该选项自动创建boot index 为0的块设备
    # 并且告知计算服务,从镜像创建卷+卷的大小(GB)。此卷在实例销毁后不会删除
    # 不能和 --volume 联用
    [--boot-from-volume <volume-size>]
    # 在服务器上创建额外的块设备,格式:
    #   <dev-name>=<id>:<type>:<size(GB)>:<delete-on-terminate>
    #     dev-name 为块设备名称,例如vdb xvdc
    #     id 为卷、卷快照、镜像的名字或ID
    #     type:volume, snapshot 或 image。默认volume
    #     size:卷的大小
    #     delete-on-terminate:true或false
    [--block-device-mapping <dev-name=mapping>]
    # 在服务器上创建NIC。要创建多个NIC,则指定多次
    #     net-id和port-id互斥,不能同时指定
    #     v4-fixed-ip 此NIC的IPv4固定IP地址
    #     v6-fixed-ip 此NIC的IPv6固定IP地址
    #     auto 由计算服务自动分配一个网络。不能和其它参数一起使用
    #     none 不连接到网络。不能和其它参数一起使用
    [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid,auto,none>]
    # 创建一个NIC,并且连接到该网络。可以指定多次,以创建多个NIC并连接到多个网络
    [--network <network>]
    # 创建一个NIC,并且连接到该端口。可以指定多次,以创建多个NIC并连接到多个端口
    [--port <port>]
    # 提供给nova-scheduler的提示信息
    [--hint <key=value>]
    # 启用config drive
    [--use-config-drive | --no-config-drive | --config-drive <config-drive-volume>|True]
    # 启动的实例数量
    [--min <count>]
    [--max <count>]
    # 等待实例构建完成
    [--wait]
    [--tag <tag>]
    # 实例的名字
    <server-name>
 
 
# 从镜像启动虚拟机,并挂载一个非启动磁盘
## 创建非启动磁盘
openstack volume create --size 8 my-volume
## 创建虚拟机         从镜像创建
nova boot --flavor 2 --image 98901246-af91-43d8-b5e6-a4506aa8f369 \
# 添加块设备      源是卷        卷的ID                                   挂载为卷    虚拟机删除后保留卷  
  --block-device source=volume,id=d620d971-b160-4c4e-8652-2513d74e2080,dest=volume,shutdown=preserve \
  myInstanceWithVolume
 
 
# 从SOURCE创建启动卷,并从该卷启动虚拟机
# SOURCE: volume, snapshot, image, 或者 blank
# DEST:volume或local
nova boot --flavor FLAVOR --block-device \
  source=SOURCE,id=ID,dest=DEST,size=SIZE,shutdown=PRESERVE,bootindex=INDEX  NAME
 
# 从镜像创建一个可启动卷。如果指定--image参数,则Cinder自动将卷标记为可启动的
openstack volume create --image IMAGE_ID --size SIZE_IN_GB bootable_volume
 
 
# 挂载Swap或者临时磁盘到虚拟机
nova boot --flavor FLAVOR --image IMAGE_ID --swap 512  --ephemeral size=2 NAME
server add fixed ip

为服务器添加固定IP地址:

Shell
1
2
3
4
5
6
7
8
openstack server add fixed ip
    # 请求的固定IP地址
    [--fixed-ip-address <ip-address>]
    [--tag <tag>]
    <server>
    <network>
 
openstack server remove fixed ip <server> <ip-address>
server add floating ip

为服务器添加浮动IP地址:

Shell
1
2
3
4
5
6
7
8
openstack server add floating ip
    # 和此浮动IP地址关联的固定IP地址,使用第一个具有此固定IP地址的、此服务器上的port
    [--fixed-ip-address <ip-address>]
    <server>
    # 分配给上述第一个服务器port的浮动IP地址
    <ip-address>
 
openstack server remove floating ip <server> <ip-address>
server add network

将服务器连接到某个网络 

Shell
1
2
3
openstack server add network [--tag <tag>] <server> <network>
 
openstack server remove network <server> <network>
server add port 

将某个端口连接到服务器

Shell
1
2
3
openstack server add port [--tag <tag>] <server> <port>
 
openstack server remove port <server> <port>
server add security group

将服务器添加到安全组

Shell
1
2
3
openstack server add security group <server> <group>
 
openstack server remove security group <server> <group>
server add volume 

挂载(Attach)一个卷给服务器

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
openstack server add volume
    # 服务器上的内部设备名
    [--device <device>]
    [--tag <tag>]
    # 如果服务器被销毁,此卷是否被删除
    [--enable-delete-on-termination | --disable-delete-on-termination]
    <server>
    <volume>
 
openstack server remove volume <server> <volume>
 
# 示例
openstack server add volume cirros-amd64 cirros-amd64-diskb
server migration list

服务器迁移,就是将一台宿主机上的实例,转移到另外一台上运行。

OpenStack支持四种迁移模式:热迁移、冷迁移、升降配(resize)、重建(evacuation)

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
# 显示迁移历史的列表
openstack server migration list
    [--sort-column SORT_COLUMN]
    [--server <server>]
    [--host <host>]
    [--status <status>]
    [--type <type>]
    [--marker <marker>]
    [--limit <limit>]
    [--changes-since <changes-since>]
    [--changes-before <changes-before>]
    [--project <project>]
    [--user <user>]
server resize

扩/缩容服务器为新的flavor。实现方式是:

  1. 创就一个新的服务器
  2. 复制文件到新服务器

扩/缩容操作分为两步完成:第一步迁移,第二步确认

Shell
1
2
3
4
openstack server resize
    [--flavor <flavor> | --confirm | --revert]
    [--wait]
    <server>
server resize confirm
Shell
1
openstack server resize confirm <server>
server resize revert
Shell
1
openstack server resize revert <server>
server migrate

将服务器迁移到另外一个宿主机上。

迁移操作是基于resize操作实现的:

  1. 创建一个新的实例,使用相同的flavor
  2. 从原始磁盘上拷贝内容到新磁盘

和resize一样,迁移操作是分两步完成的:

  1. 执行上述两步的迁移操作
  2. 让用户确认,迁移是否成功并移除酒实例,还是执行revert操作 —— 删除新实例并重启老的
Shell
1
2
3
4
5
6
7
8
9
openstack server migrate
    # 不宕机迁移
    [--live-migration]
    # 目标主机
    [ --host <hostname>]
    [--shared-migration | --block-migration]
    [--disk-overcommit | --no-disk-overcommit]
    [--wait]
    <server>
server migrate confirm

确认迁移

Shell
1
openstack server migrate confirm <server>
server migrate revert 

撤销迁移 

Shell
1
openstack server migrate revert <server>
server evacuate

将服务器在另外一个宿主机上重建。这个命令的使用场景是:实例已经运行,但是后来它所在的宿主机宕掉了。 也就是说,仅当管理此实例的compute service宕机了,才可以使用此命令。

如果服务器实例使用临时的(ephemeral)root磁盘,此磁盘位于非共享存储上,则使用原始的glance镜像重建服务器。连接到原实例的port、挂载的卷被保留。

如果服务器实例从volume启动,或者跟磁盘位于共享存储上,则新建实例会重用此启动盘。

server pause

暂停服务器,状态保存在内存中

Shell
1
openstack server pause <server> [<server> ...]
server unpause

取消暂停服务器

Shell
1
openstack server unpause <server> [<server> ...]
server suspend

暂停服务器,状态保存在磁盘中

Shell
1
openstack server suspend <server> [<server> ...]
server resume

从暂停中恢复

Shell
1
openstack server resume <server> [<server> ...]
server restore

回退状态为软删除的服务器

Shell
1
openstack server restore <server> [<server> ...] 
server reboot

重启服务器

Shell
1
2
#                       强行立即重启
openstack server reboot [--hard | --soft] [--wait] <server>
server start

启动服务器

Shell
1
openstack server start <server> [<server> ...]
server stop

停止服务器

Shell
1
openstack server stop <server> [<server> ...]
server rebuild

重建服务器

Shell
1
2
3
4
5
6
7
8
openstack server rebuild
    [--image <image>]
    [--password <password>]
    [--property <key=value>]
    [--description <description>]
    [--key-name <key-name> | --key-unset]
    [--wait]
    <server> 
server rescue

让服务器进入rescue模式

Shell
1
2
3
4
openstack server rescue
    [--image <image>]
    [--password <password>]
    <server> 
server unrescue

从rescue模式恢复:

Shell
1
openstack server unrescue <server>
server shelve

将服务器实例作为镜像,保存在glance中,然后在宿主机上删除此服务器 

Shell
1
openstack server shelve <server> [<server> ...] 
server unshelve

将shelve的实例恢复

Shell
1
2
3
4
openstack server unshelve
    [--availability-zone AVAILABILITY_ZONE]
    <server>
    [<server> ...] 
server ssh

通过SSH连接到服务器

Shell
1
2
3
4
5
6
7
8
9
10
11
12
openstack server ssh
    [--login <login-name>]
    [--port <port>]
    [--identity <keyfile>]
    [--option <config-options>]
    [-4 | -6]
    [--public | --private | --address-type <address-type>]
    <server>
 
 
# 自动使用当前用户的SSH key
openstack server ssh --private -4 --login cirros cirros-amd64-0
server dump create

创建服务器的Dump文件。这会触发一个crash dump(例如Linux的kdump) 

Shell
1
openstack server dump create <server> [<server> ...]
server delete

(软)删除服务器

Shell
1
openstack server delete [--wait] <server> [<server> ...]
server set

设置服务器属性

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
openstack server set
    [--name <new-name>]
    [--root-password]
    [--property <key=value>]
    [--state <state>]
    [--description <description>]
    [--tag <tag>]
    <server>
 
openstack server unset
    [--property <key>]
    [--description]
    [--tag <tag>]
    <server>
server lock

锁定实例,这样非admin用户就不能对它进行任何操作。

Shell
1
openstack server lock [--reason <reason>] <server> [<server> ...]
server unlock

解锁服务器

Shell
1
openstack server unpause <server> [<server> ...] 
server list
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
openstack server list
    [--sort-column SORT_COLUMN]
    [--availability-zone <availability-zone>]
    [--reservation-id <reservation-id>]
    [--ip <ip-address-regex>]
    [--ip6 <ip-address-regex>]
    [--name <name-regex>]
    [--instance-name <server-name>]
    [--status <status>]
    [--flavor <flavor>]
    [--image <image>]
    [--host <hostname>]
    [--all-projects]
    [--project <project>]
    [--project-domain <project-domain>]
    [--user <user>]
    [--user-domain <user-domain>]
    [--long]
    [-n | --name-lookup-one-by-one]
    [--marker <server>]
    [--limit <num-servers>]
    [--deleted]
    [--changes-before <changes-before>]
    [--changes-since <changes-since>]
    [--locked | --unlocked]
    [--tags <tag>]
    [--not-tags <tag>]
server show
Shell
1
2
#                     显示诊断信息
openstack server show [--diagnostics] <server>
server backup

备份一个运行中的服务器实例,将其磁盘保存为镜像,存放在Glance中。

Shell
1
2
3
4
5
6
7
8
9
10
# 创建备份
openstack server backup create
    # 备份镜像的名字,默认为服务器名
    [--name <image-name>]
    # 填充镜像的backup_type字段
    [--type <backup-type>]
    # 保存的备份数量
    [--rotate <count>]
    [--wait]
    <server>
server image

从运行中的实例创建磁盘镜像,并存放到Glance中。

Shell
1
openstack server image create [--name <image-name>] [--wait] <server> 
server event

服务器事件,记录了针对服务器的各种操作。事件由操作类型(create, delete, reboot ...)+ 操作结果(success, error) + 开始/结束时间组成。

Shell
1
2
3
4
5
6
7
8
# 事件列表
openstack server event list
    [--sort-column SORT_COLUMN]
    [--long]
    <server>
 
# 显示事件
openstack server event show <server> <request-id>
network service provider

一个网络服务提供者,表示一个特定的、实现了网络服务的驱动:

Shell
1
openstack network service provider list [--sort-column SORT_COLUMN]
network

所谓网络,是指一个独立的(isolated)的L2网段。OpenStack具有两种类型的网络:

  1. project:完全隔离的、不和其它项目共享的网络。自服务网络
  2. provider:映射到现有的、数据中心中的物理网络,为server或其它资源提供外部网络访问

仅仅管理员可以创建provider网络

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
openstack network create
    # 是否允许跨项目共享
    [--share | --no-share]
    # 是否启用网络
    [--enable | --disable]
    # 所属项目
    [--project <project>]
    [--description <description>]
    # MTU设置
    [--mtu <mtu>]
    [--project-domain <project-domain>]
    # 在什么AZ中创建此网络。需要Network Availability Zone扩展
    # 此选项可以指定多次,表示网络跨越多个AZ
    [--availability-zone-hint <availability-zone>]
    # 是否启用端口安全,如果指定,则此网络上创建的端口自动应用安全设置
    [--enable-port-security | --disable-port-security]
    # 是否外部网络,如果是,则需要external-net扩展
    [--external | --internal]
    # 是否作为默认外部网络
    [--default | --no-default]
    # 应用到此网络的QoS策略
    [--qos-policy <qos-policy>]
    # 指定此网络是VLAN透明的
    [--transparent-vlan | --no-transparent-vlan]
    # 此虚拟网络所基于其实现的物理机制(physical mechanism)
    #   例如  flat, geneve, gre, local, vlan, vxlan
    [--provider-network-type <provider-network-type>]
    # 此虚拟网络所基于的物理网络的名字
    [--provider-physical-network <provider-physical-network>]
    # 对于VLAN网络,指定VLAN ID
    # 对于GENEVE/GRE/VXLAN,指定Tunnel ID
    [--provider-segment <provider-segment>]
    # 此网络的DNS domain,需要DNS integration扩展
    [--dns-domain <dns-domain>]
    [--tag <tag> | --no-tag]
    # IPv4的CIDR
    --subnet <subnet>
    <name>
 
openstack network delete <network> [<network> ...]
 
openstack network list
    [--sort-column SORT_COLUMN]
    [--external | --internal]
    [--long]
    [--name <name>]
    [--enable | --disable]
    [--project <project>]
    [--project-domain <project-domain>]
    [--share | --no-share]
    [--status <status>]
    [--provider-network-type <provider-network-type>]
    [--provider-physical-network <provider-physical-network>]
    [--provider-segment <provider-segment>]
    [--agent <agent-id>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
 
openstack network set
    [--name <name>]
    [--enable | --disable]
    [--share | --no-share]
    [--description <description]
    [--mtu <mtu]
    [--enable-port-security | --disable-port-security]
    [--external | --internal]
    [--default | --no-default]
    [--qos-policy <qos-policy> | --no-qos-policy]
    [--tag <tag>]
    [--no-tag]
    [--provider-network-type <provider-network-type>]
    [--provider-physical-network <provider-physical-network>]
    [--provider-segment <provider-segment>]
    [--dns-domain <dns-domain>]
    <network>
openstack network unset [--tag <tag> | --all-tag] <network>
 
openstack network show <network>
subnet

子网是一段IP地址以及关联的配置状态。当新的Port接入到网络中时,子网用于向Port分配IP地址。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
openstack subnet create
    [--project <project>]
    [--project-domain <project-domain>]
    # --subnet-pool 该子网从此池中获得自己的CIDR
    # --use-default-subnet-pool 使用默认的子网池
    [--subnet-pool <subnet-pool> | --use-prefix-delegation USE_PREFIX_DELEGATION | --use-default-subnet-pool]
    # 从子网池中分配子网时,前缀的长度
    [--prefix-length <prefix-length>]
    # CIDR格式的子网IP地址范围
    [--subnet-range <subnet-range>]
    # 是否启用DHCP
    [--dhcp | --no-dhcp]
    # 是否在DNS中发布固定IP
    [--dns-publish-fixed-ip | --no-dns-publish-fixed-ip]
    # 指定子网的网关。三种形式:
    #   <ip-address> 将指定的IP地址作为网关
    #   auto 自动在子网内部选择网关地址,默认
    #   none 不使用网关
    [--gateway <gateway>]
    # 子网的IP版本,如果使用了subnet pool,则IP版本取决于子网池,该选项被忽略
    [--ip-version {4,6}]
    # IPv6 RA(Router Advertisement)模式
    [--ipv6-ra-mode {dhcpv6-stateful,dhcpv6-stateless,slaac}]
    # IPv6地址模式
    [--ipv6-address-mode {dhcpv6-stateful,dhcpv6-stateless,slaac}]
    # 关联到此子网的网段,网段属于某个网络
    [--network-segment <network-segment>]
    # 此子网所属的网络
    --network <network>
    [--description <description>]
    # 此子网的DHCP自动分配IP地址的范围。可以指定多个
    [--allocation-pool start=<ip-address>,end=<ip-address>]
    # 此子网使用的DNS服务器
    [--dns-nameserver <dns-nameserver>]
    # 为子网添加额外的路由,示例 destination=10.10.0.0/16,gateway=192.168.71.254 网关为下一跳地址
    [--host-route destination=<subnet>,gateway=<ip-address>]
    # 子网的服务类型,必须指定为有效的、某个网络端口的device owner,例如network:floatingip_agent_gateway
    # 可以指定多个,以支持多个服务类型
    [--service-type <service-type>]
    [--tag <tag> | --no-tag]
    <name>
 
openstack subnet delete <subnet> [<subnet> ...]
 
openstack subnet list
    [--sort-column SORT_COLUMN]
    [--long]
    [--ip-version <ip-version>]
    [--dhcp | --no-dhcp]
    [--service-type <service-type>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--network <network>]
    [--gateway <gateway>]
    [--name <name>]
    [--subnet-range <subnet-range>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
openstack subnet show <subnet>
 
openstack subnet set
    [--name <name>]
    [--dhcp | --no-dhcp]
    [--dns-publish-fixed-ip | --no-dns-publish-fixed-ip]
    [--gateway <gateway>]
    [--network-segment <network-segment>]
    [--description <description>]
    [--tag <tag>]
    [--no-tag]
    [--allocation-pool start=<ip-address>,end=<ip-address>]
    [--no-allocation-pool]
    [--dns-nameserver <dns-nameserver>]
    [--no-dns-nameservers]
    [--host-route destination=<subnet>,gateway=<ip-address>]
    [--no-host-route]
    [--service-type <service-type>]
    <subnet>
openstack subnet unset
    [--allocation-pool start=<ip-address>,end=<ip-address>]
    [--dns-nameserver <dns-nameserver>]
    [--host-route destination=<subnet>,gateway=<ip-address>]
    [--service-type <service-type>]
    [--tag <tag> | --all-tag]
    <subnet>
subnet pool

子网池中包含若干CIDR格式的子网前缀,这些前缀用于分配给子网。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 创建一个子网池
openstack subnet pool create
    # 子网池的前缀
    --pool-prefix <pool-prefix>
    # 子网池默认前缀长度
    [--default-prefix-length <default-prefix-length>]
    # 最小/最大前缀长度
    [--min-prefix-length <min-prefix-length>]
    [--max-prefix-length <max-prefix-length>]
    [--project <project>]
    [--project-domain <project-domain>]
    # 关联到此池的address scope对象的名字或ID
    [--address-scope <address-scope>]
    # 是否作为默认子网池
    [--default | --no-default]
    [--share | --no-share]
    [--description <description>]
    # 默认的,每个项目的配额 —— 可以从池中分配的IP数量
    [--default-quota <num-ip-addresses>]
    [--tag <tag> | --no-tag]
    <name>
 
openstack subnet pool delete <subnet-pool> [<subnet-pool> ...]
 
openstack subnet pool list
    [--sort-column SORT_COLUMN]
    [--long]
    [--share | --no-share]
    [--default | --no-default]
    [--project <project>]
    [--project-domain <project-domain>]
    [--name <name>]
    [--address-scope <address-scope>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
openstack subnet pool show <subnet-pool>
 
openstack subnet pool set
    [--name <name>]
    [--pool-prefix <pool-prefix>]
    [--default-prefix-length <default-prefix-length>]
    [--min-prefix-length <min-prefix-length>]
    [--max-prefix-length <max-prefix-length>]
    [--address-scope <address-scope> | --no-address-scope]
    [--default | --no-default]
    [--description <description>]
    [--default-quota <num-ip-addresses>]
    [--tag <tag>]
    [--no-tag]
    <subnet-pool>
openstack subnet pool unset [--tag <tag> | --all-tag] <subnet-pool>
address scope

表示IPv4或IPv6的地址范围,属于某个特定项目,可以被多个项目共享。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建地址范围
openstack address scope create
    [--ip-version {4,6}]
    [--project <project>]
    [--project-domain <project-domain>]
    # 是否可以在项目之间共享
    [--share | --no-share]
    <name>
 
openstack address scope delete <address-scope> [<address-scope> ...]
 
openstack address scope list
    [--sort-column SORT_COLUMN]
    [--name <name>]
    [--ip-version <ip-version>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--share | --no-share]
 
openstack address scope set
    [--name <name>]
    [--share | --no-share]
    <address-scope>
 
openstack address scope show <address-scope> 
router

虚拟路由器是一个逻辑组件,能够在不同网络之间分发数据包。虚拟路由器也提供L3和NAT转发功能,让虚拟网络中的服务器能够访问外部流量。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 将端口添加到路由器
openstack router add port <router> <port>
openstack router remove port <router> <port>
 
# 将子网连接到路由器
openstack router add subnet <router> <subnet>
openstack router remove subnet <router> <subnet>
 
# 在路由器的路由表中添加一个静态路由
openstack router add route
    [--route destination=<subnet>,gateway=<ip-address>]
    <router>
openstack router remove route
    [--route destination=<subnet>,gateway=<ip-address>]
    <router>
 
# 创建路由器
openstack router create
    [--enable | --disable]
    # 集中还是分布式的
    [--distributed | --centralized]
    # 是否高可用
    [--ha | --no-ha]
    [--description <description>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--availability-zone-hint <availability-zone>]
    [--tag <tag> | --no-tag]
    <name>
 
# 删除路由器
openstack router delete <router> [<router> ...]
 
# 列出路由器
openstack router list
    [--sort-column SORT_COLUMN]
    [--name <name>]
    [--enable | --disable]
    [--long]
    [--project <project>]
    [--project-domain <project-domain>]
    [--agent <agent-id>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
 
# 设置属性
openstack router set
    [--name <name>]
    [--description <description>]
    [--enable | --disable]
    [--distributed | --centralized]
    [--route destination=<subnet>,gateway=<ip-address>]
    [--no-route]
    [--ha | --no-ha]
    [--external-gateway <network>]
    [--fixed-ip subnet=<subnet>,ip-address=<ip-address>]
    [--enable-snat | --disable-snat]
    [--qos-policy <qos-policy> | --no-qos-policy]
    [--tag <tag>]
    [--no-tag]
    <router>
openstack router unset
    [--route destination=<subnet>,gateway=<ip-address>]
    [--external-gateway]
    [--qos-policy]
    [--tag <tag> | --all-tag]
    <router>
 
# 显示路由器信息
openstack router show <router> 
port

端口是网络上的接入点,它可以将单个设备(例如server上的NIC)连接到网络。端口也描述了其关联的网络配置,例如MAC地址、IP地址

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
openstack port create
    # 端口所属的网络
    --network <network>
    [--description <description>]
    # 端口的设备ID
    [--device <device-id>]
    # 端口的MAC地址
    [--mac-address <mac-address>]
    # 使用端口的实体,例如network:dhcp
    [--device-owner <device-owner>]
    # 端口的VNIC类型。默认normal
    # direct | direct-physical | macvtap | normal | baremetal | virtio-forwarder
    [--vnic-type <vnic-type>]
    # 在宿主机上分配端口
    [--host <host-id>]
    # 此端口所属的DNS域
    [--dns-domain dns-domain]
    # 此端口的DNS名称
    [--dns-name <dns-name>]
    # 调度此端口所需的NUMA亲和性策略
    [--numa-policy-required | --numa-policy-preferred | --numa-policy-legacy]
    # 此端口期望的IP和/或子网。可以指定多次
    [--fixed-ip subnet=<subnet>,ip-address=<ip-address> | --no-fixed-ip]
    [--binding-profile <binding-profile>]
    # 启用/禁用端口
    [--enable | --disable]
    # 启用uplink状态传播
    [--enable-uplink-status-propagation | --disable-uplink-status-propagation]
    [--project <project>]
    [--project-domain <project-domain>]
    # 额外分配给此端口的DHCP选项
    [--extra-dhcp-option name=<name>[,value=<value>,ip-version={4,6}]]
    # 关联到此端口的安全组
    [--security-group <security-group> | --no-security-group]
    # 关联到此端口的QoS策略
    [--qos-policy <qos-policy>]
    # 是否启用端口安全
    [--enable-port-security | --disable-port-security]
    # 添加允许的IP/MAC地址。可以指定多次
    # 不被允许的IP地址,不能作为发往此端口的IP目的地址
    [--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>]]
    [--tag <tag> | --no-tag]
    <name>
 
openstack port delete <port> [<port> ...]
 
openstack port list
    [--sort-column SORT_COLUMN]
    [--device-owner <device-owner>]
    [--host <host-id>]
    [--network <network>]
    [--router <router> | --server <server> | --device-id <device-id>]
    [--mac-address <mac-address>]
    [--long]
    [--project <project>]
    [--project-domain <project-domain>]
    [--fixed-ip subnet=<subnet>,ip-address=<ip-address>,ip-substring=<ip-substring>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
 
openstack port set
    [--description <description>]
    [--device <device-id>]
    [--mac-address <mac-address>]
    [--device-owner <device-owner>]
    [--vnic-type <vnic-type>]
    [--host <host-id>]
    [--dns-domain dns-domain]
    [--dns-name <dns-name>]
    [--numa-policy-required | --numa-policy-preferred | --numa-policy-legacy]
    [--enable | --disable]
    [--name <name>]
    [--fixed-ip subnet=<subnet>,ip-address=<ip-address>]
    [--no-fixed-ip]
    [--binding-profile <binding-profile>]
    [--no-binding-profile]
    [--qos-policy <qos-policy>]
    [--security-group <security-group>]
    [--no-security-group]
    [--enable-port-security | --disable-port-security]
    [--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>]]
    [--no-allowed-address]
    [--data-plane-status <status>]
    [--tag <tag>]
    [--no-tag]
    <port>
openstack port unset
    [--fixed-ip subnet=<subnet>,ip-address=<ip-address>]
    [--binding-profile <binding-profile-key>]
    [--security-group <security-group>]
    [--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>]]
    [--qos-policy]
    [--data-plane-status]
    [--numa-policy]
    [--tag <tag> | --all-tag]
    <port>
 
openstack port show <port> 
security group

安全组是虚拟的网络防火墙,网络中的服务器、端口等资源可以受其影响。

安全组是安全组规则的容器。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建安全组
openstack security group create
    [--description <description>]
    [--project <project>]
    # 是否五状态
    [--stateful | --stateless]
    [--project-domain <project-domain>]
    [--tag <tag> | --no-tag]
    <name>
 
openstack security group delete <group> [<group> ...]
 
openstack security group list
    [--sort-column SORT_COLUMN]
    [--project <project>]
    [--project-domain <project-domain>]
    [--tags <tag>[,<tag>,...]]
    [--any-tags <tag>[,<tag>,...]]
    [--not-tags <tag>[,<tag>,...]]
    [--not-any-tags <tag>[,<tag>,...]]
    [--all-projects]
 
openstack security group set
    [--name <new-name>]
    [--description <description>]
    [--stateful | --stateless]
    [--tag <tag>]
    [--no-tag]
    <group>
openstack security group unset [--tag <tag> | --all-tag] <group>
 
openstack security group show <group>
security group rule

安全组中的一条规则。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 创建一条规则
openstack security group rule create
    # 此规则针对的远程IP,可以使用CIDR
    #   0.0.0.0/0 表示默认IPv4规则
    #   ::/0 表示默认IPv6规则
    [--remote-ip <ip-address> | --remote-group <group>]
    # 目标(远程)端口。可以使用端口范围,例如  137:139
    # 对于TCP/UDP必须,对于ICMP忽略此字段
    [--dst-port <port-range>]
    # 协议: 默认any表示任何协议
    #   ah, dccp, egp, esp, gre, icmp, igmp, ipv6-encap, ipv6-frag, ipv6-icmp, ipv6-nonxt,
    #   ipv6-opts, ipv6-route, ospf, pgm, rsvp, sctp, tcp, udp, udplite, vrrp
    [--protocol <protocol>]
    [--description <description>]
    # 针对特定的ICMP类型
    [--icmp-type <icmp-type>]
    [--icmp-code <icmp-code>]
    # 此规则针对入站还是出站流量,默认ingress
    [--ingress | --egress]
    # 以太网上的流量类型  IPv4, IPv6
    [--ethertype <ethertype>]
    [--project <project>]
    [--project-domain <project-domain>]
    # 所属的组
    <group>
 
openstack security group rule delete <rule> [<rule> ...]
 
openstack security group rule list
    [--sort-column SORT_COLUMN]
    [--protocol <protocol>]
    [--ethertype <ethertype>]
    [--ingress | --egress]
    [--long]
    [--all-projects]
    [<group>]
 
openstack security group rule show <rule>
 
 
# 完全开放默认安全组
openstack security group rule create --remote-ip 0.0.0.0/0  --protocol any --ingress --ethertype IPv4 default
openstack security group rule create --remote-ip ::/0  --protocol any --ingress --ethertype IPv6 default
openstack security group rule create --remote-ip 0.0.0.0/0  --protocol any --egress --ethertype IPv4 default
openstack security group rule create --remote-ip ::/0  --protocol any --egress --ethertype IPv6 default
network auto allocated topology

可以让管理员快速的设置某个项目的外部连接性。每个项目只能有一个此对象。

Shell
1
2
3
4
5
6
7
8
9
openstack network auto allocated topology create
    [--project <project>]
    [--project-domain <project-domain>]
    [--check-resources]
    [--or-show]
 
openstack network auto allocated topology delete
    [--project <project>]
    [--project-domain <project-domain>]
network flavor

扩展network flavor允许用户在创建资源时,选择管理员配置的“网络风格”

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 添加一个service profile到network flavor
openstack network flavor add profile <flavor> <service-profile>
openstack network flavor remove profile <flavor> <service-profile>
 
# 创建network flavor
openstack network flavor create
    # 此flavor应用到的网络服务类型,例如VPN
    # 执行 openstack network service provider list  获得网络服务类型列表
    --service-type <service-type>
    [--description DESCRIPTION]
    [--project <project>]
    [--project-domain <project-domain>]
    [--enable | --disable]
    <name>
 
openstack network flavor delete <flavor> [<flavor> ...]
 
openstack network flavor list [--sort-column SORT_COLUMN]
 
openstack network flavor set
    [--description DESCRIPTION]
    [--disable | --enable]
    [--name <name>]
    <flavor>
 
openstack network flavor show <flavor>
network flavor profile

用于管理员创建/删除/列出/显示网络服务的profile。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
openstack network flavor profile create
    [--project <project>]
    [--project-domain <project-domain>]
    [--description <description>]
    [--enable | --disable]
    [--driver DRIVER]
    [--metainfo METAINFO]
 
openstack network flavor profile delete
    <flavor-profile>
    [<flavor-profile> ...]
 
openstack network flavor profile list [--sort-column SORT_COLUMN]
 
openstack network flavor profile set
    [--project-domain <project-domain>]
    [--description <description>]
    [--enable | --disable]
    [--driver DRIVER]
    [--metainfo METAINFO]
    <flavor-profile>
 
openstack network flavor profile show <flavor-profile>
network meter 

允许管理员来度量某个IP范围的流量。需要L3 metering extension

Shell
1
2
3
4
5
6
7
8
9
10
11
12
openstack network meter create
    [--description <description>]
    [--project <project>]
    [--project-domain <project-domain>]
    [--share | --no-share]
    <name>
 
openstack network meter delete <meter> [<meter> ...]
 
openstack network meter list [--sort-column SORT_COLUMN]
 
openstack network meter show <meter>
network meter rule

为某个meter设置度量网络流量的规则。需要L3 metering extension

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
openstack network meter rule create
    [--project <project>]
    [--project-domain <project-domain>]
    [--exclude | --include]
    [--ingress | --egress]
    [--remote-ip-prefix <remote-ip-prefix>]
    [--source-ip-prefix <remote-ip-prefix>]
    [--destination-ip-prefix <remote-ip-prefix>]
    <meter>
 
openstack network meter rule delete
    <meter-rule-id>
    [<meter-rule-id> ...]
 
openstack network meter rule list [--sort-column SORT_COLUMN]
 
openstack network meter rule show <meter-rule-id>
network qos policy

将一组网络QoS规则组合到一起,可以应用到一个网络或端口。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
openstack network qos policy create
    [--description <description>]
    [--share | --no-share]
    [--project <project>]
    [--project-domain <project-domain>]
    [--default | --no-default]
    <name>
 
openstack network qos policy delete <qos-policy> [<qos-policy> ...]
 
openstack network qos policy list
    [--sort-column SORT_COLUMN]
    [--project <project>]
    [--project-domain <project-domain>]
    [--share | --no-share]
 
openstack network qos policy set
    [--name <name>]
    [--description <description>]
    [--share | --no-share]
    [--default | --no-default]
    <qos-policy>
 
openstack network qos policy show <qos-policy>
network qos rule

上述policy中的一个规则

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
openstack network qos rule create
    # QoS规则类型
    # minimum-bandwidth, dscp-marking, bandwidth-limit
    [--type <type>]
    # 最大带宽
    [--max-kbps <max-kbps>]
    # 最大突发带宽。如果不指定或者设置为0表示自动,为80%的最大带宽,适合于典型的TCP流量
    [--max-burst-kbits <max-burst-kbits>]
    # DSCP标记,可以是0,或者8-56之间的偶数(42 44 50 52 54不可以)
    [--dscp-mark <dscp-mark>]
    # 最小保障的带宽
    [--min-kbps <min-kbps>]
    # 此规则是用于入站还是出站的流量(从当前项目的角度)
    [--ingress | --egress]
    # 此规则加到哪个策略中
    <qos-policy>
 
openstack network qos rule delete <qos-policy> <rule-id>
 
openstack network qos rule list
    [--sort-column SORT_COLUMN]
    <qos-policy>
 
openstack network qos rule set
    [--max-kbps <max-kbps>]
    [--max-burst-kbits <max-burst-kbits>]
    [--dscp-mark <dscp-mark>]
    [--min-kbps <min-kbps>]
    [--ingress | --egress]
    <qos-policy>
    <rule-id>
 
openstack network qos rule show <qos-policy> <rule-id>
network segment

表示一个网络中的隔离的L2的段。一个(虚拟)网络可以包含多个段,同一个网络中的段的L2通信不被保证。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 创建一个网络段
openstack network segment create
    [--description <description>]
    # 物理网络的名字
    [--physical-network <physical-network>]
    # 段的名字
    [--segment <segment>]
    # 此段属于的虚拟网络的名字
    --network <network>
    # 此段的网络类型:flat, geneve, gre, local, vlan, vxlan
    --network-type <network-type>
    <name>
 
openstack network segment delete
    <network-segment>
    [<network-segment> ...]
 
openstack network segment list
    [--sort-column SORT_COLUMN]
    [--long]
    [--network <network>]
 
openstack network segment set
    [--description <description>]
    [--name <name>]
    <network-segment>
 
openstack network segment show <network-segment>
network segment range

用于多租户下的网络段分配。可以让管理员全局的,或者基于用户的,来控制网络段范围。