
# 负载亲和调度策略
1. 进入[CCE Console](https://console.huaweicloud.com/cce/?locale=zh-cn)页面，单击"集群名称--工作负载"，单击待升级工作负载更多列的"编辑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]页面待升级工作负载的操作列的"升级"按钮来配置，对应参数如下：
   ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001950356926.png)
   **建议值说明**：
   - 负载反亲和硬约束：Pod调度到不同的节点上。
   
   
   
   - 负载反亲和软约束：Pod优先调度到不同可用区的节点上。
   
   
   **负载亲和参数说明：**
   
   | **策略**   | **规则类型** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|:---|
   | 工作负载亲和性  | 必须满足     | 即硬约束，设置必须满足的条件，对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要亲和的Pod，如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上，调度器会将本次创建的Pod**强制**调度到该拓扑域。 ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001980602833.png)**说明：** 添加多条亲和性规则时，即设置多个标签筛选需要亲和的Pod，则本次创建的Pod必须要同时亲和所有满足标签筛选的Pod，即所有满足标签筛选的Pod要处于同一拓扑域中才可以调度。                         |
   | 工作负载亲和性  | 尽量满足     | 即软约束，设置尽量满足的条件，对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要亲和的Pod，如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上，调度器会将本次创建的Pod**优先**调度到该拓扑域。 ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001949923420.png)**说明：** 添加多条亲和性规则时，即设置多个标签筛选需要亲和的Pod，则本次创建的Pod会尽量同时亲和多个满足标签筛选的Pod。但即使所有Pod都不满足标签筛选条件，也会选择一个拓扑域进行调度。                  |
   | 工作负载反亲和性 | 必须满足     | 即硬约束，设置必须满足的条件，对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要反亲和的一个或多个Pod，如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上，调度器**不会**将本次创建的Pod调度到该拓扑域。 ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001980482997.png)**说明：** 添加多条反亲和性规则时，即设置多个标签筛选需要反亲和的Pod，则本次创建的Pod必须要同时反亲和所有满足标签筛选的Pod，即所有满足标签筛选的Pod所处的拓扑域都不会被调度。                  |
   | 工作负载反亲和性 | 尽量满足     | 即软约束，设置尽量满足的条件，对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要反亲和的一个或多个Pod，如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上，调度器会将本次创建的Pod**优先**调度到其他拓扑域。 ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001980602849.png)**说明：** 添加多条反亲和性规则时，即设置多个标签筛选需要反亲和的Pod，则本次创建的Pod会尽量同时反亲和多个满足标签筛选的Pod。但即使每个拓扑域都存在需要反亲和的Pod，也会选择一个拓扑域进行调度。 |
      
   **负载亲和/反亲和调度策略参数说明：**
   
   | **参数名** | **参数描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 权重      | 仅支持在"尽量满足"策略中添加。权重的取值范围为1-100，调度器在进行调度时会将该权重加到其他优先级函数的评分上，最终将Pod调度到总分最大的节点上。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 命名空间    | 指定调度策略生效的命名空间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 拓扑域     | 拓扑域（topologyKey）通过节点的标签先圈定调度的节点范围，例如标签指定为kubernetes.io/hostname，则根据标签值不同（标签值为节点名称）区分范围，不同名称的节点为不同的拓扑域，此时一个拓扑域中仅包含一个节点；如果指定标签为kubernetes.io/os，则根据标签值不同（标签值为节点的操作系统类型）来区分，不同操作系统的节点为不同的拓扑域，此时一个拓扑域中可能包含多个节点。 根据拓扑域确定节点范围后，然后再选择策略定义的内容（通过标签名、操作符、标签值确定）进行调度，调度时最小单位为拓扑域。例如，某个拓扑域中的一个节点满足负载亲和性规则，则该拓扑域中的节点均可以被调度。                                                                                                                                                                                                                                                |
   | 标签名     | 设置工作负载亲和/反亲和性时，填写需要匹配的工作负载标签。 该标签可以使用系统默认的标签，也可以使用自定义标签。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 操作符     | 可以设置四种匹配关系（In、NotIn、Exists、DoesNotExist）。 - In：亲和/反亲和对象的标签在标签值列表（values字段）中。  - NotIn：亲和/反亲和对象的标签不在标签值列表（values字段）中。  - Exists：亲和/反亲和对象存在指定标签名。  - DoesNotExist：亲和/反亲和对象不存在指定标签名。   |
   | 标签值     | 设置工作负载亲和/反亲和性时，填写工作负载标签对应的标签值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      
   
   
![](https://support.huaweicloud.com/bestpractice-asm/public_sys-resources/note_3.0-zh-cn.png)
配置负载亲和参数会触发工作负载滚动升级，即Pod会立即发生重启。
