概述
openstack默认为了防止用户随意使用存储空间,针对cinder做了限制。cinder的quota有一个专门的驱动去完成。当超过quota时,使用cinder将会失败。
cinder中quota的默认配置
quota_driver=cinder.quota.DbQuotaDriver quota的驱动,源代码的路径
quota_volumes=10 volume的个数
quota_snapshots=10 快照个数
quota_gigabytes=1000 volume的空间大小,默认单位是GB,包括快照和volume的空间
reservation_expire=86400 过时时长
max_age=0 刷新间隔
以上配置均是在cinder.quota.quota_opts中配置的!
cinder的配额常用命令包括
1. 查看tenant的默认配额:
cinder quota-defaults tenant-id/user-id
2. 查看quota的使用情况
cinder quota-usage tenant-id/user-id
3. 调整quota配额
cinder quota0update --volumes 100 --snapshots 100 --gigabytes 5000 tenant-id/user-id
cinder quota-show tenant-id
cinder quota-usage tenant-id
相关数据库解析
reservations
每次创建卷或者删除卷的时候,都会创建创建对应的reservation记录,即预分配,等卷的数据库表创建成功或者删除成功之后,再将reservation中的配额更新到quota_usages中,之后,再将reservation表删除。delta值,代表此次是从quota_usages中获取多大的值,如果此值为负,则是说明还给quota_usages表。
在创建云硬盘的时候,发现reservation表在云硬盘创建成功之后,会自动删除;但是在删除云硬盘的时候,却不会自动删除。
原因是cinder-volume在读写数据库的时候,由于对sqlalchemy库做了改动,导致cinder-volume读写时出现错误。因此虽然执行了QUOTAS.commit(context, reservations, project_id=project_id)函数,但是执行失败,相应的reservation表没有删除,quota_usages的数据也没有更新。
quota_classes表
代表当前表中的资源限额是多少:
quota_usages表
代表当前各种资源的使用量:
该表会和reservation表进行联动,调用QUOTAS.commit函数的时候,会更新quota_usages表,同时会删除reservation表。
定时清理reservation
@periodic_task.periodic_task(spacing=CONF.reservation_clean_interval,
run_immediately=True)
def _clean_expired_reservation(self, context):
QUOTAS.expire(context)
上述函数位于cinder.scheduler.manager.SchedulerManager对象中,就是定时发现数据表中的reservation是否超时,如果超时就会把这个表删除,然后更新quota_usages数据表中的值。文章来源:https://www.toymoban.com/news/detail-683973.html
例如在删除云硬盘的时候,配额在quota_usages中并未真正的减少,只是在reservation做了相应的记录,因此这个函数就会在删除超时的reservation时,更新quota_usages中的值。文章来源地址https://www.toymoban.com/news/detail-683973.html
到了这里,关于cinder的配额参数说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!