亲和性(affinity) 如何理解拓扑域(topologyKey)?

官方描述

pod 间亲和性与反亲和性
 Pod 间亲和性与反亲和性的规则格式为“如果 X 上已经运行了一个或多个满足规则 Y 的 Pod, 则这个 Pod 应该(或者在反亲和性的情况下不应该)运行在 X 上”。 这里的 X 可以是节点、机架、云提供商可用区或地理区域或类似的拓扑域, Y 则是 Kubernetes 尝试满足的规则。

最终pod调度到哪里的范围就是拓扑域。k8s根据用户的匹配规则获取到一个满足条件的pod所在的拓扑域(可能是某个node,或者是某个region,某个zone),接下来,如果是亲和性,就把当前pod调度到这个拓扑域里面的节点上。如果是反亲和,就把它调度到别的拓扑域上面。
图解如下:
图解拓扑域

  1. 根据拓扑域配置(值相同就是同一个区域):topologyKey=zone,所有的节点被划分为两个区域
  2. 根据用户的配置规则我们找到指定的pod所在的区域是zone=a,pod1在节点node3上面
  3. 假如我们要部署的pod亲和性为反亲和,那么就把pod2部署到了区域zone=b上
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐