k8s pod调度--NodeAffinity: Node 亲和性调度

NodeAffinity 亲和性调度

NodeAffinity 介绍

NodeAffinity 意为 Node 亲和性的调度策略,是用于替换 NodeSelector 的全新调度策略 。目前有两种节点亲和性表达。

-  RequiredDuringSchedulinglgnoredDuringExecution:必须满足指定的规则才可以调度 Pod到Node上(功能与nodeSelector很像,但是使用的是不同的语法)相当于硬限制。
-  PreferredDuringSchedulinglgnoredDuringExecution:强调优先满足指定规则,调度器会尝试调度 Pod 到 Node 上 ,但并不强求,相 当于软限制 。多个优先级规则还可以设置权重( weight )值,以定义执行的先后顺序。

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

示例

requiredDuringSchedulinglgnoredDuringExecution 要求只运行在 amd64 的节 点上( beta.kubemetes.io/arch In amd64 ) 。
preferredDuringSchedulinglgnoredDuringExecution 的要求是尽量运行在 “磁盘类 型为ssd”(disk-type In ssd )的节点上。

yaml

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
                - matchExpressions:
                  - key: bete.kubernets.io/arch
                    operator: In
                    values:
                    - amd64
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
                  matchExpressions:
                  - key: disk-type
                    operator: In
                    values:
                    - ssd
  containers:
  - name: with-node-affinity
    image: registry.aliyuncs.com/google_containers/pause:3.1

从上面的配置中可 以看到 In 操作符, NodeAffrnity 语法支持的操作符包括 In 、 Notln 、 Exists 、DoesNotExist 、 Gt 、 Lt 。虽然没有节点排斥 的功能, 但是用 Notln 和 DoesNotExist 就可以实现排斥 的 功能了。

NodeAffinity 规则设置的注意事项:

1.如果同时定义了 nodeSelector 和 nodeA伍nity ,那么必须两个条件都得到满足, Pod 才能最终运行在指定的 Node 上。
2.如果 nodeAffrnity 指定了多个 nodeSelectorTerm s , 那么只需要其中 一个能够匹配成功即可 。
3.如果 nodeSelectorTerms 中有多个 matchExpress ion s , 则 一 个节点必须满足所有matchExpressions 才能运行该 Pod 。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐