配置选项以控制未设置统一限制的行为

https://blueprints.launchpad.net/nova/+spec/unified-limits-nova-unset-limits

在使用 [quota]driver 设置为 nova.quota.UnifiedLimitsDriver 的 Nova 使用的 oslo.limit 配额强制执行库中的默认行为是,将未设置注册限制的资源视为限制为零。这种行为可能过于严格,尤其是在启用统一限制配额的升级场景中(即,如果我们希望将统一限制设为默认值)。如果在 Nova 内部使此行为可配置,我们可以帮助防止管理员/操作员升级或安装 Nova 后,由于超过配额而突然导致所有 API 请求被拒绝的情况。

问题描述

问题集中在使用 oslo.limit 配额强制执行库时,如果给定资源未设置注册限制。如果未找到资源的注册限制,则 enforce 函数会将该资源的限制视为 0,并且所有针对该资源的请求都将因超过配额而失败。

我们希望能够将默认配额驱动程序更改为 UnifiedLimitsDriver,但上述行为引发了有关更改默认值的担忧。

如果我们要在 Nova 中将统一限制配额设为默认值,那么在升级之前未审核所有资源及其限制的任何管理员/操作员都可能在升级后立即遭受 Nova API 的完全服务拒绝。如果 Keystone 中缺少一个资源的注册限制,就可能发生这种情况。

虽然理想情况下,管理员/操作员在升级场景中不会遗漏设置任何注册限制,但即使缺少一个资源限制,惩罚也相当严厉,因为 API 会拒绝该资源的所有请求,从而导致立即出现紧急情况。

用例

  • 作为管理员/操作员,我希望在 Keystone 中缺少资源的注册限制时收到警告,而不是让涉及该资源的所有 API 请求因超过配额而被拒绝

提议的变更

此规范的建议是添加一个新的配置选项 [quota]strict_unified_limits,其默认值为 True。当设置为 True 时,Nova API 将使用 oslo.limit 的原生行为,将未设置的统一限制视为零。当设置为 False 时,Nova API 将将未设置的统一限制视为无限制或“不关心”。当设置为 True 时,Nova API 将使用 oslo.limit 的原生行为,将未设置的统一限制视为零。

[quota]strict_unified_limits = False 的唯一例外是,如果没有设置任何注册限制。 注册限制 是部署全局的默认限制,并且在项目特定限制未设置的任何情况下都适用。如果启用了统一限制但未设置任何注册限制,则所有配额检查都将失败,并且每次强制执行配额时都会记录一条警告消息,指出完全没有设置任何限制。启用统一限制但未设置统一限制的组合被认为是一种错误状态,而不是管理员/操作员有意为之。我们也可以考虑在启用统一限制但未设置任何限制的情况下,使 nova-api 和 nova-conductor 服务无法启动。

所提出的配置选项的目的是为管理员/操作员提供一些灵活性,以便在未设置所有资源的注册限制的情况下解决问题,而无需立即拒绝 API 请求。当然,在管理员/操作员设置注册限制或禁用统一限制配额之前,可能会存在允许分配比预期更多的资源的风险。每当对没有设置注册限制的资源强制执行配额时,都会记录一条警告,因为我们不希望未设置的限制成为永久状态。管理员/操作员可以通过为警告消息中列出的资源设置注册限制来停止警告日志。

备选方案

或者,可以对 oslo.limit 库进行更改,以不同地处理缺少的注册限制 [1]。这将更加困难,因为 oslo.limit 具有既定的默认行为,并且为所有项目提供新的期望行为可能是不现实的。

数据模型影响

REST API 影响

安全影响

如果 [quota]strict_unified_limits 设置为 False,在管理员/操作员采取措施设置注册限制或禁用统一限制配额之前,资源可能会在警告记录和采取行动之间的时间窗口内分配超出管理员/操作员预期的情况。

通知影响

其他最终用户影响

作为这项工作的一部分,nova-manage limits migrate_to_unified_limits CLI 命令将得到增强,以扫描数据库中的 flavor,检测没有设置注册限制的资源,并在输出中显示它们。目的是帮助管理员/操作员捕获所有资源并为它们设置限制,然后再启用统一限制配额。

性能影响

[quota]strict_unified_limits 设置为 False 的性能影响应该相对较小,因为它在每次配额检查失败并且相关资源的限制为 0 时都会增加一个额外的 Keystone API 调用。

其他部署者影响

管理员/操作员需要在升级 Nova 之前做好准备,并将 [quota]strict_unified_limits 设置为 False,如果他们希望在启用统一限制配额时最初放宽配额检查。

开发人员影响

升级影响

如果管理员/操作员在启用统一限制配额时使用 UnifiedLimitsDriver,并且同时将 [quota]strict_unified_limits 设置为 True,则 [quota]strict_unified_limits 配置选项只会影响升级。

如果部署者决定在升级期间切换到 UnifiedLimitsDriver,并在升级之前将 [quota]strict_unified_limits 设置为 False,则有可能在他们对记录的警告采取行动并为缺少限制的资源设置注册限制之前,资源可能会分配超出部署者预期的情况。

实现

负责人

主要负责人

melwitt

其他贡献者

功能联络人

功能联络人

melwitt

工作项

  • 添加一个配置选项以控制是否应将未设置的统一限制视为无限制并记录为警告

  • 增强 nova-manage limits migrate_to_unified_limits 命令以扫描数据库 flavor,检测没有设置注册限制的资源,并将它们显示在输出中,以便让用户知道他们需要设置哪些限制

依赖项

测试

将通过编写新的功能测试来测试 [quota]strict_unified_limits 配置选项的功能。

文档影响

将更新 统一限制文档,以包含有关新配置选项的信息。

参考资料

历史

修订版

发布名称

描述

2024.2 达尔马提安

引入