23.0.0 版本新增: (Xena)

此功能首次在 23.0.0 (Xena) 版本中引入。在此之前,仅支持全局资源限制。

每租户配额

Glance 通过使用 Keystone 的统一限制功能,支持租户的资源消耗配额。资源限制会在 Keystone 中注册合适的默认值,并且可以按租户进行覆盖。当在 Glance 中尝试资源消耗时,会计算当前的消耗量并与 Keystone 中设置的限制进行比较;如果用户超过了指定的限制,则请求将被拒绝。

由于 Glance 的设计,Glance 中大多数与存储相关的配额都是软限制。由于 Glance 允许客户端在上传或导入操作期间流式传输未知总大小的镜像数据,因此在操作完成之后才能确定是否超过了配额。因此,允许用户在单个操作中超出其配额,然后在后续操作中拒绝额外的存储。存在面向对象的配额,可以帮助操作员限制多个大型竞争数据流造成的损害。以下将介绍这些细节。

注意

Glance 还具有遗留的全局资源限制,如果启用了每租户配额,则可以忽略这些限制。目前,如果使用每租户配额,user_storage_quota 限制将被忽略。

有关更多信息,请参阅 Keystone 文档中的 统一限制

配额资源类型

Glance 支持对资源消耗的多个领域设置配额限制。限制在尝试资源消耗时强制执行,因此将现有用户的任何项目的配额设置为低于当前使用量,只会阻止他们消耗更多数据,直到他们释放空间为止。

总镜像大小

image_size_total 限制定义了租户在其所有活动镜像中可以消耗的最大存储量(以 MiB 为单位)。具有多个位置的镜像会根据镜像存储的位置数量对此计数做出贡献。因此,如果您有一个 1GiB 的镜像存储在四个位置,则使用量将被视为 4GiB。

总暂存大小

可互操作镜像导入 功能使用两步上传过程,用户首先将镜像上传到暂存存储,然后导入镜像到最终目的地。暂存存储通常是 API 工作器上的本地存储,因此与分配给通用镜像的大量共享存储相比,可能略显宝贵。 image_stage_total 限制定义了可以使用的总暂存空间。应将其设置为足够的值,以允许用户同时导入一个或多个镜像,具体取决于所需的并行级别。提供用户非常慷慨的 image_size_total 配额,但相对限制的 image_stage_total 分配可能是合适的,从而有效地限制他们在任何给定时间点导入一个镜像。

请记住,使用 web-download 方法导入的镜像也需要适应此分配,因为这些镜像首先下载到暂存存储,然后导入到最终目的地。使用 copy-image 方法从一个存储复制到另一个存储的镜像也会受到影响。请注意,常规镜像上传方法不会暂存镜像,因此不受此限制的影响。

总镜像数量

image_count_total 限制控制用户可以拥有的最大镜像对象数量,无论其单独或集体大小或对存储的影响如何。如果您希望防止用户拍摄数千个小型服务器快照而从不删除它们,则此限制可能很有用。

总进行中上传数量

由于 Glance 在流完成后才能强制执行与存储相关的配额,因此限制在任何给定时间点可以进行中的并行上传操作的数量可能很有用。 image_count_uploading 限制提供此控制,并影响常规镜像上传、预导入阶段(包括 web-downloadglance-direct)以及任何可能待处理的 copy-image 操作。 限制不受信任的用户到一个进行中的镜像上传,这将限制恶意用户可能对您的镜像存储造成的损害,如果他们启动多个同时无限制的上传流。

配额策略

以下是不同类型部署的几种用例示例策略。在所有情况下,image_size_totalimage_stage_total 应该设置为至少您期望用户使用的最大镜像大小。单个镜像的全局限制(请参阅配置项 image_size_cap)也可能相关。具有 image_count_total 为零的用户将无法创建任何镜像,并且具有 image_count_uploading 为零的用户将无法将数据上传到任何镜像。

  1. 公有云,用户按字节计费:在这种情况下,为上述每个资源类设置相当高的默认配额限制可能是有意义的,允许用户消费他们愿意支付的任何数量。 仍然可能希望将 image_stage_total 设置为适中值,以防止耗尽有限的暂存空间,如果您启用了导入功能。

  2. 私有云,受信任的用户按配额计费:在这种情况下,每个用户支付其允许消耗的资源量,而不是他们实际消耗的资源量。通常这涉及计费总空间,因此 image_size_total 设置为其分配量,可能通过 image_count_total 设置总镜像数量的上限。 如果他们是相对受信任或低影响的客户,则限制暂存使用量和上传计数可能是不必要的,可以将其设置为无限制或设置为较高的上限。

  3. 私有云,半受信任的第三方用户:这种情况在按分配或严格使用量付费方面可能与上述两种情况类似。但是,缺乏完全信任可能表明将总镜像上传数量限制为计算配额的 10% 左右(以允许快照),并将暂存使用量限制为一次一个或两个镜像导入即可。

配置 Glance 以使用每租户配额

  1. 注册配额限制 (可选)

    如果您决定在 Glance 中使用按租户的配额,则必须先在 Keystone 中注册这些限制

    $ openstack --os-cloud devstack-system-admin registered limit create \
      --service glance --default-limit 1000 --region RegionOne image_size_total
    
    +---------------+----------------------------------+
    | Field         | Value                            |
    +---------------+----------------------------------+
    | default_limit | 1000                             |
    | description   | None                             |
    | id            | 9cedfc5de80345a9b13ed00c2b5460f2 |
    | region_id     | RegionOne                        |
    | resource_name | image_size_total                 |
    | service_id    | e38c84a2487f49fd9864193bdc8a3174 |
    +---------------+----------------------------------+
    
    $ openstack --os-cloud devstack-system-admin registered limit create \
      --service glance --default-limit 1000 --region RegionOne image_stage_total
    
    +---------------+----------------------------------+
    | Field         | Value                            |
    +---------------+----------------------------------+
    | default_limit | 1000                             |
    | description   | None                             |
    | id            | 5a68712b6ba6496d823d0c66e5e860b9 |
    | region_id     | RegionOne                        |
    | resource_name | image_stage_total                |
    | service_id    | e38c84a2487f49fd9864193bdc8a3174 |
    +---------------+----------------------------------+
    
    $ openstack --os-cloud devstack-system-admin registered limit create \
      --service glance --default-limit 100 --region RegionOne image_count_total
    
    +---------------+----------------------------------+
    | Field         | Value                            |
    +---------------+----------------------------------+
    | default_limit | 100                              |
    | description   | None                             |
    | id            | beb91b043296499f8e6268f29d8b2749 |
    | region_id     | RegionOne                        |
    | resource_name | image_count_total                |
    | service_id    | e38c84a2487f49fd9864193bdc8a3174 |
    +---------------+----------------------------------+
    
    $ openstack --os-cloud devstack-system-admin registered limit create \
      --service glance --default-limit 100 --region RegionOne \
      image_count_uploading
    
    +---------------+----------------------------------+
    | Field         | Value                            |
    +---------------+----------------------------------+
    | default_limit | 100                              |
    | description   | None                             |
    | id            | fc29649c047a45bf9bc03ec4a7bcb8af |
    | region_id     | RegionOne                        |
    | resource_name | image_count_uploading            |
    | service_id    | e38c84a2487f49fd9864193bdc8a3174 |
    +---------------+----------------------------------+
    

    请确保在您的 glance-api.conf 文件中也设置 use_keystone_limits=True

  2. 告诉 Glance 使用 Keystone 配额

  • [oslo_limit] 部分中,配置对 keystone 的访问

    [oslo_limit]
    auth_url = http://controller:5000
    auth_type = password
    user_domain_id = default
    username = glance
    system_scope = all
    password = GLANCE_PASS
    endpoint_id = ENDPOINT_ID
    region_name = RegionOne
    

    GLANCE_PASS 替换为您在身份服务中为 glance 用户选择的密码。

    将 ENDPOINT_ID 替换为您之前创建的镜像端点的 ID(在本例中,这将是 340be3625e9b4239a6415d034e98aace),您可以通过运行以下命令找到它

    $ openstack endpoint list --service glance --region RegionOne
    

    确保 glance 帐户具有对系统范围资源的读取访问权限(例如限制)

    $ openstack role add --user glance --user-domain Default --system all reader
    

    有关配置统一限制客户端的更多信息,请参阅 oslo_limit 文档

  • [DEFAULT] 部分中,可选地启用按租户的配额

    [DEFAULT]
    use_keystone_limits = True
    

    请注意,如果启用了此功能,则必须创建上面描述的已注册限制。