亲和性调度
kubernetes提供了一种亲和性调度(Affinity)。它在NodeSelector的基础之上的进行了扩展,可以通过配置的形式,实现优先选择满足条件的Node进行调度,如果没有,也可以调度到不满足条件的节点上,使调度更加灵活。
Affinity主要分为三类:
- nodeAffinity(node亲和性)∶以node为目标,解决pod可以调度到哪些node的问题
- podAffinitypod亲和性):以pod为目标,解决pod可以和哪些已存在的pod部署在同一个拓扑域中的问题
- podAntiAffinity(pod反亲和性):以pod为目标,解决pod不能和哪些已存在pod部署在同一个拓扑域中的问题
关于亲和性(反亲和性)使用场景的说明:
亲和性:如果两个应用频繁交互,那就有必要利用亲和性让两个应用的尽可能的靠近,这样可以减少因网络通信而带来的性能损耗。
反亲和性:当应用的采用多副本部署时,有必要采用反亲和性让各个应用实例打散分布在各个node上,这样可以提高服务的高可用性。
硬限制
把xxx改为pro会成功,前面把node1标签改为了pro
软限制(如果找不到会调度到其他节点)
PodAffinity亲和性
硬限制
新pod必须要与有标签的nodeenv=xxx或者nodeenv=yyy的pod再同一个node上,显然现在没有在这样的pod,会失败,但是把xxx改为pro会成功
podAntiAffinity 反亲和性
调度到出来pro的节点