EKS集群Pod创建失败:FailedScheduling错误排查求助
解决EKS单节点集群Pod调度失败(Too many pods)问题
问题分析
从Pod事件中的1 Too many pods错误可以明确:唯一的工作节点已达到Pod数量上限,尽管节点状态显示Ready,但剩余调度名额已被系统Pod或其他已有Pod占满。
排查步骤
查看节点Pod容量与已用情况
执行命令获取节点资源分配详情:kubectl describe node ip-10-0-12-61.ec2.internal在输出的
Capacity段找到pods字段(节点最大Pod上限),在Allocated resources段查看已使用的Pod数量。统计全集群Pod状态
查看所有命名空间下的Pod,确认总占用量:kubectl get pods --all-namespaces重点关注
kube-system命名空间的系统Pod(如kube-proxy、aws-node、coredns等),这些是EKS默认运行的组件,会占用固定的Pod名额。
解决方案
方案1:扩容节点组(推荐)
这是最直接有效的方法,将节点组实例数从1增加至2或更多:
- 通过AWS控制台进入EKS集群的节点组页面,选择目标节点组,点击Edit调整实例数量;
- 或使用AWS CLI命令:
节点扩容完成后,新节点会自动加入集群,Pod调度即可正常进行。aws eks update-nodegroup-config --cluster-name <你的集群名称> --nodegroup-name <你的节点组名称> --scaling-config minSize=2,maxSize=2,desiredSize=2
方案2:调整节点Pod上限(单节点场景)
若必须使用单节点集群,可修改maxPods参数提升上限(注意不能超过实例类型的ENI/IP硬限制):
- 创建自定义EC2启动模板,在用户数据中添加kubelet配置:
注:t3.micro实例最多支持3个ENI,每个ENI含6个IP(含节点自身IP),实际可用Pod IP为#!/bin/bash echo "KUBELET_EXTRA_ARGS=--max-pods=17" >> /etc/sysconfig/kubelet systemctl daemon-reload systemctl restart kubelet3*6-1=17,maxPods不可超过此数值。 - 使用该启动模板创建新节点组,替换原有节点组。
方案3:清理无用Pod
检查并删除处于Pending状态的无用Pod,或临时移除非必要组件Pod以释放名额:
kubectl delete pod <Pod名称> -n <命名空间>
内容的提问来源于stack exchange,提问作者Jagdish0886
相关产品推荐
相关产品推荐

