我们发现,我们的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计数进行平衡的。