DomainQuotaDriver
目录
简介
Nova BP Domain Quota Driver 将使 O~S 项目能够在 Nova 中强制执行域配额,为此,需要一个能够强制执行域配额的新驱动程序。此 BP 解决了在 Nova 中强制执行域配额的新配额驱动程序的需求。
Nova 中的配额
目前,OpenStack 服务使用配额来限制项目资源。例如,“Instances”配额表示可以在项目中创建的实例数量。下表总结了现有的项目配额。从现在开始,在域的上下文中将会有相同的选项。
| quotas | type | 默认值 | description |
|---|---|---|---|
| instances | 可预留 | 10 | 每个项目允许的实例数量 |
| 核心数 | 可预留 | 20 | 每个项目允许的实例核心数 |
| 内存 | 可预留 | 50*1024 | 每个项目允许的实例内存(兆字节) |
| 浮动 IP | 可预留 | 10 | 每个项目允许的浮动 IP 数量 |
| 固定 IP | 可预留 | -1 | 每个项目允许的固定 IP 数量 |
| 元数据项 | 绝对值 | 128 | 每个实例允许的元数据项数量 |
| 注入文件 | 绝对值 | 5 | 允许的注入文件数量 |
| 注入文件内容字节数 | 绝对值 | 10*1024 | 每个注入文件允许的字节数 |
| nova.injected_file_path_bytes | 绝对值 | 255 | 每个注入文件路径允许的字节数 |
| nova.security_groups | 可预留 | 10 | 每个项目允许的安全组数量 |
| nova.security_groups_rules | 可计数 | 20 | 每个安全组允许的安全规则数量 |
| nova.key_pairs | 可计数 | 100 | 每个用户允许的密钥对数量 |
设计
因此,Nova 可以并行使用两个驱动程序,它们将由配额引擎调用。因此,当两个驱动程序运行时,要预留资源,例如,配额引擎将在当前配额中进行预留,即项目的配额以及域配额。
实现
为了实现域控制器配额,有必要创建三个模型,遵循现有的项目模板配额。此外,它创建了三个与这些模型相对应的表:DomainQuota、DomainQuotaUsages 和 DomainReservation,以便我们可以存储有关配额限制的信息,以及已经使用的情况和资源的预留情况。
域配额表
| 列 | 描述 |
|---|---|
| id | 主键。 |
| 资源 | 资源名称。 |
| domain_id | 引用域的 ID。 |
| hard_limit | 配额限制。 |
| created_at | 创建记录的时间。 |
| updated_at | 更新记录的时间。 |
| deleted_at | 删除记录的时间。 |
| deleted | 记录是否被删除 |
域配额使用表
| 列 | 描述 |
|---|---|
| id | 主键。 |
| 资源 | 资源名称。 |
| domain_id | 引用域的 ID。 |
| 使用中 | 已经使用的资源量。 |
| 已预留 | 该资源是否已预留。 |
| created_at | 创建记录的时间。 |
| updated_at | 更新记录的时间。 |
| deleted_at | 删除记录的时间。 |
| until_refresh | 在刷新使用情况之前,预留计数 |
| deleted | 记录是否被删除 |
域预留表
| 列 | 描述 |
|---|---|
| id | 主键。 |
| 资源 | 资源名称。 |
| domain_id | 引用域的 ID。 |
| usage_id | 引用配额使用的 ID。 |
| 使用中 | 已经使用的资源量。 |
| 已预留 | 该资源是否已预留。 |
| created_at | 创建记录的时间。 |
| updated_at | 更新记录的时间。 |
| deleted_at | 删除记录的时间。 |
| uuid | 通用唯一标识符。 |
| delta | 要添加的资源的变动。 |
| expire | 如果预留已经过期。 |
| deleted | 记录是否被删除 |