更新时间:2024-12-16 GMT+08:00

设置组件实例调度策略

Kubernetes支持节点亲和、Pod亲和/反亲和。通过配置亲和与反亲和规则,可以允许您指定硬性限制或者偏好,例如将前台Pod和后台Pod部署在一起、某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。

Kubernetes的亲和功能由节点和工作负载两种类型组成:

  • 节点亲和:Kubernetes在调度工作负载时支持将节点作为亲和对象,将工作负载调度至具有指定标签和标签值的节点上。例如,某些节点支持使用GPU算力,则可以使用节点亲和调度,确保高性能计算的Pod最终运行在GPU节点上。
  • 工作负载亲和/反亲和:工作负载亲和/反亲和调度是Kubernetes提供的任务调度方式,可以使用工作负载作为亲和对象,灵活地将新建的工作负载调度到与其相关或无关的节点上,可以有效地提高集群的性能和利用率。例如,通信频繁的前端Pod和后端Pod可优先调度到同一个节点或同一个可用区,减少网络延迟。

    工作负载亲和性和反亲和性需要一定的计算时间,因此在大规模集群中会显著降低调度的速度。在包含数百个节点的集群中,不建议使用这类设置。

您可以根据实际业务需要,在设置组件“高级配置”时参考设置节点亲和调度策略设置工作负载亲和/反亲和调度策略为容器部署方式部署的组件实例配置上述调度策略。

设置节点亲和调度策略

  1. 选择“高级配置 > 调度策略”。
  2. 选择节点“亲和性”调度的规则类型。

    • 必须满足:必须满足的硬约束。添加多条“必须满足”规则时,只需要满足一条规则就会进行调度。
    • 尽量满足:尽量满足的软约束。添加多条“尽量满足”规则时,满足其中一条或者都不满足也会进行调度。

  3. 单击“添加”
  4. “对象类型”选择“节点”
  5. 根据实际业务需要添加对象。

    • 添加策略:单击“添加策略”,参考下表设置调度策略参数,可以自定义调度策略。
    • 指定节点:单击“指定节点”,可以快速选择需要调度的节点,无需手动填写节点标签和标签值。指定节点使用的是kubernetes.io/hostname标签。
    • 指定可用区:单击“指定可用区”,可以快速选择需要调度的可用区,无需手动填写可用区标签和标签值。指定可用区使用的是 failure-domain.beta.kubernetes.io/zone标签。

    参数名称

    参数说明

    权重

    2选择的策略类型是“尽量满足”时需设置。

    调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。

    权重的取值范围为1-100。

    标签名

    单击“添加策略”自定义调度策略时,需填写需要匹配的节点标签。

    操作符

    • 单击“添加策略”自定义调度策略时,可设置如下匹配关系。
      • In:亲和对象的标签在标签值列表(values字段)中。
      • NotIn:亲和对象的标签不在标签值列表(values字段)中。
      • Exists:亲和对象存在指定标签名。
      • DoesNotExist:亲和对象不存在指定标签名。
      • Gt:调度节点的标签值大于列表值 (字符串比较)。
      • Lt:调度节点的标签值小于列表值 (字符串比较)。
    • 设置“指定节点”“指定可用区”调度策略时,可设置如下匹配关系。
      • In:亲和对象的标签在标签值列表(values字段)中。
      • NotIn:亲和对象的标签不在标签值列表(values字段)中。

    标签值

    单击“添加策略”自定义调度策略时,需根据选择的“操作符”填写节点“标签名”对应的标签值。

    • “操作符”选择“In”“NotIn”时,标签值填写字符串,多组标签值用分号(;)分割。例如:
      str1;str2;str3
    • “操作符”选择“Exists”“DoesNotExist”时,无需填写标签值,即标签值可以为空。
    • “操作符”选择“Gt”“Lt”时,标签值填写整数,例如5或者-5。

  6. 单击“确定”,完成节点亲和调度策略的设置。

设置工作负载亲和/反亲和调度策略

  1. 选择“高级配置 > 调度策略”。
  2. 参考下表选择工作负载“亲和性”“反亲和性”调度的规则类型。

    调度策略

    规则类型

    说明

    亲和性

    必须满足

    必须满足的硬约束。

    通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod强制调度到该节点范围。

    说明:

    添加多条亲和性规则时,即设置多个标签进行筛选,Pod需要同时拥有所有标签才被视为满足目标筛选条件。

    尽量满足

    尽量满足的软约束。

    通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod优先调度到该节点范围。

    说明:

    添加多条亲和性规则时,即设置多个标签进行筛选,Pod需要同时拥有所有标签才被视为满足目标筛选条件。

    反亲和性

    必须满足

    必须满足的硬约束。

    通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器不会将本次创建的Pod调度到该节点范围。

    说明:

    添加多条反亲和性规则时,即设置多个标签进行筛选,Pod拥有其中一个标签即被视为满足目标筛选条件。

    尽量满足

    尽量满足的软约束。

    通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在通过节点标签圈定的节点范围内的某个节点上,调度器会将本次创建的Pod优先调度到其他节点范围。

    说明:

    添加多条反亲和性规则时,即设置多个标签进行筛选,Pod拥有其中一个标签即被视为满足目标筛选条件。

  3. 单击“添加”
  4. “对象类型”选择“工作负载”
  5. 根据实际业务需要添加对象。

    • 单击“添加策略”,可以自定义调度策略,根据节点标签实现灵活的调度策略。
    • 单击“指定组件”,勾选需要调度的组件,单击“确定”,可以快速选择需要调度的组件,无需手动填写组件标签和标签值。

      参数名称

      参数说明

      权重

      2选择的策略类型是“尽量满足”时需设置。

      调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。

      权重的取值范围为1-100。

      命名空间

      选择对象所在“命名空间”,用于指定调度策略生效的命名空间。

      标签名

      • 单击“添加策略”自定义调度策略时,需填写需要匹配的工作负载标签。
      • 单击“指定组件”设置指定组件调度策略时,可以使用系统默认的标签,也可以使用自定义标签。

      操作符

      单击“添加策略”自定义调度策略时,需设置匹配关系。

      • In:亲和/反亲和对象的标签在标签值列表(values字段)中。
      • NotIn:亲和/反亲和对象的标签不在标签值列表(values字段)中。
      • Exists:亲和/反亲和对象存在指定标签名。
      • DoesNotExist:亲和/反亲和对象不存在指定标签名。

      标签值

      根据选择的“操作符”填写工作负载“标签名”对应的标签值。

      • “操作符”选择“In”“NotIn”时,标签值填写字符串,多组标签值用分号(;)分割。例如:
        str1;str2;str3
      • “操作符”选择“Exists”“DoesNotExist”时,无需填写标签值,即标签值为空。

  6. 单击“确定”,完成工作负载亲和/反亲和调度策略的设置。