Kubernetes Pod抗亲和力-基于标签均匀分布的Pod



我们发现,我们的Kubernetes集群往往有热点,某些节点比其他节点获得更多的应用程序实例。

在这种情况下,我们部署了大量Apache Airflow实例,其中一些节点的web或调度器组件是其他节点的3倍。

是否可以使用反亲和规则来强制pod在集群中更均匀地分布?

例如";更喜欢具有标签component=airflow-web的最少pod的节点">

如果抗亲和力不起作用,我们是否也应该研究其他机制?

尝试将其添加到Deployment/StatefulSet.spec.template:

affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: "component"
operator: In
values:
- airflow-web
topologyKey: "kubernetes.io/hostname"

您尝试配置kube-scheduler了吗

kube调度器在两步操作中为pod选择一个节点:

  • Filtering:找到可以调度Pod的节点集
  • Scoring:对剩余节点进行排名,以选择最合适的Pod位置

Scheduling Policies:可用于指定kube调度器运行以过滤和评分节点的谓词和优先级。

kube-scheduler --policy-config-file <filename>
  • 示例配置文件

您的场景的优先级之一是:

  • BalancedResourceAllocation:支持资源使用平衡的节点

这里的正确解决方案是pod拓扑扩展约束:https://kubernetes.io/blog/2020/05/introducing-podtopologyspread/

反亲和性只有在每个节点至少有1个pod之前才有效。排列约束实际上是基于每个节点的pod计数进行平衡的。

最新更新