管理配额

警告

从 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 的配额,以及 cinderneutron 的配额。通常,您会更改默认值,因为例如,某个项目需要多于十个卷或在计算节点上需要 1 TB 的存储空间。

检查配额

在为给定资源和项目计算限制时,将按以下顺序进行以下检查

  1. 项目特定限制

    根据资源,数据库中的 quotasproject_user_quotas 表中是否存在该资源的特定项目限制?如果是,则将其用作限制。您可以使用以下命令创建这些资源:

    $ openstack quota set --instances 5 <project>
    
  2. 默认限制

    检查数据库中 quota_classes 表中是否存在给定资源的硬限制,用于 default 配额类。如果是,则将其用作限制。您可以使用以下命令修改资源的默认配额限制:

    $ openstack quota set --instances 5 --class default
    

    注意

    nova 仅支持 default 类。

  3. 配置驱动的限制

    如果上述方法未提供资源限制,则依赖于 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_deletepopulate_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 showopenstack 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-shownova quota-update 命令的选项列表,请运行

$ nova help quota-show
$ nova help quota-update