跳转到: 导航, 搜索

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”添加额外的规格。