×

您可以通过安装 Kube Descheduler Operator 并设置所需的配置文件和其他自定义设置来在 OpenShift Container Platform 中运行驱逐程序。

安装驱逐程序

驱逐程序默认情况下不可用。要启用驱逐程序,您必须从 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. 在**安装操作符**页面上,选择**集群上的特定命名空间**。从下拉菜单中选择**openshift-kube-descheduler-operator**。

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

    6. 单击**安装**。

  4. 创建驱逐程序实例。

    1. 在**操作符** → **已安装的操作符**页面中,单击**Kube Descheduler Operator**。

    2. 选择**Kube Descheduler** 选项卡,然后单击**创建 KubeDescheduler**。

    3. 根据需要编辑设置。

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

配置驱逐程序配置文件

您可以配置驱逐程序用来驱逐 Pod 的配置文件。

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

步骤
  1. 编辑KubeDescheduler 对象

    $ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
  2. spec.profiles 部分中指定一个或多个配置文件。

    apiVersion: operator.openshift.io/v1
    kind: KubeDescheduler
    metadata:
      name: cluster
      namespace: openshift-kube-descheduler-operator
    spec:
      deschedulingIntervalSeconds: 3600
      logLevel: Normal
      managementState: Managed
      operatorLogLevel: Normal
      mode: Predictive                                     (1)
      profileCustomizations:
        namespaces:                                        (2)
          excluded:
          - my-namespace
        podLifetime: 48h                                   (3)
        thresholdPriorityClassName: my-priority-class-name (4)
      evictionLimits:
        total: 20                                          (5)
      profiles:                                            (6)
      - AffinityAndTaints
      - TopologyAndDuplicates
      - LifecycleAndUtilization
      - EvictPodsWithLocalStorage
      - EvictPodsWithPVC
    1 可选:默认情况下,驱逐程序不会驱逐 Pod。要驱逐 Pod,请将mode 设置为Automatic
    2 可选:设置一个用户创建的命名空间列表,用于包含或排除在驱逐程序操作之外。使用excluded设置要排除的命名空间列表,或使用included设置要包含的命名空间列表。请注意,受保护的命名空间(openshift-*kube-systemhypershift)默认情况下会被排除。
    3 可选:为LifecycleAndUtilization配置文件启用自定义 Pod 生命周期值。有效单位为smh。默认 Pod 生命周期为 24 小时。
    4 可选:指定一个优先级阈值,仅当 Pod 的优先级低于指定级别时才考虑将其驱逐。使用thresholdPriority字段设置数值优先级阈值(例如,10000),或使用thresholdPriorityClassName字段指定某个优先级类名称(例如,my-priority-class-name)。如果指定优先级类名称,则该名称必须已存在,否则驱逐程序将抛出错误。请勿同时设置thresholdPrioritythresholdPriorityClassName
    5 可选:设置每次驱逐程序运行期间要驱逐的 Pod 的最大数量。
    6 添加一个或多个要启用的配置文件。可用的配置文件:AffinityAndTaintsTopologyAndDuplicatesLifecycleAndUtilizationSoftTopologyAndDuplicatesEvictPodsWithLocalStorageEvictPodsWithPVCCompactAndScaleLongLifecycle。确保您不启用相互冲突的配置文件。

    您可以启用多个配置文件;配置文件的指定顺序无关紧要。

  3. 保存文件以应用更改。

配置驱逐程序间隔

您可以配置驱逐程序运行之间的时间间隔。默认为 3600 秒(一小时)。

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

步骤
  1. 编辑KubeDescheduler 对象

    $ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
  2. deschedulingIntervalSeconds字段更新为所需的值。

    apiVersion: operator.openshift.io/v1
    kind: KubeDescheduler
    metadata:
      name: cluster
      namespace: openshift-kube-descheduler-operator
    spec:
      deschedulingIntervalSeconds: 3600 (1)
    ...
    1 设置驱逐程序运行之间的时间间隔(秒)。此字段中的值为0表示驱逐程序运行一次后退出。
  3. 保存文件以应用更改。