nova quota

quota中文叫配额,是云计算中重要的概念之一,云计算提供什么,按需提供服务(各种资源),按需是云的精髓,要多少给多少,超限的响应也不能给。

在openstack中nova随处可见,trace openstack的源码,安全组,网络数量,tenant的cpu,内存,磁盘,等等都有quota的身影。

quota的变动是一个数据库事务,包含reservation/commit/rollback三个动作,缺一不可,reserve时若发现超限,则commit不进行,正常则commit,失败

就rollback,数据库写事务时的常规套路。需要特别提一句的是,reserve成功时候会返回reservation_id的list,commit根据这些id进行对应的配额变化。


trace过很多次openstack创建instance 的过程,再一次:

在_provision_instance中_check_num_instances_quota:

quotas = objects.Quotas(context)
quotas.reserve(instances=max_count, cores=req_cores, ram=req_ram)

调用nova/objects/quotas.py,这里objects中的quota封装了reserve和commit过程中serveration_id的list,省得传递它了。

在objects/quotas.py中的Quota 类中可以看到:

 @base.remotable
    def reserve(self, expire=None, project_id=None, user_id=None,
                **deltas):
        reservations = quota.QUOTAS.reserve(self._context, expire=expire,
                                            project_id=project_id,
                                            user_id=user_id,
                                            **deltas)
        self.reservations = reservations

        self.project_id = project_id
        self.user_id = user_id
        self.obj_reset_changes()


这里quota.QUOTAS是QUOTAS = QuotaEngine()

一般来说,quota engine中对应的engine driver是DB,不用DB,难道用什么别的更合适?这里quota还要搞driver,想太多?

既然quota engine对应的是数据库,那就回到前面提到的sqlalchemy中去了,在nova/db/sqlalchemy/api.py中,我们可以找到

quota_reserve, reservation_commit,reservation_rollback等方法,背后对应了数据库的操作。

进入openstack的数据库中,查看表quotas, quota_usages, reservations几张表(还有别的表)就可以大致了解了。

比如quota表:

MariaDB [nova]> select * from quotas;
+----+---------------------+------------+------------+----------------------------------+-----------------------------+------------+---------+
| id | created_at          | updated_at | deleted_at | project_id                       | resource                    | hard_limit | deleted |
+----+---------------------+------------+------------+----------------------------------+-----------------------------+------------+---------+
|  1 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | metadata_items              |        128 |       0 |
|  2 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | injected_file_content_bytes |      10240 |       0 |
|  3 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | ram                         |      51200 |       0 |
|  4 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | instances                   |         10 |       0 |
|  5 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | injected_files              |          5 |       0 |
|  6 | 2015-04-28 07:55:58 | NULL       | NULL       | 91accf025304465fa1a4cfdcaa94d91d | cores                       |         20 |       0 |
|  7 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | metadata_items              |        128 |       0 |
|  8 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | injected_file_content_bytes |      10240 |       0 |
|  9 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | ram                         |      51200 |       0 |
| 10 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | instances                   |         10 |       0 |
| 11 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | injected_files              |          5 |       0 |
| 12 | 2015-06-01 12:16:44 | NULL       | NULL       | 51b4379ea8734aaca96cb724a2d7200f | cores                       |         30 |       0 |
+----+---------------------+------------+------------+----------------------------------+-----------------------------+------------+---------+

quota_usages 表:

MariaDB [nova]> select * from quota_usages;
+---------------------+---------------------+------------+----+----------------------------------+-----------------+--------+----------+---------------+---------+----------------------------------+
| created_at          | updated_at          | deleted_at | id | project_id                       | resource        | in_use | reserved | until_refresh | deleted | user_id                          |
+---------------------+---------------------+------------+----+----------------------------------+-----------------+--------+----------+---------------+---------+----------------------------------+
| 2015-04-28 08:05:18 | 2015-04-28 09:11:05 | NULL       |  1 | 51b4379ea8734aaca96cb724a2d7200f | instances       |      1 |        0 |          NULL |       0 | 60ce7a8cab9c477895ef37440b1d9c57 |
| 2015-04-28 08:05:18 | 2015-04-28 09:11:05 | NULL       |  2 | 51b4379ea8734aaca96cb724a2d7200f | ram             |    512 |        0 |          NULL |       0 | 60ce7a8cab9c477895ef37440b1d9c57 |
| 2015-04-28 08:05:18 | 2015-04-28 09:11:05 | NULL       |  3 | 51b4379ea8734aaca96cb724a2d7200f | cores           |      1 |        0 |          NULL |       0 | 60ce7a8cab9c477895ef37440b1d9c57 |
| 2015-04-28 08:05:18 | 2015-04-28 08:05:18 | NULL       |  4 | 51b4379ea8734aaca96cb724a2d7200f | security_groups |      1 |        0 |          NULL |       0 | 60ce7a8cab9c477895ef37440b1d9c57 |


at last: 如果想在nova之外的地方使用quota,当然是novaclient,看nova client 源码,在novaclient/v1_1/shell.py中,有方法do_quota_update,参数有哪些

也可以看到,因此调用rest call或者nova client都可以达到目的。





<think>好的,用户想知道如何使用'openstack quota show'命令来查看OpenStack的配额信息。首先,我需要回忆一下相关的命令结构和参数。根据引用[2]中的帮助文档,'quota-show'命令用于列出租户或用户的配额,而对应的OpenStack客户端命令应该是'openstack quota show'。 用户可能需要查看特定项目或用户的配额,所以需要确定是否需要指定项目ID或用户ID。根据帮助信息,命令可能需要--project或--user参数来指定目标。例如,查看某个项目的默认配额可能需要使用'quota-defaults',但用户明确提到的是'show'子命令。 接下来,我需要考虑权限问题。执行该命令的用户是否有足够的权限,比如管理员权限,否则可能无法查看其他项目的配额。此外,是否需要安装特定的客户端组件,如引用[1]中提到的nova相关包,但用户可能已经安装好了。 然后,构造具体的命令示例。基本格式可能是'openstack quota show --project <project_id>',如果要查看用户的配额,则加上--user参数。同时,引用[3]说明配额是针对项目的资源限制,所以默认情况下可能只需要项目ID。 还需要提醒用户如何获取项目ID,比如使用'openstack project list'命令来列出所有项目。如果有错误,可能需要检查权限或参数是否正确。此外,用户可能需要了解各配额项的含义,如instances、cores等,引用[3]中的解释可以作为补充说明。 最后,确保命令语法正确,并给出示例,帮助用户正确执行。同时,考虑生成相关问题,如如何修改配额或查看默认配额,以提供更全面的帮助。</think>要查看OpenStack项目的配额信息,可通过`openstack quota show`命令实现。以下是具体步骤和示例: ### 1. 查看指定项目的配额 使用`--project`参数指定项目ID: ```bash openstack quota show --project <项目ID> ``` 输出示例: ``` +-----------------------------+-------+ | Field | Value | +-----------------------------+-------+ | instances | 10 | | cores | 20 | | ram | 51200 | | volumes | 10 | | gigabytes | 1000 | | networks | 3 | | ... | ... | +-----------------------------+-------+ ``` ### 2. 查看用户级配额(若单独配置) 若用户有独立配额,可叠加`--user`参数: ```bash openstack quota show --project <项目ID> --user <用户ID> ``` ### 3. 获取项目ID列表 若不确定项目ID,先执行: ```bash openstack project list ``` ### 关键参数说明 - 配额单位基于项目(project),涵盖虚拟机、CPU、内存等资源[^3] - 默认配额值由系统预定义,可通过`quota-update`修改[^2] - 需要管理员权限才能查看/修改其他项目的配额
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值