You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用kubeadm创建K8s集群时AddOn Pod始终处于Pending状态的问题

嘿,我来帮你搞定这个Pod一直Pending的问题!这种调度失败的情况在kubeadm刚搭建的集群里太常见了,咱们一步步来排查:

第一步:先确认集群节点的状态

首先执行这个命令,看看你的节点是不是处于可用状态:

kubectl get nodes

如果输出里节点的STATUS不是Ready,那问题的根源肯定在节点本身,这也是最常见的原因。

如果节点显示NotReady:

大概率是你还没部署网络插件——kubeadm默认不会自动安装网络组件,而网络插件是节点进入Ready状态的必要条件。

  1. 先确认节点NotReady的具体原因:

    kubectl describe node <你的节点名称>
    

    看输出里的Conditions区块,如果看到NetworkUnavailable标记为True,那实锤就是没装网络插件了。

  2. 部署kubeadm官方支持的网络插件(比如Calico、Flannel、Weave等),按照官方文档的步骤创建对应的YAML资源即可。部署完成后等个几分钟,再用kubectl get nodes检查,节点应该会变成Ready状态,Pending的Pod也会自动开始调度。

  3. 另外也可以检查kubelet的运行状态,看看有没有启动失败或者报错:

    systemctl status kubelet
    

    如果kubelet没正常运行,根据输出的错误提示修复就行,比如配置文件错误、依赖缺失之类的。

如果节点已经是Ready状态:

那得排查是不是资源不足或者有调度限制:

  1. 查看节点的资源使用情况:
    再次执行kubectl describe node <你的节点名称>,找到Allocated resources部分,看看CPU、内存是不是已经被占满了。如果资源不够,要么扩容节点,要么清理掉集群里不必要的Pod。

  2. 检查节点有没有设置调度污点:
    在kubectl describe node的Taints区块,如果看到类似node-role.kubernetes.io/master:NoSchedule的条目——这是kubeadm默认给master节点加的污点,防止普通Pod调度到master上。如果你的集群只有这一个master节点,而你的AddOn Pod(比如Tiller、Dashboard)没有配置对应容忍度的话,就会被调度器拒绝。

    • 解决办法:要么给这些AddOn Pod添加对应的容忍度配置,要么临时移除master节点的污点(注意:生产环境不推荐这么做):
      kubectl taint nodes <你的节点名称> node-role.kubernetes.io/master-
      
额外提醒:关于Tiller

Tiller是Helm2的组件,现在Helm3已经完全废弃了Tiller,如果你是刚搭建的集群,建议直接使用Helm3来管理应用,这样能避免Tiller带来的权限和部署复杂度问题。

内容的提问来源于stack exchange,提问作者Flea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:29:06