服务器组配额

https://blueprints.launchpad.net/nova/+spec/server-group-quotas

添加配额值以限制用户可以创建的服务器组的数量和大小。

问题描述

服务器组可用于控制一组服务器(实例)的亲和性和反亲和性调度策略。虽然这对用户来说是一种有用的机制,但这种调度决策需要与部署者对有效利用可用容量的要求相平衡。

例如,用户请求一组 10 台服务器之间的反亲和性以支持特定的可用性方案可能被认为是合理的。但是,用户创建 100 台服务器之间的反亲和性将与旨在避免整体云容量碎片化的堆叠策略直接冲突。

无限的反亲和性可能允许用户获取有关云整体大小的信息,这通常被认为是云提供商的专有信息。

无限的服务器组本身可能被用作针对未受 API 速率限制器保护的系统的拒绝服务攻击,用户创建组直到数据库填满。

提议的变更

将引入两个新的配额值来限制服务器组的数量以及服务器组中的服务器数量。

这些将遵循现有的配额模式(例如,安全组和每个安全组的规则),即

  • 它们由配置值定义,这些值也包括默认值

  • 它们可以按项目或项目中的用户定义

  • 对于任一配额,值为 -1 将被视为无限。

  • 可以通过配额组 API 设置默认值

  • 可以在任何时候更改值,但仅在下一次服务器组或服务器创建时生效。降低配额不会影响任何现有组,但超过配额的服务器将不允许进入组。

新的选项将定义如下

cfg.IntOpt(‘quota_server_groups’,

default=10, help=’每个项目的服务器组数量’)

cfg.IntOpt(‘quota_server_group_members’,

default=10, help=’每个服务器组的服务器数量’)

备选方案

无。

数据模型影响

无。配额值将在创建服务器组或创建服务器时简单地进行检查。

REST API 影响

由于此更改引入了现有 API 方法中的附加字段,因此它将在 V2 中通过新 API 扩展的存在来控制。

Name = “ServerGroupQuotas” Alias = “os-server-group-quotas”

获取用户/租户的配额时的响应更改。* 方法:GET * 路径:/os-quota-sets/{tenant_id} * Resp:正常响应代码 200

JSON 响应

{
“quota_set”: {

“cores”: 20, “fixed_ips”: -1, “floating_ips”: 10, “id”: “fake_tenant”, “injected_file_content_bytes”: 10240, “injected_file_path_bytes”: 255, “injected_files”: 5, “instances”: 10, “key_pairs”: 100, “metadata_items”: 128, “ram”: 51200, “security_group_rules”: 20, “security_groups”: 10, “server_groups”: 10, “server_group_members”: 10,

}

}

获取默认配额时的响应更改。* 方法:GET * 路径:/os-quota-sets/defaults * Resp:正常响应代码 200

JSON 响应

{
“quota_set”: {

“cores”: 20, “fixed_ips”: -1, “floating_ips”: 10, “id”: “fake_tenant”, “injected_file_content_bytes”: 10240, “injected_file_path_bytes”: 255, “injected_files”: 5, “instances”: 10, “key_pairs”: 100, “metadata_items”: 128, “ram”: 51200, “security_group_rules”: 20, “security_groups”: 10, “server_groups”: 10, “server_group_members”: 10,

}

}

更新用户/租户配额时的请求更改。* 方法:POST * 路径:/os-quota-sets/{tenant_id}/{user_id} * Resp:正常响应代码 200

JSON 响应

{
“quota_set”: {

“force”: “True”, “instances”: 9, “server_groups”: 10, “server_group_members”: 10,

}

}

JSON Schema

common_quota = {

‘type’: [‘integer’, ‘string’], ‘pattern’: ‘^-?[0-9]+$’, ‘minimum’: -1

}

update = {
‘properties’: {
‘type’: ‘object’,
‘quota_set’: {
‘properties’: {

‘instances’: common_quota, ‘cores’: common_quota, ‘ram’: common_quota, ‘floating_ips’: common_quota, ‘fixed_ips’: common_quota, ‘metadata_items’: common_quota, ‘key_pairs’: common_quota, ‘security_groups’: common_quota, ‘security_group_rules’: common_quota, ‘server_groups’: common_quota, ‘server_group_members’: common_quota, ‘force’: parameter_types.boolean,

}, ‘additionalProperties’: False,

},

}, ‘required’: [‘quota_set’], ‘additionalProperties’: False,

}

限制请求的响应更改

JSON 响应

{
“limits”: {

“rate”: [

],

“absolute”: {

“maxServerMeta”: 128, “maxPersonality”: 5, “maxImageMeta”: 128, “maxPersonalitySize”: 10240, “maxSecurityGroupRules”: 20, “maxTotalKeypairs”: 100, “totalRAMUsed”: 2048, “totalInstancesUsed”: 4, “maxSecurityGroups”: 10, “totalFloatingIpsUsed”: 0, “maxTotalCores”: 20, “totalSecurityGroupsUsed”: 1, “maxTotalFloatingIps”: 10, “maxTotalInstances”: 10, “totalCoresUsed”: 4, “maxTotalRAMSize”: 51200, “maxServerGroups”: 10, “totalServerGroupsUsed”: 2, “maxServersPerServerGroups”: 10,

}

}

}

服务器组 API 响应更改

创建现在可以返回 413 “服务器组配额已超出”

安全影响

通过限制每个项目可以消耗的资源,提高了启用服务器组 API 系统的安全性。

通知影响

无。

其他最终用户影响

python-novaclient 将更新以支持新的配额值。

如果 API 未返回新值(即,系统尚未更新以包含此更改),则客户端将返回值 -1(无限)。

性能影响

无 - 配额验证将是 API 中的一个小的附加步骤。

其他部署者影响

配额仅对新请求进行验证,因此有可能(就像任何默认配额更改一样),某些现有项目可能已经超出配额。现有组不受影响,但用户将无法创建新组和/或将服务器添加到组中,直到他们低于其配额限制。

部署者将需要考虑他们想要配置的默认配额值,以及他们是否想要配置任何项目特定的配额。

只有在加载新的扩展程序时,新的配额检查才会有效,并且通过 API 报告的值。

开发人员影响

无。

实现

负责人

主要负责人

philip-day

工作项

该更改将作为单个补丁集提交。

依赖项

测试

现有的 Tempest 配额测试将扩展到涵盖新的值。

文档影响

需要在文档中包含新的值。

参考资料

无。