6.11. 关联性组

6.11.1. 关联性组

您可以创建 Affinity Groups,以帮助确定所选虚拟机相互运行的位置,以及与指定主机运行的位置。此功能有助于管理工作负载场景,如许可要求、高可用性工作负载和灾难恢复。

VM 关联性规则

当您创建 Affinity Group 时,您可以选择属于该组的虚拟机。要定义 这些虚拟机可以相互关联的运行位置,您可以启用 VM Affinity Rule :Positive 关联性规则尝试在单个主机上运行虚拟机; 关联性规则尝试在单独的主机上运行虚拟机。如果无法实现该规则,则结果取决于是否启用了 weight 或 filter 模块。

主机关联性规则

另外,您还可以将主机添加到 Affinity Group。要定义 组中的虚拟机可以与组中主机相关的位置,您可以启用 主机关联性规则 :Positive 关联性规则尝试在关联性组中的主机上运行虚拟机; 关联性规则尝试在不属于关联性组的 主机上运行虚拟机。如果无法实现该规则,则结果取决于是否启用了 weight 或 filter 模块。

默认每周模块

默认情况下,这两个规则在集群的调度策略中应用 weight 模块。使用 weight 模块时,调度程序会尝试履行规则,但允许 affinity 组中的虚拟机在无法满足该规则的情况下运行。

例如,启用了正 VM Affinity Rule 和 weight 模块后,调度程序会尝试在单一主机上运行关联性组的所有虚拟机。但是,如果单个主机没有足够的资源用于此目的,调度程序会在多个主机上运行虚拟机。

要使此模块正常工作,调度策略的 weight 模块 部分必须包含 VmAffinityGroupsVmToHostsAffinityGroups 关键字。

强制选项和过滤器模块

这两个规则都有一个 强制 选项,可在集群的调度策略中应用 filter 模块。filter 模块覆盖 weight 模块。启用 filter 模块后,调度程序 要求 满足规则。如果无法执行规则,则 filter 模块将阻止 affinity 组中的虚拟机运行。

例如,启用了 Positive Host Affinity RuleEnforcing (启用 filter 模块),调度程序 要求 affinity 组中的虚拟机在作为关联性组一部分的主机上运行。但是,如果这些主机停机,调度程序根本不运行虚拟机。

要使此模块正常工作,调度策略的 filter 模块 部分必须包含 VmAffinityGroupsVmToHostsAffinityGroups 关键字。

例子

要查看这些规则和选项如何相互使用,请参阅 Affinity 组示例

警告
  • 要使关联性标签正常工作,调度策略的 filter 模块 部分必须包含 标签
  • 如果关联性组和关联性标签相互冲突,受影响的虚拟机就不会运行。为了帮助防止、故障排除和解决冲突,请参阅 Affinity 组故障排除
重要

每个规则都受到集群调度策略中的 weight 和 filter 模块的影响。

  • 要使 VM Affinity Rule 规则 正常工作,调度策略必须在其 Weight 模块Filter 模块 部分包含 VmAffinityGroups 关键字。
  • 要使 Host Affinity Rule 正常工作,调度策略必须在其 Weight 模块Filter 模块部分包含 VmToHostsAffinityGroups 关键字。

如需更多信息,请参阅管理指南中的 调度策略

注意
  • 关联性组应用到集群中的虚拟机。将虚拟机从一个集群移动到另一个集群会将其从原始集群中的关联组移除。
  • 虚拟机不必重启,即可让关联组规则生效。

6.11.2. 创建关联性组

您可以在管理门户中创建新的关联性组。

创建关联性组

  1. 单击 ComputeVirtual Machines 并选择虚拟机。
  2. 单击虚拟机的名称,以转至详情视图。
  3. 单击 Affinity Groups 选项卡。
  4. 单击 New
  5. 输入 affinity 组的 NameDescription
  6. VM Affinity Rule 下拉列表中,选择 Positive 以应用正关联性或 关联性来应用负关联性。选择 Disable 来禁用关联性规则。
  7. 选中 Enforcing 复选框以应用硬强制,或者确保清除此复选框以应用软强制。
  8. 使用下拉列表选择要添加到关联性组的虚拟机。使用 +- 按钮来添加或删除其他虚拟机。
  9. 点击 确定

6.11.3. 编辑关联性组

编辑关联性组

  1. 单击 ComputeVirtual Machines 并选择虚拟机。
  2. 单击虚拟机的名称,以转至详情视图。
  3. 单击 Affinity Groups 选项卡。
  4. Edit
  5. VM Affinity Rule 下拉列表和强制 设置 复选框更改为首选值,然后使用 +- 按钮将虚拟机添加到关联性组或从关联性组中移除。
  6. 点击 确定

6.11.4. 删除关联性组

删除关联性组

  1. 单击 ComputeVirtual Machines 并选择虚拟机。
  2. 单击虚拟机的名称,以转至详情视图。
  3. 单击 Affinity Groups 选项卡。
  4. 单击 Remove
  5. 点击 确定

应用到该关联组成员的虚拟机的关联策略不再适用。

6.11.5. 关联性组示例

以下示例演示了如何使用本章中描述的关联性组能力的不同功能,将关联性规则应用于各种场景。

例 6.1. 高可用性

Dalia 是一家创业公司的一个 DevOps 工程师。要获得高可用性,特定系统的两个虚拟机应在集群任何位置的不同主机上运行。

Dalia 创建名为"高可用性"的关联性组,并执行以下操作:

  • 将两个虚拟机 VM01VM02 添加到 affinity 组。
  • VM 相关性 设置为 Negative,以便虚拟机尝试在单独的主机上运行。
  • 保留 Enforcing 没有被选择(代表禁用),以便在停机期间只有一台主机可用时两个虚拟机都可以继续运行。
  • Hosts 列表留空,以便虚拟机在集群中的任何主机上运行。

例 6.2. 性能

Sohni 是一款软件开发人员,每天使用两个虚拟机来构建和测试其软件。这两个虚拟机之间存在大量网络流量。在同一主机上运行机器可减少网络流量和网络延迟对构建和测试流程的影响。使用高度特定的主机(更快的 CPU、SSD 等等)可进一步加快此过程。

Sohni 创建名为"build and test"的关联性组,并执行以下操作:

  • VM01VM02 (构建和测试虚拟机)添加到 affinity 组。
  • 将高度特定的主机 host03host04host05 添加到 affinity 组。
  • VM affinity 设置为 Positive,以便虚拟机尝试在同一主机上运行,从而减少网络流量和延迟影响。
  • Host affinity 设置为 Positive,以便虚拟机尝试在高规格主机上运行并加快进程。
  • 确定两个规则的 Enforcing 都没有被选择(代表禁用),以便在高特定主机不可用时虚拟机可以运行。

例 6.3. 许可证

软件资产经理 Bandile 帮助其组织遵守 3D 成像软件供应商的限制性许可要求。这些术语要求虚拟机许可服务器 VM-LS 和镜像工作站 VM-WS# 在同一主机上运行。此外,基于物理 CPU 的许可模型要求工作站在两个 GPU 的主机 host-gpu-primaryhost-gpu-backup 上运行。

为满足这些要求,Bandile 会创建一个名为"3D seismic imaging"的关联性组,并执行以下操作:

  • 将前面提到的虚拟机和主机添加到 affinity 组。
  • VM 关联性 设置为 Positive 并选择Enforcing,因此许可服务器和工作站必须在其中一个主机上运行,而不是在多个主机上共同运行。
  • 主机关联性设置为 Positive 并选择 Enforcing,因此虚拟机 必须在 GPU 的任一 GPU 上运行,而不是在群集中的其他主机上运行。

6.11.6. 关联性组故障排除

帮助防止与关联性组相关的问题

  • 规划和记录在使用关联性组时预期的场景和结果。
  • 验证并测试一系列条件下的结果。
  • 遵守变更管理最佳实践。
  • 仅在需要时使用 Enforcing 选项。

如果您观察到虚拟机未运行的问题

  • 验证集群是否具有 weight 模块和 filter 模块部分的调度策略,其中包含 VmAffinityGroupsVmToHostsAffinityGroups。如需更多信息,请参阅管理指南中的新调度策略和编辑调度策略窗口中的设置说明
  • 检查关联性标签和关联性组之间的冲突。

对于关联性标签和关联性组之间可能存在冲突

  • 如果关联性标签和关联性组相互冲突,则虚拟机的交集不会运行。
  • 要确定是否存在冲突:

    • 检查集群的调度策略的 filter 模块 部分。它们必须包含 Label 关键字和 VmAffinityGroupsVmToHostsAffinityGroups 关键字。否则,无法发生冲突。( weight 模块 部分中的 VmAffinityGroupsVmToHostsAffinityGroups 无关紧要,因为过滤器模块部分中的标签会覆盖它们。)
    • 检查关联性组。它们必须包含已启用 强制 的规则。否则,无法发生冲突。
  • 如果冲突存在,请识别可能涉及的虚拟机集合:

    • 检查关联性标签和组。在启用了 Enforcing 选项的情况下,创建属于关联性标签和关联性组的虚拟机列表。
    • 对于此交集中的每个主机和虚拟机,分析发生潜在冲突的条件。
  • 确定实际未运行的虚拟机是否与分析中的虚拟机匹配。
  • 重组关联性组和关联性标签,以帮助避免意外冲突。
  • 验证任何更改是否在一系列条件下产生预期的结果。
  • 如果您有重叠的关联组和关联性标签,可以更轻松地将它们从一个位置查看为关联性组。考虑将关联性标签转换为等同的关联性组,它的 Host affinity rulePositive 并启用了 Enforcing