InstanceResourceQuota
目录
Instance Resource Quota
每个 nova flavor 都可以分配额外的规格,从而指定资源配额/限制。目前,这些限制可以应用于 CPU、磁盘 IO 和网络带宽。
额外的规格?
额外的规格是每个 flavor 设置的附加信息。它们在这里用于应用配额,但并不局限于此功能。可以设置额外的规格来指定某种 flavor 必须在何处运行,等等。
https://blueprints.launchpad.net/nova/+spec/quota-instance-resource
工作原理
Nova 可以使用 libvirt 功能在生成新的 VM 时设置限制。
CPU
CPU 配额是通过使用 cgroups 处理的。
IO
IO 限制由 QEMU 处理。这就像使用 libvirt 的 blkdeviotune。
请注意,libvirt 还有一个 blkiotune 功能,它使用 cgroups,但这并不被 Nova 使用。
网络
流量整形——即限制入站/出站带宽——是通过使用 tc 实现的。请注意,libvirt 使用 tc 允许通过网络接口进行流量整形。如果 libvirt 使用 cgroups 来控制带宽,所有 guest 的网络接口都会受到限制,因为 cgroups 在进程级别工作。
通过 CLI 配置 Nova
以下示例使用 nova-manage 和 python-novaclient。
IO 限制
自 QEMU 1.1 以来
Nova Extra Specs 键
- disk_write_bytes_sec
- disk_read_bytes_sec
- disk_read_iops_sec
- disk_write_iops_sec
- disk_total_bytes_sec
- disk_total_iops_sec
示例
nova-manage
nova-manage flavor set_key --name m1.small --key quota:disk_read_bytes_sec --value 10240000 nova-manage flavor set_key --name m1.small --key quota:disk_write_bytes_sec --value 10240000
具有管理员权限的 python-novaclient
nova flavor-key m1.small set quota:disk_read_bytes_sec=10240000 nova flavor-key m1.small set quota:disk_write_bytes_sec=10240000
CPU 限制
Nova Extra Specs 键
- cpu_shares
- cpu_quota
- cpu_period
cpu_shares
可选的 shares 元素指定域的比例加权份额。如果省略此项,则默认为 OS 提供的默认值。注意,该值没有单位,它是基于其他 VM 设置的相对度量,例如,配置值为 2048 的 VM 将获得配置值为 1024 的 VM 两倍的 CPU 时间。自 0.9.0 以来
cpu_period
可选的 period 元素指定执行间隔(单位:微秒)。在 period 内,域的每个 vcpu 将不允许消耗超过 quota 值的运行时。该值应在 [1000, 1000000] 范围内。值为 0 的 period 表示没有值。仅 QEMU 驱动程序自 0.9.4 以来支持,LXC 自 0.9.10 以来支持
cpu_quota
可选的 quota 元素指定允许的最大带宽(单位:微秒)。具有负 quota 值的域表示该域具有无限带宽,这意味着它不受带宽控制。该值应在 [1000, 18446744073709551] 或小于 0 的范围内。值为 0 的 quota 表示没有值。您可以使用此功能来确保所有 vcpu 以相同的速度运行。仅 QEMU 驱动程序自 0.9.4 以来支持,LXC 自 0.9.10 以来支持。
示例
nova-manage
nova-manage flavor set_key --name m1.small --key quota:cpu_quota --value 5000 nova-manage flavor set_key --name m1.small --key quota:cpu_period --value 2500
具有管理员权限的 python-novaclient
nova flavor-key m1.small set quota:cpu_quota=10240000 nova flavor-key m1.small set quota:cpu_period=10240000
带宽限制
Nova Extra Specs 键
- vif_inbound_average
- vif_outbound_average
- vif_inbound_peak
- vif_outbound_peak
- vif_inbound_burst
- vif_outbound_burst
入站和出站流量可以独立整形。bandwidth 元素最多可以有一个入站和一个出站子元素。省略任何这些子元素会导致在该流量方向上不应用 QoS。因此,当您只想整形网络的入站流量时,仅使用 inbound,反之亦然。这些元素中的每一个都有一个强制属性 average。它指定被整形接口上的平均比特率。然后有两个可选属性:peak,它指定桥接可以发送数据的最大速率,以及 burst,以千字节为单位的峰值速度可以爆发的字节数。属性的接受值为整数,average 和 peak 属性的单位为每秒千字节,burst 的单位为千字节。速率在连接到网络的域之间平均共享。请参阅 libvirt QoS。
示例
nova-manage
nova-manage flavor set_key --name m1.small --key quota:vif_inbound_average --value 10240 nova-manage flavor set_key --name m1.small --key quota:vif_outbound_average --value 10240
具有管理员权限的 python-novaclient
nova flavor-key m1.small set quota:vif_inbound_average=10240 nova flavor-key m1.small set quota:vif_outbound_average=10240
内存限制
目前 nova 中没有 libvirt memtune 的实现。请参阅 https://blueprints.launchpad.net/nova/+spec/flavor-quota-memory
取消限制
要取消配额,只需运行
nova flavor-key <flavor> unset <key>
示例
nova flavor-key m1.small unset quota:vif_inbound_average
通过 Horizon 配置 Nova
上述示例使用 nova-manage 和 python-novaclient,但额外的规格也可以在 Horizon 中设置。
使用管理员凭据,转到 [Admin] > [System] > [Flavors] 以显示所有 flavor。单击 flavor 右侧的“More”,然后在下拉菜单中选择“View Extra Specs”。现在,您可以单击“Create”添加额外的规格。