• K8s 之 节点亲和性的调度策略(NodeAffinity)


    NodeAffinity 是 Node(节点)亲和性的调度策略,用于替换掉 NodeSelector 的调度策略。

    一、NodeAffinity 的亲和性表达

    目前有以下几种亲和性表达。

    RequiredDuringSchedulingIgnoredDuringExecution

    必须满足指定的规则才可以调度 Pod 到 Node 上,相当于 硬限制。

    PreferredDuringSchedulingIgnoredDuringExecution

    强调优先满足指定规则,调度器会尝试调度 Pod 到 Node 上,但并不强求,相当于 软限制。

    多个优先级规则还可以设置权重(weight)值,以此来定义执行的先后顺序。

    节点亲和性权重

    我们可以为 PreferredDuringSchedulingIgnoredDuringExecution 亲和性类别的每个实例设置 weight 字段,取值范围是 1 ~ 100。当调度器找到能够满足 Pod 的其他调度请求的节点时,调度器会比那里节点满足的所有的偏好性规则,并将对应表达式的 weight 值加和。最终的加和值会添加到该节点的其他优先级函数的评分之上。在调度器为 Pod 做出调度决定时,总分最高的节点的优先级也最高。

    IgnoredDuringExecution

    如果一个 Pod 所在的节点在 Pod 运行期间标签发生了变更,不再符合该 Pod的节点亲和性需求,则系统将忽略 Node 上 label 的变化,该 Pod 能继续在该节点运行。

    二、NodeAffinity 的语法规则

    NodeAffinity 语法支持的操作符包括In,NotIn,Exists,DoesNotExist,Gt,Lt。虽然没有节点排斥功能,但是用 NotIn 和 DoesNotExist 就可以实现排斥的功能了。

    • In:label的值在某个列表中
    • NotIn:label的值不在某个列表中
    • Gt:label的值大于某个值
    • Lt:label的值小于某个值
    • Exists:某个label存在
    • DoesNotExist:某个label不存在

    三、NodeAffinity 的注意事项

    • 如果同时定义了 nodeSelector 和 nodeAffinity,那么必须两个条件都得到满足,Pod 才能最终运行到指定的 Node 上。
    • 如果 nodeAffinity 指定了多个 nodeSelectorTerms,那么其中一个能够匹配成功即可。
    • 如果在 nodeSelectorTerms 中有多个 matchExpressions,则一个节点必须满足所有matchExpressions 才能运行该 Pod。

    四、案例

    通过配置 NodeAffinity 的 PreferredDuringSchedulingIgnoredDuringExecution 来实现,优先将 Pod 投递到 32G 内存的节点,其次 16G 内存节点,最后 8G 内存节点。

    spec:
      containers:
      - name: xxxxx
        image: xxxxx
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 20
            preference:
              matchExpressions:
              - key: mem
                operator: In
                values:
                - memory32
          - weight: 10
            preference:
              matchExpressions:
              - key: mem
                operator: In
                values:
                - memory16
          - weight: 1
            preference:
              matchExpressions:
              - key: mem
                operator: In
                values:
                - memory8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    Spring Boot项目搭建流程
    ​LeetCode解法汇总2760. 最长奇偶子数组
    【PTA】 浙江大学计算机与软件学院2021年考研复试上机题自测
    vs code 和 hbuilder 历史记录查询
    JS & Lottie web 动画的使用
    C++ 类的继承特性简单运用
    仿真51单片机程序(下载安装+Proteus)
    BAPI 和 RFC 的区别
    Repo简介
    Fmoc-PEG4-NHS酯,1314378-14-7 含有Fmoc保护胺和NHS酯
  • 原文地址:https://blog.csdn.net/yangchao1125/article/details/125888236