工作负载调度策略概述-九游平台
默认情况下,kubernetes调度器在调度工作负载时会自动进行合理分配(例如,将pod分散到资源充足的节点等)。在某些情况下,您可能需要进一步控制pod被部署到哪个节点,那么您可以在工作负载中配置调度策略,指定调度时的硬性限制或者偏好。例如将前台pod和后台pod部署在一起、某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。
您可以使用以下方式来选择kubernetes对pod的调度策略:
调度策略 |
yaml字段定义 |
说明 |
参考文档 |
---|---|---|---|
节点选择 |
nodeselector |
最简单的调度形式,通过节点所具有的标签选择希望调度的目标节点,kubernetes只会将pod调度到拥有指定标签的节点上。 |
|
节点亲和 |
nodeaffinity |
节点亲和可以实现nodeselector的能力,但其表达能力更强,通过标签选择器筛选需要亲和的对象,支持必须满足和尽量满足的亲和性类型。 说明:
如果同时指定nodeselector和nodeaffinity,则两者必须都要满足,才能将pod调度到候选节点上。 |
|
工作负载亲和/反亲和 |
podaffinity/podantiaffinity |
通过工作负载标签选择器筛选需要亲和的对象,并将新建的工作负载调度至目标对象所在的节点(或节点组),同时支持必须满足和尽量满足的亲和性类型。 说明:
工作负载亲和性和反亲和性需要一定的计算时间,因此在大规模集群中会显著降低调度的速度。在包含数百个节点的集群中,不建议使用这类设置。 |
亲和性类型
基于节点亲和或工作负载亲和/反亲和的调度策略还可以设置必须满足的硬约束和尽量满足的软约束,以满足更复杂的调度情况。
规则类型 |
yaml字段定义 |
说明 |
配置示例 |
---|---|---|---|
必须满足 |
requiredduringschedulingignoredduringexecution |
硬约束,即调度器只有在规则被满足的时候才能执行调度。 |
|
尽量满足 |
preferredduringschedulingignoredduringexecution |
软约束,即调度器会尝试寻找满足对应规则的目标对象。即使找不到匹配的目标,调度器仍然会调度该pod。 在使用尽量满足的亲和性类型时,您可以为每个实例设置weight字段,其取值范围是1到100。 权重越高,调度的优先级越高。 |
在上述亲和规则中,yaml字段前半段requiredduringscheduling或preferredduringscheduling表示在调度时需要强制满足(require)或尽量满足(prefer)定义的标签规则。而后半段ignoredduringexecution表示如果节点标签在kubernetes调度pod后发生了变更,pod仍将继续运行不会重新调度。但是如果该节点上的kubelet重启,kubelet会重新对节点亲和性规则进行校验,pod仍会被调度至其他节点。
标签选择器
在创建调度策略时,您需要使用标签选择器的逻辑运算符来筛选标签值,最终确定需要亲和/反亲和的对象。
参数 |
说明 |
yaml示例 |
---|---|---|
key |
标签键名,满足筛选条件的对象需包含该键名的标签,且标签的取值满足标签值列表(values字段)和逻辑运算符的运算关系。 |
以下示例中,满足筛选条件的对象需包含键名为topology.kubernetes.io/zone的标签,并且该标签的取值为az1或az2。 matchexpressions: - key: topology.kubernetes.io/zone operator: in values: - az1 - az2 |
operator |
您可以使用逻辑运算符来确定标签值的筛选规则,所有逻辑运算符如下:
|
|
values |
标签值的列表。 |
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨