节点亲缘性 (node affinity)

对比节点亲缘性和节点选择器

与节点选择器类似,每个 pod 可以定义自己的节点亲缘性规则。这些规则可以允许你指定硬性限制或者偏好 。如果指定一种偏好的话,你将告知 Kubemetes 对于某个特定的 pod ,它更倾向于调度到某些节点上,之后 Kub emetes 将尽量把这个pod 调度到这些节点上面 。 如果没法实现的话, pod 将被调度到其他某个节点上。

检查默认的节点标签

image.png

  • failure-domain.beta.kubernetes.io/region 表示该节点所在的地理地域
  • failure-domain.beta.kubernetes.io/region 表示该节点所在的可用性区域
  • kubernetes.io/hostname 该节点的主机名


16.2.1 指定强制性节点亲缘性规则

使用节点选择器的方式:

  • nodeSelector

image.png

使用节点亲缘性的方式:

image.png
image.png

较长的节点亲缘性属性名的意义

  • requiredDuringScheduling… 表明了该宇段下定义的规则,为了让 pod 能调度到该节点上,明确指出了该节点必须包含的标签。
  • …IgnoredDuringExecution 表明了该字段下定义的规 则, 不会影响己经在节点上运行着的 pod

了解节点选择器条件

nodeSelectorTerms, matchExpressions 这两个字段定义了节点的标签必须满足哪一种表达式,才能满足 pod 调度的条件.

  • 这个 pod 只会被调度到包含 gpu=true 的节点上

image.png

16.2.2 调度 pod 时优先考虑某些节点

preferredDuringSchedulingIgnoredDuringExecution 字段.

给节点加上标签

每个节点需要包含两个标签:

  • 一 个用于表示所在的这个节点所归属的可用性区域
  • 另 一 个用于表示这是 一 个独占的节点还是 一个共享的节点 。

为节点添加标签:

image.png

指定优先级节点亲缘性规则

dedicated: 独占

image.png
image.png

含义:

你定义了 一 个节点亲缘性优先级,而不是强制要求。你想要 pod 被调度到包含标签 availability - zone=zonel 以及 share-type=dedicated 的节点上。第 一个优先级规则是相对重要 的,因此将其weight 设置为 80 ,而第 二 个优先级规则就不那么 重要( weight 设置为 20 ) 。

了解节点优先级是如何工作的

image.png

在一个包含两个节点的集群中部署节点

结合16.10, 16.11, node1.k8s 上被调度的 pod 多:

image.png

其他调度优先级函数:

  • Selector SpreadPriority: 分散部署在 不同节点上,以避免单个节 点失效导致这个服务也宕机