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

- failure-domain.beta.kubernetes.io/region 表示该节点所在的地理地域
- failure-domain.beta.kubernetes.io/region 表示该节点所在的可用性区域
- kubernetes.io/hostname 该节点的主机名
16.2.1 指定强制性节点亲缘性规则
使用节点选择器的方式:
- nodeSelector

使用节点亲缘性的方式:


较长的节点亲缘性属性名的意义
- requiredDuringScheduling… 表明了该宇段下定义的规则,为了让 pod 能调度到该节点上,明确指出了该节点必须包含的标签。
- …IgnoredDuringExecution 表明了该字段下定义的规 则, 不会影响己经在节点上运行着的 pod
了解节点选择器条件
nodeSelectorTerms, matchExpressions 这两个字段定义了节点的标签必须满足哪一种表达式,才能满足 pod 调度的条件.
- 这个 pod 只会被调度到包含 gpu=true 的节点上

16.2.2 调度 pod 时优先考虑某些节点
preferredDuringSchedulingIgnoredDuringExecution 字段.
给节点加上标签
每个节点需要包含两个标签:
- 一 个用于表示所在的这个节点所归属的可用性区域
- 另 一 个用于表示这是 一 个独占的节点还是 一个共享的节点 。
为节点添加标签:

指定优先级节点亲缘性规则
dedicated: 独占


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

在一个包含两个节点的集群中部署节点
结合16.10, 16.11, node1.k8s 上被调度的 pod 多:

其他调度优先级函数:
- Selector SpreadPriority: 分散部署在 不同节点上,以避免单个节 点失效导致这个服务也宕机
