管理配额¶
警告
从 Nova 28.0.0 (2023.2 Bobcat) 版本开始,nova.quota.DbQuotaDriver 已被弃用,默认配额驱动程序配置将在 29.0.0 (2024.1 Caracal) 版本中更改为 nova.quota.UnifiedLimitsDriver。请参阅 统一限制文档。
注意
本节提供有关配额功能的部署信息。有关配额的最终用户信息,包括可用配额类型的相关信息,请参阅 用户指南。
为了防止系统容量在没有通知的情况下耗尽,您可以设置配额。配额是运行限制。例如,可以控制每个项目允许的千兆字节数,以便优化云资源。配额可以在项目级别和项目用户级别强制执行。
从 16.0.0 Pike 版本开始,nova 中的配额计算系统经过了彻底修改,旧的预留/提交/回滚流程已更改为在执行任何操作(例如创建或调整服务器大小)时 计算资源使用量。将通过计算相关资源的当前使用量来执行检查,然后,如果 quota.recheck_quota 为 True,将执行另一个检查以确保初始检查仍然有效。
默认情况下,资源使用量使用 API 和 cell 数据库进行计算,但 nova 可以配置为在不使用 cell 数据库的情况下计算某些资源的使用量。有关详细信息,请参阅 来自 placement 的配额使用量。
使用命令行界面,您可以管理 nova 的配额,以及 cinder 和 neutron 的配额。通常,您会更改默认值,因为例如,某个项目需要多于十个卷或在计算节点上需要 1 TB 的存储空间。
检查配额¶
在为给定资源和项目计算限制时,将按以下顺序进行以下检查
项目特定限制
根据资源,数据库中的
quotas或project_user_quotas表中是否存在该资源的特定项目限制?如果是,则将其用作限制。您可以使用以下命令创建这些资源:$ openstack quota set --instances 5 <project>
默认限制
检查数据库中
quota_classes表中是否存在给定资源的硬限制,用于default配额类。如果是,则将其用作限制。您可以使用以下命令修改资源的默认配额限制:$ openstack quota set --instances 5 --class default
注意
nova 仅支持
default类。配置驱动的限制
如果上述方法未提供资源限制,则依赖于
quota配置组中的配置选项来获取默认限制。
注意
API 在 quota_classes 表中设置限制。一旦通过 default 配额类设置了默认限制,它将优先于配置选项中的任何更改。换句话说,一旦您通过 API 更改了内容,就必须将其与配置值同步,或者手动从数据库中删除默认限制,因为没有 REST API 可以从数据库中删除配额类值。
来自 placement 的配额使用量¶
从 Train (20.0.0) 版本开始,可以配置从 placement 服务和 API 数据库中的实例映射计算核心和 RAM 的配额使用量,而不是从 cell 数据库计算资源。这使得配额使用量计算在 停机或性能不佳的 cell 存在时具有弹性。
通过 quota.count_usage_from_placement 配置选项可以选择启用来自 placement 的配额使用量计算
[quota]
count_usage_from_placement = True
在选择启用来自 placement 的配额使用量计算时,需要注意以下几点:
计算的使用量在多个 Nova 部署共享 placement 部署的环境中将不准确,因为目前 placement 无法在不同的 Nova 部署之间划分资源提供者。正在运行共享 placement 部署的多个 Nova 部署的运营商不应将
quota.count_usage_from_placement配置选项设置为True。调整大小的行为将不同。在调整大小期间,资源分配将保留在源和目标上(即使在同一主机上,请参阅 https://bugs.launchpad.net/nova/+bug/1790204),直到确认或撤销调整大小。处于此状态的服务器的配额使用量将增加,运营商应权衡优势和劣势,然后再启用
quota.count_usage_from_placement。在启用 从 placement 计算配额使用量 之前,必须完成
populate_queued_for_delete和populate_user_id在线数据迁移。在数据迁移完成之前,系统将回退到从 cell 数据库进行旧版配额使用量计算,具体取决于每次配额检查期间数据库 EXISTS 查询的结果,如果quota.count_usage_from_placement设置为True。希望避免 EXISTS 查询性能影响的运营商应等到使用nova-manage db online_data_migrations完成在线数据迁移后,再将quota.count_usage_from_placement配置选项设置为True。处于
ERROR状态的未计划服务器的行为将不同。从未计划到计算主机的处于ERROR状态的服务器将没有 placement 分配,因此不会消耗核心和 RAM 的配额使用量。处于
SHELVED_OFFLOADED状态的服务器的行为将不同。处于SHELVED_OFFLOADED状态的服务器将没有 placement 分配,因此不会消耗核心和 RAM 的配额使用量。请注意,由于此原因,如果用户没有足够的配额来支持需要由服务器卸架的内核和 RAM,则卸架服务器的请求可能会被拒绝。
已知问题¶
如果未 从 placement 计算配额使用量,则停机或性能不佳的 cell 可能会影响配额计算。有关详细信息,请参阅 cell 文档。
未来计划¶
分层配额¶
长期以来,人们一直希望支持利用身份服务中分层项目支持的分层或嵌套配额。有关详细信息,请参阅 统一限制 规范。
配置¶
查看和更新默认配额值¶
要列出项目的默认配额,请运行
$ openstack quota show --default
注意
此列表显示所有服务和仅 nova 的默认配额。
要更新新项目的默认值,请运行
$ openstack quota set --class --instances 15 default
查看和更新项目或类的配额值¶
要列出项目的配额,请运行
$ openstack quota show PROJECT
注意
此列表显示所有服务和仅 nova 的项目配额。
要更新项目的配额,请运行
$ openstack quota set --QUOTA QUOTA_VALUE PROJECT
要更新类的配额,请运行
$ openstack quota set --class --QUOTA QUOTA_VALUE CLASS
注意
nova 仅支持 default 类。
例如
$ openstack quota set --instances 12 my-project
$ openstack quota show my-project
+----------------------+----------------------------------+
| Field | Value |
+----------------------+----------------------------------+
| backup-gigabytes | 1000 |
| backups | 10 |
| cores | 32 |
| fixed-ips | -1 |
| floating-ips | 10 |
| gigabytes | 1000 |
| health_monitors | None |
| injected-file-size | 10240 |
| injected-files | 5 |
| injected-path-size | 255 |
| instances | 12 |
| key-pairs | 100 |
| l7_policies | None |
| listeners | None |
| load_balancers | None |
| location | None |
| name | None |
| networks | 20 |
| per-volume-gigabytes | -1 |
| pools | None |
| ports | 60 |
| project | c8156b55ec3b486193e73d2974196993 |
| project_name | project |
| properties | 128 |
| ram | 65536 |
| rbac_policies | 10 |
| routers | 10 |
| secgroup-rules | 50 |
| secgroups | 50 |
| server-group-members | 10 |
| server-groups | 10 |
| snapshots | 10 |
| subnet_pools | -1 |
| subnets | 20 |
| volumes | 10 |
+----------------------+----------------------------------+
要查看 openstack quota show 和 openstack quota set 命令的选项列表,请运行
$ openstack quota show --help
$ openstack quota set --help
查看和更新项目用户的配额值¶
注意
用户特定的配额是遗留的,将在迁移到 统一限制 完成后删除。添加用户特定配额是为了提供两层分层配额,此功能已经在统一限制中提供。因此,以下命令未移植到 openstackclient 并且不会移植。
要显示特定项目用户的配额,请运行
$ nova quota-show --user USER PROJECT
要更新特定项目用户的配额,请运行
$ nova quota-update --user USER --QUOTA QUOTA_VALUE PROJECT
例如
$ projectUser=$(openstack user show -f value -c id USER)
$ project=$(openstack project show -f value -c id PROJECT)
$ nova quota-update --user $projectUser --instance 12 $project
$ nova quota-show --user $projectUser --tenant $project
+-----------------------------+-------+
| Quota | Limit |
+-----------------------------+-------+
| instances | 12 |
| cores | 20 |
| ram | 51200 |
| floating_ips | 10 |
| fixed_ips | -1 |
| metadata_items | 128 |
| injected_files | 5 |
| injected_file_content_bytes | 10240 |
| injected_file_path_bytes | 255 |
| key_pairs | 100 |
| security_groups | 10 |
| security_group_rules | 20 |
| server_groups | 10 |
| server_group_members | 10 |
+-----------------------------+-------+
要查看当前用户的配额使用量,请运行
$ nova limits --tenant PROJECT
例如
$ nova limits --tenant my-project
+------+-----+-------+--------+------+----------------+
| Verb | URI | Value | Remain | Unit | Next_Available |
+------+-----+-------+--------+------+----------------+
+------+-----+-------+--------+------+----------------+
+--------------------+------+-------+
| Name | Used | Max |
+--------------------+------+-------+
| Cores | 0 | 20 |
| Instances | 0 | 10 |
| Keypairs | - | 100 |
| Personality | - | 5 |
| Personality Size | - | 10240 |
| RAM | 0 | 51200 |
| Server Meta | - | 128 |
| ServerGroupMembers | - | 10 |
| ServerGroups | 0 | 10 |
+--------------------+------+-------+
注意
由于 Compute API 的原因,nova limits 命令会生成一个空表作为结果,出于向后兼容的目的,它会打印一个空列表。
要查看 nova quota-show 和 nova quota-update 命令的选项列表,请运行
$ nova help quota-show
$ nova help quota-update