OpenStack中计算disk资源的方式(by quqi99)

版权声明:本文为博主原创文章,如需转载,请注明出处! https://blog.csdn.net/quqi99/article/details/80769725

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (作者:张华 发表于:2018-06-22)

使用disk-overcommit参数可允许超载, 这时, 下面的disk_available_least是有可能为负数的. 例如创建一个和计算节点可用磁盘大小相同的虚机(eg: 该计算节点磁盘大小总数为38G)
$ nova hypervisor-show 2 |grep local_gb
| local_gb | 38 |
| local_gb_used | 0 |

nova flavor-create big-flavor auto 2048 38 1
openstack server create --wait --image xenial --flavor big-flavor --key-name testkey --nic net-id=$(neutron net-list |grep ’ private ’ |awk ‘{print $2}’) i1

$ nova hypervisor-show 2 |egrep -i ‘(disk|_gb)’
| disk_available_least | -3 |
| free_disk_gb | 0 |
| local_gb | 38 |
| local_gb_used | 38 |

注意一点, 想要成功创建上述虚机, 需配置(juju config nova-cloud-controller disk-allocation-ratio=5), 这样nova-scheduler中的下列公式才能让这个创建请求运行:
disk_mb_limit = total_usable_disk_mb * disk_allocation_ratio
used_disk_mb = total_usable_disk_mb - free_disk_mb
usable_disk_mb = disk_mb_limit - used_disk_mb
if not usable_disk_mb >= requested_disk:

这样, 当做migrate的时候 (openstack server migrate --live juju-9effa2-xenial-mitaka-8 --block-migration --disk-overcommit i1 --debug), 如何充许超载, 就不能使用可为负数的disk_available_least, 而应该使用实际大小free_disk_gb ( https://review.openstack.org/#/c/536351/)
if disk_over_commit:
disk_available_gb = dst_compute_info[‘free_disk_gb’]
else:
disk_available_gb = dst_compute_info[‘disk_available_least’]

注: 上述disk_available_least经下列公式计算得出, 其中disk_over_committed为统计的每个虚机的 (virtual_size - disk_size) 之和.
available_least = disk_free_gb * units.Gi - disk_over_committed
disk_over_committed = The sum of (virtual_size - disk_size) for all virtual disk
ubuntu@juju-9effa2-xenial-mitaka-7:~$ qemu-img info /var/lib/nova/instances/dfcd087a-5dff-439d-8875-2f702f081539/disk |grep size
virtual size: 38G (40802189312 bytes)
disk size: 21M
cluster_size: 65536

(Pdb) p disk_infos
[{u’disk_size’: 22806528, u’type’: u’qcow2’, u’virt_disk_size’: 40802189312, u’path’: u’/var/lib/nova/instances/dfcd087a-5dff-439d-8875-2f702f081539/disk’, u’backing_file’: u’b8a746c6056b30fe58188451cf31b51648210d9f’, u’over_committed_disk_size’: 40779382784}]

其中free_disk_gb是由get_available_resource in nova/virt/libvirt/driver.py用于统计磁盘信息:
hddinfo = os.statvfs(path)
total = hddinfo.f_frsize * hddinfo.f_blocks
free = hddinfo.f_frsize * hddinfo.f_bavail
used = hddinfo.f_frsize * (hddinfo.f_blocks - hddinfo.f_bfree)

但nova直接使用了上面的total和used, 却没有直接使用free, 而是使用avaliable_least代替free:
available_least = disk_free_gb * units.Gi - disk_over_committed

阅读更多

没有更多推荐了,返回首页