Node、Pod亲和性调度策略(nodeAffinity、nodeAntAffinity、podAffinity、podAntAffinity)

Node、Pod亲和性调度策略(nodeAffinity、nodeAntAffinity、podAffinity、podAntAffinity)

一、Node亲和性调度

NodeAffinity意为Node节点亲和性的调度策略,是用于替换NodeSelector的全新调度策略。这些规则基于节点上的自定义标签和Pod对象上指定的标签选择器进行定义 。 节点亲和性允许Pod对象定义针对一组可以调度于其上的节点的亲和性或反亲和性,不过,它无法具体到某个特定的节点 。

节点亲和性规则 :

硬亲和性required:强制性规则,Pod调度时必须要满足的规则,而在不存在满足规则的节点时 ,Pod对象会被置为Pending`状态

软亲和性preferred:柔性调度限制,它倾向于将Pod`对象运行于某类特定的节点之上,而调度器也将尽量满足此需求 ,软策略就是满足条件最好了,没有的话也无所谓了的策略;而硬策略就比较强硬了,如果没有满足条件的节点的话,就不断重试直到满足条件为止,简单说就是你必须满足我的要求,不然我就不干**的策略。

1.1eg:nodeAffinity中支持使用 matchExpressions属性构建更为复杂的标签选择机制。面的配置清单示例中定义的Pod对象,其使用节点硬亲和规则定义可将当前Pod对象调度至拥有app标签且其值为jenkins的节点之上

1.1Node硬亲和性
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-required-nodeaffinity
spec:
  affinity:
    nodeAffinity: 
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - {key: app, operator: In, values: ["jenkins"]}
  containers:
  - name: jenkins
    image: jenkins

构建标签选择器表达式中支持使用操作符有InNotlnExistsDoesNotExistLtGt

  • In:label的值在某个列表中
  • NotIn:label的值不在某个列表中
  • Gt:label的值大于某个值
  • Lt:label的值小于某个值
  • Exists:某个label存在
  • DoesNotExist:某个label不存在
1.2Node软亲和性
affinity:           亲和性调度
   nodeAffinity:     node亲和性
     preferredDuringSchedulingIgnoredDuringExecution:   软策略 
       nodeSelectorTerms:    
       - matchExpressions:
         - key: Tier
           operator: In        #label的值在某个列表中
           values:
           - backend           #指定label值有backend中

二、Pod亲和性调度

Pod亲和性调度需要各相关的Pod对象运行于“同一位置”, 而反亲和性调度则要求它们不能运行于“同一位置” 。同一位置取决于节点的位置拓扑, 拓扑的方式不同。

在定义Pod对象的亲和性与反亲和性时,需要借助于标签选择器来选择被依赖的Pod对象,并根据选出的Pod对象所在节点的标签来判定“同一位置”的具体意义。

2.1pod亲和性调度
affinity:
  podAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - {key: app, operator: In, values: ["jenkins"]}
       topologyKey: zone

创建的Pod资源时,调度器首先会基于标签选择器 查询拥有标签app=jenkins的所有Pod资源,接着获取到它们分别所属 的节点的zone标签值,接下来再查询拥有匹配这些标签值的所有节点,从而完成节点预选。而后根据优选函数计算这些节点的优先级,从而挑选出运行新建Pod对象的节点。

2.2pod反亲和性

podAntiAffinty即可用于定义Pod对象的反亲和约束

Pod反亲和性调度也支持使用柔性约束机制,在调度时,它将尽量满足不把位置相斥的Pod对象调度于同一位置,但是,当约束关系无法得到满足时,也可以违反约束而调度。

podAntiAffinity:      #pod的不可调度
     preferredDuringSchedulingIgnoredDuringExecution:   软策略
     - podAffinityTerm:   
         labelSelector:
           matchExpressions:
           - key: spp-gitlab
             operator: In
             values:
             - gitlab-deploy
         topologyKey: "kubernetes.io/hostname"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fine_qq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值