1.6. OpenStack Workflow Compute CPU 和内存计算器
OpenStack Workflow 计算 CPU 和内存的最佳设置,并使用结果填充 NovaReservedHostMemory 和 NovaCPUAllocationRatio 参数。
NovaReservedHostMemory
NovaReservedHostMemory 参数设置为主机节点保留的内存量(以 MB 为单位)。要确定超融合节点的适当值,假设每个 OSD 消耗 3 GB 内存。假设有 256 GB 内存和 10 个 OSD 的节点,您可以为 Ceph 分配 30 GB 内存,为 Compute 保留 226 GB。使用该节点可以托管最多的内存,例如,113 个实例分别使用 2 GB 内存。
但是,您仍然需要为 虚拟机监控程序 考虑每个实例的额外开销。假设这个开销为 0.5 GB,则同一节点只能托管 90 个实例,其中 226 GB 的帐户除以 2.5 GB。为主机节点保留的内存量(即 Compute 服务不应该使用的内存)是:
(在 * Ov 中)+(Os * RA)
其中:
-
在中:实例数量 -
OV: 每个实例所需的开销内存量 -
OS:节点上的 OSD 数量 -
RA: 每个 OSD 应该具有的 RAM 量
对于 90 个实例,这给我们(90*0.5)+(10*3)= 75 GB。计算服务预期这个值以 MB 为单位,即 75000。
以下 Python 代码提供这个计算:
left_over_mem = mem - (GB_per_OSD * osds)
number_of_guests = int(left_over_mem /
(average_guest_size + GB_overhead_per_guest))
nova_reserved_mem_MB = MB_per_GB * (
(GB_per_OSD * osds) +
(number_of_guests * GB_overhead_per_guest))
NovaCPUAllocationRatio
在选择要在其上部署实例的 Compute 节点时,计算调度程序使用 NovaCPUAllocationRatio。默认情况下,这是 16.0 (如 16:1)。这意味着,如果节点上有 56 个内核,则计算调度程序会调度足够的实例在节点上消耗 896 个 vCPU,然后考虑节点无法托管。
要为超融合节点确定合适的 NovaCPUAllocationRatio,假设每个 Ceph OSD 至少使用一个内核(除非工作负载是 I/O 密集型,且在没有 SSD 的节点上)。在有 56 个内核和 10 个 OSD 的节点上,这会为 Compute 保留 46 个内核。如果每个实例在收到的 CPU 的每个 CPU 使用 100,那么比率将只是实例 vCPU 数量除以内核数除;即 46 / 56 = 0.8。但是,由于实例通常不会消耗其分配的 CPU 数量,因此您可以在决定所需客户机 vCPU 数量时考虑预期百分比来引发 NovaCPUAllocationRatio。
因此,如果我们可以预测,实例将只使用每个 vCPU 的 10%(或 0.1),则实例的 vCPU 数量可以表示为 46 / 0.1 = 460。当此值除以内核数(56))时,比率增加到大约 8。
以下 Python 代码提供这个计算:
cores_per_OSD = 1.0
average_guest_util = 0.1 # 10%
nonceph_cores = cores - (cores_per_OSD * osds)
guest_vCPUs = nonceph_cores / average_guest_util
cpu_allocation_ratio = guest_vCPUs / cores