×

您可以使用调度程序驱逐 Pod,以便可以将 Pod 调度到更合适的节点上。如果 Pod 是虚拟机,则 Pod 驱逐会导致虚拟机实时迁移到另一个节点。

调度程序配置文件

使用LongLifecycle配置文件在虚拟机上启用调度程序。这是目前OpenShift Virtualization中唯一可用的调度程序配置文件。为了确保正确的调度,请使用预期的负载创建具有CPU和内存请求的虚拟机。

LongLifecycle

此配置文件平衡节点之间的资源使用,并启用以下策略:

  • RemovePodsHavingTooManyRestarts:删除其容器已重启过多的Pod,以及所有容器(包括Init容器)的重启总和超过100次的Pod。重启虚拟机客户操作系统不会增加此计数。

  • LowNodeUtilization:当存在任何利用率低的节点时,从利用率过高的节点驱逐Pod。被驱逐Pod的目标节点将由调度程序确定。

    • 如果节点的所有阈值(CPU、内存和Pod数量)的使用率低于20%,则认为该节点利用率低。

    • 如果节点的任何阈值(CPU、内存和Pod数量)的使用率高于50%,则认为该节点利用率过高。

安装调度程序

调度程序默认情况下不可用。要启用调度程序,您必须从OperatorHub安装Kube Descheduler Operator并启用一个或多个调度程序配置文件。

默认情况下,调度程序以预测模式运行,这意味着它只模拟Pod驱逐。您必须将模式更改为自动模式,才能使调度程序执行Pod驱逐。

如果您在集群中启用了托管控制平面,请设置自定义优先级阈值以降低托管控制平面命名空间中Pod被驱逐的可能性。将优先级阈值类名称设置为hypershift-control-plane,因为它具有托管控制平面优先级类中最低的优先级值(100000000)。

先决条件
  • 您已以具有cluster-admin角色的用户身份登录到OpenShift Container Platform。

  • 访问OpenShift Container Platform Web控制台。

步骤
  1. 登录到OpenShift Container Platform Web控制台。

  2. 为Kube Descheduler Operator创建所需的命名空间。

    1. 导航到**管理**→**命名空间**,然后单击**创建命名空间**。

    2. 在**名称**字段中输入openshift-kube-descheduler-operator,在**标签**字段中输入openshift.io/cluster-monitoring=true以启用调度程序指标,然后单击**创建**。

  3. 安装Kube Descheduler Operator。

    1. 导航到**操作符**→**OperatorHub**。

    2. 在筛选框中键入**Kube Descheduler Operator**。

    3. 选择**Kube Descheduler Operator**,然后单击**安装**。

    4. 安装 Operator 页面,选择集群上的特定命名空间。从下拉菜单中选择openshift-kube-descheduler-operator

    5. 更新通道审批策略的值调整为所需值。

    6. 点击安装

  4. 创建一个 descheduler 实例。

    1. Operators已安装的 Operators 页面,点击Kube Descheduler Operator

    2. 选择Kube Descheduler 标签并点击创建 KubeDescheduler

    3. 根据需要编辑设置。

      1. 要驱逐 Pod 而不是模拟驱逐,请将模式字段更改为自动

      2. 展开配置文件部分并选择LongLifecycleAffinityAndTaints 配置文件默认启用。

        当前 OpenShift Virtualization 可用的唯一配置文件是LongLifecycle

您也可以稍后使用 OpenShift CLI (oc) 配置 descheduler 的配置文件和设置。

启用虚拟机 (VM) 上的 descheduler 驱逐功能

安装 descheduler 后,您可以通过向VirtualMachine 自定义资源 (CR) 添加注释来启用 VM 上的 descheduler 驱逐功能。

先决条件
  • 在 OpenShift Container Platform Web 控制台或 OpenShift CLI (oc) 中安装 descheduler。

  • 确保 VM 未运行。

步骤
  1. 启动 VM 之前,将descheduler.alpha.kubernetes.io/evict 注释添加到VirtualMachine CR。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    spec:
      template:
        metadata:
          annotations:
            descheduler.alpha.kubernetes.io/evict: "true"
  2. 使用LongLifecycle 配置文件配置KubeDescheduler 对象,并启用后台驱逐功能,以提高实时迁移期间 VM 驱逐的稳定性。

    apiVersion: operator.openshift.io/v1
    kind: KubeDescheduler
    metadata:
      name: cluster
      namespace: openshift-kube-descheduler-operator
    spec:
      deschedulingIntervalSeconds: 3600
      profiles:
      - LongLifecycle (1)
      mode: Predictive (2)
      profileCustomizations:
        devEnableEvictionsInBackground: true (3)
    1 您只能设置LongLifecycle 配置文件。此配置文件平衡节点之间的资源使用。
    2 默认情况下,descheduler 不会驱逐 Pod。要驱逐 Pod,请将mode 设置为Automatic
    3 启用devEnableEvictionsInBackground 允许在后台进行驱逐,从而提高稳定性并减轻实时迁移期间的振荡行为。

现在已在 VM 上启用 descheduler。

其他资源