×

当节点过载时,OpenShift Virtualization 可以激活内核同页合并 (KSM)。KSM 可对在虚拟机 (VM) 的内存页中找到的相同数据进行重复数据删除。如果您拥有非常相似的虚拟机,KSM 可以使在单个节点上调度更多虚拟机成为可能。

您必须仅将 KSM 用于可信工作负载。

先决条件

  • 确保管理员已在您希望 OpenShift Virtualization 激活 KSM 的任何节点上配置了 KSM 支持。

关于使用 OpenShift Virtualization 激活 KSM

您可以配置 OpenShift Virtualization 以在节点遇到内存过载时激活内核同页合并 (KSM)。

配置方法

您可以使用 OpenShift Container Platform Web 控制台或通过编辑 `HyperConverged` 自定义资源 (CR) 来为所有节点启用或禁用 KSM 激活功能。`HyperConverged` CR 支持更细粒度的配置。

CR 配置

您可以通过编辑 `HyperConverged` CR 的 `spec.configuration.ksmConfiguration` 节来配置 KSM 激活功能。

  • 您可以通过编辑 `ksmConfiguration` 节来启用该功能和配置设置。

  • 您可以通过删除 `ksmConfiguration` 节来禁用该功能。

  • 您可以通过将节点选择语法添加到 `ksmConfiguration.nodeLabelSelector` 字段来允许 OpenShift Virtualization 仅在节点的子集上启用 KSM。

即使在 OpenShift Virtualization 中禁用了 KSM 激活功能,管理员仍然可以在支持它的节点上启用 KSM。

KSM 节点标签

OpenShift Virtualization 会识别配置为支持 KSM 的节点并应用以下节点标签

kubevirt.io/ksm-handler-managed: "false"

当 OpenShift Virtualization 在遇到内存过载的节点上激活 KSM 时,此标签设置为 `"true"`。如果管理员激活 KSM,则此标签不会设置为 `"true"`。

kubevirt.io/ksm-enabled: "false"

即使 OpenShift Virtualization 没有激活 KSM,当在节点上激活 KSM 时,此标签也设置为 `"true"`。

这些标签不会应用于不支持 KSM 的节点。

使用 Web 控制台配置 KSM 激活

您可以使用 OpenShift Container Platform Web 控制台允许 OpenShift Virtualization 在集群中的所有节点上激活内核同页合并 (KSM)。

步骤
  1. 在侧边菜单中,点击**虚拟化** → **概述**。

  2. 选择**设置**选项卡。

  3. 选择**集群**选项卡。

  4. 展开**资源管理**。

  5. 为所有节点启用或禁用此功能。

    • 将**内核同页合并 (KSM)** 设置为开启。

    • 将**内核同页合并 (KSM)** 设置为关闭。

使用 CLI 配置 KSM 激活

您可以通过编辑HyperConverged自定义资源 (CR) 来启用或禁用 OpenShift Virtualization 的内核同页合并 (KSM) 激活功能。如果您只想让 OpenShift Virtualization 在部分节点上激活 KSM,请使用此方法。

步骤
  1. 通过运行以下命令,在默认编辑器中打开HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 编辑ksmConfiguration 部分

    • 要为所有节点启用 KSM 激活功能,请将nodeLabelSelector 值设置为{}。例如:

      apiVersion: hco.kubevirt.io/v1beta1
      kind: HyperConverged
      metadata:
        name: kubevirt-hyperconverged
        namespace: openshift-cnv
      spec:
        configuration:
          ksmConfiguration:
            nodeLabelSelector: {}
      # ...
    • 要在部分节点上启用 KSM 激活功能,请编辑nodeLabelSelector 字段。添加与您希望 OpenShift Virtualization 启用 KSM 的节点匹配的语法。例如,以下配置允许 OpenShift Virtualization 在同时设置了<first_example_key><second_example_key>"true" 的节点上启用 KSM:

      apiVersion: hco.kubevirt.io/v1beta1
      kind: HyperConverged
      metadata:
        name: kubevirt-hyperconverged
        namespace: openshift-cnv
      spec:
        configuration:
          ksmConfiguration:
            nodeLabelSelector:
              matchLabels:
                <first_example_key>: "true"
                <second_example_key>: "true"
      # ...
    • 要禁用 KSM 激活功能,请删除ksmConfiguration 部分。例如:

      apiVersion: hco.kubevirt.io/v1beta1
      kind: HyperConverged
      metadata:
        name: kubevirt-hyperconverged
        namespace: openshift-cnv
      spec:
        configuration:
      # ...
  3. 保存文件。