更新时间:2024-09-24 GMT+08:00

负载亲和调度策略

  1. 进入CCE Console页面,单击“集群名称--工作负载”,单击待升级工作负载更多列的“编辑YAML”。
  2. 通过YAML配置如下参数:

    spec:
      template:
    spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: app
                        operator: In
                        values:
                          - istio-ingressgateway
                  namespaces:
                    - istio-system
                  topologyKey: kubernetes.io/hostname
              preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 1
                  podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                        - key: app
                          operator: In
                          values:
                            - istio-ingressgateway
                    namespaces:
                      - istio-system
                    topologyKey: topology.kubernetes.io/zone

    也可以通过单击步骤1页面待升级工作负载的操作列的“升级”按钮来配置,对应参数如下:

    建议值说明

    • 负载反亲和硬约束:Pod调度到不同的节点上。
    • 负载反亲和软约束:Pod优先调度到不同可用区的节点上。

    负载亲和参数说明:

    策略

    规则类型

    说明

    工作负载亲和性

    必须满足

    即硬约束,设置必须满足的条件,对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。

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

    说明:

    添加多条亲和性规则时,即设置多个标签筛选需要亲和的Pod,则本次创建的Pod必须要同时亲和所有满足标签筛选的Pod,即所有满足标签筛选的Pod要处于同一拓扑域中才可以调度。

    尽量满足

    即软约束,设置尽量满足的条件,对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。

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

    说明:

    添加多条亲和性规则时,即设置多个标签筛选需要亲和的Pod,则本次创建的Pod会尽量同时亲和多个满足标签筛选的Pod。但即使所有Pod都不满足标签筛选条件,也会选择一个拓扑域进行调度。

    工作负载反亲和性

    必须满足

    即硬约束,设置必须满足的条件,对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。

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

    说明:

    添加多条反亲和性规则时,即设置多个标签筛选需要反亲和的Pod,则本次创建的Pod必须要同时反亲和所有满足标签筛选的Pod,即所有满足标签筛选的Pod所处的拓扑域都不会被调度。

    尽量满足

    即软约束,设置尽量满足的条件,对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。

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

    说明:

    添加多条反亲和性规则时,即设置多个标签筛选需要反亲和的Pod,则本次创建的Pod会尽量同时反亲和多个满足标签筛选的Pod。但即使每个拓扑域都存在需要反亲和的Pod,也会选择一个拓扑域进行调度。

    负载亲和/反亲和调度策略参数说明:

    参数名

    参数描述

    权重

    仅支持在“尽量满足”策略中添加。权重的取值范围为1-100,调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。

    命名空间

    指定调度策略生效的命名空间。

    拓扑域

    拓扑域(topologyKey)通过节点的标签先圈定调度的节点范围,例如标签指定为kubernetes.io/hostname,则根据标签值不同(标签值为节点名称)区分范围,不同名称的节点为不同的拓扑域,此时一个拓扑域中仅包含一个节点;如果指定标签为kubernetes.io/os,则根据标签值不同(标签值为节点的操作系统类型)来区分,不同操作系统的节点为不同的拓扑域,此时一个拓扑域中可能包含多个节点。

    根据拓扑域确定节点范围后,然后再选择策略定义的内容(通过标签名、操作符、标签值确定)进行调度,调度时最小单位为拓扑域。例如,某个拓扑域中的一个节点满足负载亲和性规则,则该拓扑域中的节点均可以被调度。

    标签名

    设置工作负载亲和/反亲和性时,填写需要匹配的工作负载标签。

    该标签可以使用系统默认的标签,也可以使用自定义标签。

    操作符

    可以设置四种匹配关系(In、NotIn、Exists、DoesNotExist)。

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

    标签值

    设置工作负载亲和/反亲和性时,填写工作负载标签对应的标签值。

配置负载亲和参数会触发工作负载滚动升级,即Pod会立即发生重启。