在Kubernetes(K8s)中,“节点选择器”(Node Selector)和“节点亲和性”(Node Affinity)都是用来指导Pod调度到合适节点的机制,但它们在功能和灵活性上有一定的区别:
节点选择器(Node Selector):
- 是较早且较为基础的一种调度策略,用于简单匹配节点的标签(labels)。
- 当在Pod的规范中定义了节点选择器时,Pod将只能被调度到拥有匹配标签的节点上。
- 节点选择器仅支持简单的相等性匹配,即Pod要么调度到标签完全匹配的节点上,要么无法调度。
节点亲和性(Node Affinity):
- 是节点选择器功能的增强和扩展,提供了更细粒度和更复杂的调度策略。
- 节点亲和性包含硬亲和性(RequiredDuringSchedulingIgnoredDuringExecution)和软亲和性(PreferredDuringSchedulingIgnoredDuringExecution)两种模式:
- 硬亲和性:必须满足,否则Pod无法被调度。类似于节点选择器,但可以定义更复杂的匹配规则,比如集合匹配、集合排除等。
- 软亲和性:不是强制要求,而是尽量满足。即便未满足亲和性规则,调度器仍有可能调度Pod到相应的节点,只是这样的节点会得到更高的调度优先级。
- 节点亲和性可以设置更复杂的匹配条件,例如基于节点标签的比较运算符(如存在、不在、等于、不等于等),而且可以组合多个条件,支持AND/OR规则逻辑。
综上所述,节点选择器提供的是标签匹配的基本调度过滤功能,而节点亲和性提供了一种更强大、更灵活的方式来表达Pod与节点间的关系,允许Pod更加精确地定位到适合它的节点上。