一、Pod亲和性和互斥性
在实际生产环境中有一类特殊的Pod调度需求:存在某些相互依赖、频繁调度的Pod,他们尽可能的部署在同一个Node节点、机架、机房、网段或者区域(Zone)内,这就是Pod的亲和性;反之,出于避免竞争或者容错需求,我们尽可能使某些Pod尽可能远离某些特定的Pod,这就是Pod直接的反亲和性或者互斥性。
Pod间的亲和性与互斥性调度策略从kuberbetes1.4版本开始引入。简单地说,就是相关联的两种或者多种Pod是否可以在同一个拓扑域共存或者互斥,前者被称为Pod的Affinity,后者被称为Pod AntiAffinity。
什么是拓扑域? 一个拓扑域由一些Node节点组成,这些Node节点通常有相同的地理空间坐标,比如一个机架、机房或区域,一般用region表示机架、机房等的拓扑区域,用Zone表示地区这个跨度更多拓扑区域。在极端情况下,也可以认为一个Node就是一个拓扑区域。kubernetes内置了一些默认的拓扑区域:
- kuberbetes.io/hostname
- topology.kubernetes.io/region
- topology.kubernetes.io.zone