九游平台/ 云容器引擎 cce/ / / / 工作负载调度策略概述
更新时间:2024-07-20 gmt 08:00

工作负载调度策略概述-九游平台

默认情况下,kubernetes调度器在调度工作负载时会自动进行合理分配(例如,将pod分散到资源充足的节点等)。在某些情况下,您可能需要进一步控制pod被部署到哪个节点,那么您可以在工作负载中配置调度策略,指定调度时的硬性限制或者偏好。例如将前台pod和后台pod部署在一起、某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。

您可以使用以下方式来选择kubernetes对pod的调度策略:

表1 工作负载调度策略

调度策略

yaml字段定义

说明

参考文档

节点选择

nodeselector

最简单的调度形式,通过节点所具有的标签选择希望调度的目标节点,kubernetes只会将pod调度到拥有指定标签的节点上。

节点亲和

nodeaffinity

节点亲和可以实现nodeselector的能力,但其表达能力更强,通过标签选择器筛选需要亲和的对象,支持必须满足尽量满足亲和性类型

说明:

如果同时指定nodeselector和nodeaffinity,则两者必须都要满足,才能将pod调度到候选节点上。

工作负载亲和/反亲和

podaffinity/podantiaffinity

通过工作负载标签选择器筛选需要亲和的对象,并将新建的工作负载调度至目标对象所在的节点(或节点组),同时支持必须满足尽量满足亲和性类型

说明:

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

亲和性类型

基于节点亲和或工作负载亲和/反亲和的调度策略还可以设置必须满足的硬约束和尽量满足的软约束,以满足更复杂的调度情况。

表2 亲和性类型

规则类型

yaml字段定义

说明

配置示例

必须满足

requiredduringschedulingignoredduringexecution

硬约束,即调度器只有在规则被满足的时候才能执行调度。

尽量满足

preferredduringschedulingignoredduringexecution

软约束,即调度器会尝试寻找满足对应规则的目标对象。即使找不到匹配的目标,调度器仍然会调度该pod。

在使用尽量满足的亲和性类型时,您可以为每个实例设置weight字段,其取值范围是1到100。 权重越高,调度的优先级越高。

在上述亲和规则中,yaml字段前半段requiredduringscheduling或preferredduringscheduling表示在调度时需要强制满足(require)或尽量满足(prefer)定义的标签规则。而后半段ignoredduringexecution表示如果节点标签在kubernetes调度pod后发生了变更,pod仍将继续运行不会重新调度。但是如果该节点上的kubelet重启,kubelet会重新对节点亲和性规则进行校验,pod仍会被调度至其他节点。

标签选择器

在创建调度策略时,您需要使用标签选择器的逻辑运算符来筛选标签值,最终确定需要亲和/反亲和的对象。

表3 标签选择器

参数

说明

yaml示例

key

标签键名,满足筛选条件的对象需包含该键名的标签,且标签的取值满足标签值列表(values字段)和逻辑运算符的运算关系。

以下示例中,满足筛选条件的对象需包含键名为topology.kubernetes.io/zone的标签,并且该标签的取值为az1az2

matchexpressions:
  - key: topology.kubernetes.io/zone
    operator: in
    values:
    - az1
    - az2

operator

您可以使用逻辑运算符来确定标签值的筛选规则,所有逻辑运算符如下:

  • in:亲和/反亲和对象的标签包含在标签值列表(values字段)中。
  • notin:亲和/反亲和对象的标签不包含在标签值列表(values字段)中。
  • exists:亲和/反亲和对象存在指定标签名,此时无需填写标签值列表(values字段)。
  • doesnotexist:亲和/反亲和对象不存在指定标签名,此时无需填写标签值列表(values字段)。
  • gt:仅在节点亲和性中设置,调度节点的标签值大于列表值 (字符串比较)。
  • lt:仅在节点亲和性中设置,调度节点的标签值小于列表值 (字符串比较)。

values

标签值的列表。

相关文档

网站地图