OpenStack学习笔记
OpenStack是一个开源的IaaS解决方案,使用它,你可以通过仪表盘或者利用OpenStack API控制/Provision大规模的计算、存储、网络资源池。
通过“驱动”,OpenStack支持大量商业、开源的计算、存储、网络相关技术框架,从而能够管理各种各样的基础设施。不管是裸金属机器、虚拟机、还是容器,都可以基于OpenStack进行管理,并共享网络、存储等底层资源:
Kubernetes、CloudFoundry等PaaS平台可以构建在OpenStack之上。
OpenStack由若干子项目组成,它们围绕着计算、存储、网络这三个核心概念组织:
- 计算:提供并管理网络中大量的虚拟机,主要由Nova子项目负责
- 存储:供服务器、应用程序使用的对象存储、块存储,分别由Swift、Cinder子项目负责
- 网络:可拔插、可扩容、API驱动的网络和IP管理
这三类子项目还具有一些共享的服务:identity、镜像管理(image management)、一个基于Web的UI接口。
OpenStack项目的总览图如下,其中粗体标出了它的核心子项目,包括Horizon、Heat、Nova、Neutron、Swift、Cinder等:
以Bigdata as Service场景为例,各子项目的交互关系如下图:
简单的说明一下:
- Keystone提供身份验证服务
- Ceilometer提供监控服务
- Horizon提供一个管理UI
- Nova负责分配虚拟机
- Glance提供镜像服务,镜像文件存放在Swift中
- Cinder为虚拟机提供块存储卷
- Cinder将卷备份到Swift中
- Neuron为虚拟机提供网络连接
每个子项目,或者叫OpenStack服务,都通过公共的Identity Service进行身份验证,服务之间通过公共API进行交互。每个服务至少包含一个API进程,此进程监听API请求,进行预处理然后转交给服务的其它部分进行处理。
每个服务可以有多个进程,这些进程之间的通信方式通常是AMQP。服务的状态持久化在数据库中。多种消息代理、RDBMS被支持,例如RabbitMQ、MySQL、MariaDB。
用户访问OpenStack的方式有几种:
- 通过Horizon提供的Web仪表盘
- 提供CLI客户端
- 提供SDK进行编程
不管是何种方式,在底层都会向不同的OpenStack服务发送REST请求。
Nova是OpenStack云中的计算组织控制器。支持OpenStack云中实例(instances)生命周期的所有活动都由Nova处理。这样使得Nova成为一个负责管理计算资源、网络、认证、所需可扩展性的平台。
Neutron是openstack核心项目之一,提供云计算环境下的虚拟网络功能。OpenStack网络(neutron)管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础设施(PNI)的接入层。
Cinder接口提供了一些标准功能,允许创建和附加块设备到虚拟机,如“创建卷”,“删除卷”和“附加卷”。还有更多高级的功能,支持扩展容量的能力,快照和创建虚拟机镜像克隆。
Octavia 是 openstack lbaas的支持的一种后台程序,提供为虚拟机流量的负载均衡。实质是类似于trove,调用 nova 以及neutron的api生成一台安装好haproxy和keepalived软件的虚拟机,并连接到目标网路。
Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据。这些数据可以检索、调整和必要时进行更新。Swift最适合虚拟机镜像、图片、邮件和存档备份这类数据的存储。
Glance(OpenStack Image Service)是一个提供发现,注册,和下载镜像的服务。Glance提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(比如 OpenStack Swift)。
Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizon 所提供的 DashBoard 服务 , 管理员可以使用通过 WEB UI 对 Openstack 整体云环境进行管理 , 并可直观看到各种操作结果与运行状态。
Ironic包含一个API和多个插件,用于安全性和容错性地提供物理服务器。它可以和nova结合被使用为hypervisor驱动,或者用bifrost使用为独立服务。默认情况下,它会使用PXE和IPMI去与裸金属机器去交互。Ironic也支持使用供应商的插件而实现额外的功能。
Cyborg(以前称为Nomad)旨在为加速资源(即FPGA,GPU,SoC, NVMe SSD,DPDK/SPDK,eBPF/XDP …)提供通用管理框架。
kolla 的使命是为 openstack 云平台提供生产级别的、开箱即用的交付能力。kolla 的基本思想是一切皆容器,将所有服务基于 Docker 运行,并且保证一个容器只跑一个服务(进程),做到最小粒度的运行 docker。
Kubernetes Kuryr是 OpenStack Neutron 的子项目,其主要目标是通过该项目来整合 OpenStack 与Kubernetes 的网络。该项目在 Kubernetes 中实现了原生 Neutron-based 的网络,因此使用 Kuryr-Kubernetes 可以让你的 OpenStack VM 与 Kubernetes Pods 能够选择在同一个子网上运作,并且能够使用 Neutron 的 L3 与 Security Group 来对网络进行路由,以及阻挡特定来源 Port。
Manila项目全称是File Share Service,文件共享即服务,用来提供云上的文件共享,支持CIFS协议和NFS协议。
Tacker是一个在OpenStack内部孵化的项目, 他的作用是NVF管理器,用于管理NVF的生命周期。Tacker的重点是配置VNF, 并监视他们。如果需要,还可重启和/或扩展(自动修复)NVF。整个进程贯穿ETSIMANO所描述的整个生命周期。
显示详细配置信息:
1 2 |
# --unmask表示明文显示密码 openstack configuration show [--mask | --unmask] |
一个Domain,是用户、组、项目的集合。任何组、项目仅仅属于单个Domain。
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> |
管理项目
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> |
清除和指定项目关联的资源
1 2 3 4 5 |
openstack project purge [--dry-run] [--keep-project] (--auth-project | --project <project>) [--project-domain <project-domain>] |
用户的组。
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> |
用户管理
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> |
可以创建角色,将角色映射给用户或组。
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> |
角色和用户的映射关系。
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] |
指定角色之间的包含关系。
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] |
提供特定项目中,用户之间的角色代理,支持可选的替身机制(impersonation)。需要 OS-TRUST扩展。
在Identity服务的OS-OAUTH1扩展中使用,用于创建request token 、access token,仅仅支持Identity v3。
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> |
管理凭证:
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> |
使用应用凭证,用户可以给自己的应用程序授予对云资源的有限访问权限。
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> |
对应用程序凭证的权限进行细粒度控制。每个访问规则包含一下要素:
服务类型 + 请求路径 + 请求方法
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> |
创建或吊销一个令牌
1 2 3 |
openstack token issue openstack token revoke <token> |
Identity服务的OS-OAUTH1扩展使用访问令牌。consumer可以代表被授权用户来获得新的Identity API token。
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> |
Identity服务的OS-OAUTH1扩展使用请求令牌。consumer使用此令牌来请求access token
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>] |
策略是一组规则,可以被远程服务消费。
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> |
基于RBAC的、针对网络资源的授权控制策略。让用户获得某个项目的网络资源的访问权限
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> |
很多API都支持资源配额
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 |
用于在项目级别进行资源配额。
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> |
用于定义OpenStack部署中的默认资源限制
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> |
显示计算、存储资源用量的限制
1 2 3 4 5 6 |
openstack limits show [--sort-column SORT_COLUMN] (--absolute | --rate) [--reserved] [--project <project>] [--domain <domain>] |
显示项目的资源用量
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>] |
区域是OpenStack部署中的最大的分区。你可以配置多个sub-region,甚至形成树形结构。
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> |
可用区是云存储、计算、网络服务的逻辑分区。对等的AZ具有构成HA的效果,这和Region不同。
1 2 3 4 5 6 7 |
# 列出可用区 openstack availability zone list [--sort-column SORT_COLUMN] [--compute] [--network] [--volume] [--long] |
聚合是一组分组host的机制:
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] |
运行Hypervisor的物理机器。
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> |
1 2 3 4 5 6 |
openstack hypervisor list [--sort-column SORT_COLUMN] [--matching <hostname>] [--long] openstack hypervisor show <hypervisor> |
1 |
openstack hypervisor stats show |
OpenSSH公钥管理,用于访问创建的server(虚拟机)。
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> |
显示所有服务的版本、端点、是否弃用之类的信息
1 |
openstack versions show |
显示服务的类型、名称、端点列表:
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 | # | | | | # +-----------+-----------+-----------------------------------------+ |
很多OpenStack API包含API扩展,这些扩展提供额外的功能。
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> |
管理服务的API端点
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> |
一组端点,可以一起关联到项目。
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> |
表示一种虚拟机的规格。
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 | # +----+-----------+-------+------+-----------+-------+-----------+ |
管理镜像。
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 |
计算代理是和Hypervisor相关的,且仅仅被 XenAPI hypervisor driver支持。
Nova相关的服务。
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> |
显示虚拟机的控制台日志:
1 |
openstack console log show [--lines <num-lines>] <server> |
打印各种类型的控制台URL:
1 2 3 |
openstack console url show [--novnc | --xvpvnc | --spice | --rdp | --serial | --mks] <server> |
基于某种策略对服务器进行分组。
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)
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 |
为服务器添加固定IP地址:
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> |
为服务器添加浮动IP地址:
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> |
将服务器连接到某个网络
1 2 3 |
openstack server add network [--tag <tag>] <server> <network> openstack server remove network <server> <network> |
将某个端口连接到服务器
1 2 3 |
openstack server add port [--tag <tag>] <server> <port> openstack server remove port <server> <port> |
将服务器添加到安全组
1 2 3 |
openstack server add security group <server> <group> openstack server remove security group <server> <group> |
挂载(Attach)一个卷给服务器
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 |
服务器迁移,就是将一台宿主机上的实例,转移到另外一台上运行。
OpenStack支持四种迁移模式:热迁移、冷迁移、升降配(resize)、重建(evacuation)
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>] |
扩/缩容服务器为新的flavor。实现方式是:
- 创就一个新的服务器
- 复制文件到新服务器
扩/缩容操作分为两步完成:第一步迁移,第二步确认
1 2 3 4 |
openstack server resize [--flavor <flavor> | --confirm | --revert] [--wait] <server> |
1 |
openstack server resize confirm <server> |
1 |
openstack server resize revert <server> |
将服务器迁移到另外一个宿主机上。
迁移操作是基于resize操作实现的:
- 创建一个新的实例,使用相同的flavor
- 从原始磁盘上拷贝内容到新磁盘
和resize一样,迁移操作是分两步完成的:
- 执行上述两步的迁移操作
- 让用户确认,迁移是否成功并移除酒实例,还是执行revert操作 —— 删除新实例并重启老的
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> |
确认迁移
1 |
openstack server migrate confirm <server> |
撤销迁移
1 |
openstack server migrate revert <server> |
将服务器在另外一个宿主机上重建。这个命令的使用场景是:实例已经运行,但是后来它所在的宿主机宕掉了。 也就是说,仅当管理此实例的compute service宕机了,才可以使用此命令。
如果服务器实例使用临时的(ephemeral)root磁盘,此磁盘位于非共享存储上,则使用原始的glance镜像重建服务器。连接到原实例的port、挂载的卷被保留。
如果服务器实例从volume启动,或者跟磁盘位于共享存储上,则新建实例会重用此启动盘。
暂停服务器,状态保存在内存中
1 |
openstack server pause <server> [<server> ...] |
取消暂停服务器
1 |
openstack server unpause <server> [<server> ...] |
暂停服务器,状态保存在磁盘中
1 |
openstack server suspend <server> [<server> ...] |
从暂停中恢复
1 |
openstack server resume <server> [<server> ...] |
回退状态为软删除的服务器
1 |
openstack server restore <server> [<server> ...] |
重启服务器
1 2 |
# 强行立即重启 openstack server reboot [--hard | --soft] [--wait] <server> |
启动服务器
1 |
openstack server start <server> [<server> ...] |
停止服务器
1 |
openstack server stop <server> [<server> ...] |
重建服务器
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> |
让服务器进入rescue模式
1 2 3 4 |
openstack server rescue [--image <image>] [--password <password>] <server> |
从rescue模式恢复:
1 |
openstack server unrescue <server> |
将服务器实例作为镜像,保存在glance中,然后在宿主机上删除此服务器
1 |
openstack server shelve <server> [<server> ...] |
将shelve的实例恢复
1 2 3 4 |
openstack server unshelve [--availability-zone AVAILABILITY_ZONE] <server> [<server> ...] |
通过SSH连接到服务器
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 |
创建服务器的Dump文件。这会触发一个crash dump(例如Linux的kdump)
1 |
openstack server dump create <server> [<server> ...] |
(软)删除服务器
1 |
openstack server delete [--wait] <server> [<server> ...] |
设置服务器属性
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> |
锁定实例,这样非admin用户就不能对它进行任何操作。
1 |
openstack server lock [--reason <reason>] <server> [<server> ...] |
解锁服务器
1 |
openstack server unpause <server> [<server> ...] |
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>] |
1 2 |
# 显示诊断信息 openstack server show [--diagnostics] <server> |
备份一个运行中的服务器实例,将其磁盘保存为镜像,存放在Glance中。
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> |
从运行中的实例创建磁盘镜像,并存放到Glance中。
1 |
openstack server image create [--name <image-name>] [--wait] <server> |
服务器事件,记录了针对服务器的各种操作。事件由操作类型(create, delete, reboot ...)+ 操作结果(success, error) + 开始/结束时间组成。
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> |
一个网络服务提供者,表示一个特定的、实现了网络服务的驱动:
1 |
openstack network service provider list [--sort-column SORT_COLUMN] |
所谓网络,是指一个独立的(isolated)的L2网段。OpenStack具有两种类型的网络:
- project:完全隔离的、不和其它项目共享的网络。自服务网络
- provider:映射到现有的、数据中心中的物理网络,为server或其它资源提供外部网络访问
仅仅管理员可以创建provider网络
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> |
子网是一段IP地址以及关联的配置状态。当新的Port接入到网络中时,子网用于向Port分配IP地址。
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> |
子网池中包含若干CIDR格式的子网前缀,这些前缀用于分配给子网。
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> |
表示IPv4或IPv6的地址范围,属于某个特定项目,可以被多个项目共享。
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> |
虚拟路由器是一个逻辑组件,能够在不同网络之间分发数据包。虚拟路由器也提供L3和NAT转发功能,让虚拟网络中的服务器能够访问外部流量。
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> |
端口是网络上的接入点,它可以将单个设备(例如server上的NIC)连接到网络。端口也描述了其关联的网络配置,例如MAC地址、IP地址
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> |
安全组是虚拟的网络防火墙,网络中的服务器、端口等资源可以受其影响。
安全组是安全组规则的容器。
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> |
安全组中的一条规则。
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 |
可以让管理员快速的设置某个项目的外部连接性。每个项目只能有一个此对象。
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允许用户在创建资源时,选择管理员配置的“网络风格”
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> |
用于管理员创建/删除/列出/显示网络服务的profile。
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> |
允许管理员来度量某个IP范围的流量。需要L3 metering extension
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> |
为某个meter设置度量网络流量的规则。需要L3 metering extension
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> |
将一组网络QoS规则组合到一起,可以应用到一个网络或端口。
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> |
上述policy中的一个规则
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> |
表示一个网络中的隔离的L2的段。一个(虚拟)网络可以包含多个段,同一个网络中的段的L2通信不被保证。
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> |
用于多租户下的网络段分配。可以让管理员全局的,或者基于用户的,来控制网络段范围。