Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

16.2.5.3. 可配置 predicates

您可以在调度程序配置中配置这些 predicates,默认为 /etc/origin/master/scheduler.json,添加可影响 predicate 函数的标签。

由于它们是可配置的,因此可以组合相同类型的多个谓词(但配置参数不同),只要其用户定义的名称不同。

有关使用这些优先级的详情,请参考修改调度程序策略

serviceAffinity 根据该 pod 上运行的服务将 pod 放置到节点上。将同一服务的 pod 放置到相同或共同定位的节点上可提高效率。

此 predicate 会尝试在其 节点选择器 中将带有特定标签的 pod 放置到具有相同标签的节点。

如果 pod 没有在其节点选择器中指定标签,则第一个 pod 会根据可用性放置到任何节点上,服务的所有后续 pod 都会调度到具有与该节点相同标签值的节点上。

"predicates":[
      {
         "name":"<name>", 1
         "argument":{
            "serviceAffinity":{
               "labels":[
                  "<label>" 2
               ]
            }
         }
      }
   ],
1
为 predicate 指定名称。
2
指定要匹配的标签。

例如:

        "name":"ZoneAffinity",
        "argument":{
            "serviceAffinity":{
                "labels":[
                    "rack"
                ]
            }
        }

例如,如果服务的第一个 pod 具有节点选择器 rack 被调度到一个带有 region=rack 标签的节点,则属于同一服务的所有其他后续 pod 都将被调度到具有相同 region=rack 标签的节点。如需更多信息,请参阅 控制 Pod 放置

也支持多级标签。用户也可以指定服务要调度到同一地区内、同一区域(位于区域下)的所有 pod。

labelsPresence 参数检查特定节点是否具有特定的标签。标签创建 LabelPreference 优先级使用的节点 。例如,通过标签匹配非常有用,其中节点具有按标签定义的物理位置或状态。

"predicates":[
      {
         "name":"<name>", 1
         "argument":{
            "labelsPresence":{
               "labels":[
                  "<label>" 2
                ],
                "presence": true 3
            }
         }
      }
   ],
1
为 predicate 指定名称。
2
指定要匹配的标签。
3
指定是否需要标签,可以是 truefalse
  • 对于 presence:false,如果节点标签中存在任何请求的标签,则无法调度 pod。如果标签不存在,可以调度 pod。
  • 对于 presence:true,如果节点标签中存在所有请求的标签,则可以调度 pod。如果没有所有标签,则不会调度 pod。

例如:

        "name":"RackPreferred",
        "argument":{
            "labelsPresence":{
                "labels":[
                    "rack",
                    "region"
                ],
                "presence": true
            }
        }