Kubernetes节点无法扩容,Pod长期处于Pending状态求助排查
排查GKE集群Job Pod Pending+幽灵节点异常问题
嘿,针对你遇到的这个GKE集群的异常状况,我结合你给出的信息整理了一套排查和修复思路,咱们一步步来:
问题背景
你遇到的情况是:在GKE集群(节点版本1.10.2-gke.1,节点池配置min size:0 max size:2 total cores: 16CPU total memory: 30GB)中创建新Job时,Pod始终卡在Pending状态;从截图来看,集群层面显示有1个节点在运行,但在Nodes列表里却找不到该节点,同时Job对应的Pod一直处于Pending状态。
第一步:确认"幽灵节点"的真实状态
这种集群显示存在节点但列表看不到的情况,大概率是节点处于失联/NotReady但未被自动清理的状态,或是节点池自动扩缩容出现了同步异常。你可以通过以下命令排查:
- 查看集群所有节点的详细状态(包括可能被标记为Terminating的隐藏节点):
kubectl get nodes -o wide --show-all - 查看GKE节点池的事件和状态,确认是否有扩容/缩容失败的记录:
gcloud container node-pools describe <你的节点池名称> --cluster <集群名称> --zone <集群所在区域>
第二步:排查Pod Pending的根因
Pod一直Pending通常是调度失败,结合幽灵节点的情况,可能的核心原因有两个:
- 调度器绑定了已失联的节点:调度器缓存里还认为那个"幽灵节点"可用,把Pod调度过去,但实际节点已经不在集群中了。你可以查看Pod的调度事件确认:
重点看kubectl describe pod <你的Pod名称>Events部分,如果出现Successfully assigned <Pod名称> to <节点名称>,但这个节点在kubectl get nodes里找不到,那就是这个问题。 - 节点池扩缩容异常:你的节点池min设为0,max设为2,可能扩容时节点创建失败,但集群状态没同步;或者缩容时节点被删除,但调度器缓存没更新。你可以去GCP控制台的Cloud Logging里搜索
container.googleapis.com/operation,查看有没有节点创建/删除失败的日志记录。
第三步:针对性修复方案
根据上面排查出的原因,给出对应的修复步骤:
- 如果是调度器绑定了幽灵节点:
- 先删除这个Pending的Pod,让Job自动重新创建新的Pod:
kubectl delete pod <你的Pod名称> - 如果
kubectl get nodes --show-all能看到这个幽灵节点,强制清理它:kubectl delete node <幽灵节点名称> --force --grace-period=0
- 先删除这个Pending的Pod,让Job自动重新创建新的Pod:
- 如果是节点池扩缩容异常:
- 手动触发一次节点池的缩容再扩容,强制同步集群状态:
gcloud container clusters resize <集群名称> --node-pool <节点池名称> --size 0 --zone <集群所在区域> gcloud container clusters resize <集群名称> --node-pool <节点池名称> --size 2 --zone <集群所在区域> - 等GCP控制台显示节点池节点正常创建后,再重新提交你的Job。
- 手动触发一次节点池的缩容再扩容,强制同步集群状态:
额外建议
你的集群节点版本是1.10.2-gke.1,这个版本非常老旧(GKE 1.10早在2019年就停止官方支持了),很多调度器、节点池同步的已知bug在新版本里已经被修复。如果上述临时修复后问题反复出现,建议尽快把集群升级到GCP当前受支持的稳定版本(比如1.24及以上),从根源上避免这类异常。
内容的提问来源于stack exchange,提问作者mbutan
相关产品推荐
相关产品推荐

