Kubernetes中topologySpreadConstraint配置未按预期生效问题咨询
问题排查与修复方案
你可以按以下优先级逐一排查:
- 检查Pod标签与拓扑扩散约束匹配性:你配置的
topologySpreadConstraints.labelSelector匹配的是app: my-deployment,必须确保Deployment的Pod模板metadata.labels中存在完全一致的键值对。如果标签不匹配,调度器不会将当前Deployment的副本纳入拓扑分布的统计范围,约束规则直接失效,副本就会被集中调度到同一节点。 - 检查两个目标节点的可分配资源:执行
kubectl describe node <节点名称>查看两个带cloud.google.com/gke-nodepool=preemt2标签的节点剩余CPU、内存等资源是否满足Pod的resources.requests配置。如果其中一个节点剩余资源不足以运行单个Pod副本,调度器只能将所有副本调度到资源足够的节点。 - 检查节点污点与容忍配置:确认两个目标节点是否存在未被Deployment容忍的污点,如果其中一个节点有自定义污点且你没有配置对应
tolerations,调度器将无法将副本调度到该节点。 - 确认集群版本与特性门控状态:拓扑扩散约束在K8s 1.18及更早版本为Alpha特性,需要手动开启kube-scheduler的
EvenPodsSpread特性门控才可生效;1.19到1.23版本为Beta特性默认开启,1.24及以上版本正式GA默认启用。如果集群版本低于1.19需要先确认特性门控是否开启。 - 查看调度器日志定位原因:如果以上配置都无异常,执行
kubectl logs -n kube-system <kube-scheduler Pod名称>查看调度日志,可直接看到每个Pod副本的调度决策逻辑,精准定位无法分散调度的根因。
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

