EKS托管节点组集群自动扩缩容时Pod Pending问题排查求助
问题根因
- Pod配置了两层强制亲和性规则:
- 节点亲和性强制要求必须调度到携带
app=mms-node-group标签的节点 - Pod反亲和性强制要求同一台节点(
topologyKey: kubernetes.io/hostname)上不能运行两个app=mms标签的Pod
- 节点亲和性强制要求必须调度到携带
- 初始状态下集群仅1台节点符合节点亲和性要求,已经运行了1个mms Pod,受反亲和性限制无法调度第二个副本。
- Cluster Autoscaler后续扩容出来的新节点未携带
app=mms-node-group标签,不满足节点亲和性要求,因此即使集群节点数增加,新Pod依然无法调度,持续处于Pending状态。
解决方案
方案1:调整托管节点组配置(推荐)
最贴合自动扩缩容需求的方案:
- 进入EKS控制台,找到当前运行带
app=mms-node-group标签节点的托管节点组,修改节点组的节点标签配置,添加键为app、值为mms-node-group的标签,保存配置后该节点组后续所有新扩容的节点都会自动携带该标签。 - 确认该节点组的自动扩缩容功能已开启,且最大节点数≥2。
- 删除当前Pending的mms Pod,调度器检测到无符合要求的节点后会触发Cluster Autoscaler扩容该节点组,新节点启动完成后Pod会自动调度成功。
方案2:调整Pod亲和性规则
如果业务不需要强制隔离到专属节点,可以修改Deployment的亲和性配置降低调度要求:
- 若不需要强制调度到指定标签节点,可以将节点亲和性的
requiredDuringSchedulingIgnoredDuringExecution改为preferredDuringSchedulingIgnoredDuringExecution,改为软亲和规则。 - 若允许多个mms副本运行在同一节点,可以删除Pod反亲和性配置,或者同样改为软亲和规则。
修改配置重新发布后即可正常扩容Pod。
内容的提问来源于stack exchange,提问作者Gowmi
相关产品推荐
相关产品推荐

