用 kubectl cluster-info 和 kubectl auth can-i --list 可快速定位集群连接失败原因:网络不通、证书过期或 rbac 权限不足,并结合错误信息精准排查。

怎么快速验证 kubectl 能不能连上集群
连不上集群是部署阶段最常卡住的地方,不是配置错就是权限没通。先别急着查 YAML,用 kubectl cluster-info 和 kubectl auth can-i --list 两步就能定位是网络问题、证书过期,还是 RBAC 权限不足。
常见错误现象:The connection to the server <ip> was refused</ip> —— 说明 API Server 没监听或防火墙挡了;x509: certificate has expired or is not yet valid —— /etc/kubernetes/pki/ 下的证书大概率过期了;error: You must be logged in to the server —— kubeconfig 文件里 user 字段指向的凭据失效或缺失。
- 检查
kubeconfig路径是否正确:默认读$HOME/.kube/config,非默认路径必须加--kubeconfig=/path/to/config - 确认当前 context 是否指向目标集群:
kubectl config current-context,切换用kubectl config use-context <name></name> - API Server 地址必须能被节点直接访问,不要用 localhost 或 127.0.0.1(除非在 master 上且启用了 insecure-port)
init 初始化失败后怎么安全重试
kubeadm init 失败后不能直接再跑一遍,残留的 etcd 数据、证书、容器网络状态会冲突,大概率报 Port 6443 is in use 或 etcd member already exists。
使用场景:网络中断、镜像拉取失败、配置写错导致 init 半途退出。
- 先清理:
kubeadm reset -f(它会停容器、删数据目录、清 iptables 规则) - 手动删掉残留的 etcd 数据(如果 reset 没清干净):
rm -rf /var/lib/etcd/member - 确认 docker/containerd 已启动且 CRI socket 可达:
systemctl status docker或crictl ps - 如果之前指定了
--cri-socket,重试时必须保持一致,否则 kubeadm 找不到运行时
Pod 一直 Pending,怎么看是资源不够还是调度器卡住
不是所有 Pending 都是 CPU/Mem 不够,也可能是节点污点没处理、CNI 插件没装、或者调度器本身没起来。
OdnShop(原企站帮微商城系统,更名为OdnShop),基于ASP.NET 4.0+Access开发的轻量级微信商城系统,前台简洁美观,后台容易操作。系统容易部署,空间成本低,大部分的几百块一年的虚拟主机均可支持(具体请咨询空间商),适合要求不高,预算不多的小商店,小企业初次尝试微信线上销售产品,目前基本的核心功能,包括微信登陆/支付,产品管理,购物车与订单管理,分享获取积分,积分礼品兑换功能
执行 kubectl describe pod <pod-name></pod-name>,重点看 Events 区域和 Conditions:
- 出现
0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/control-plane: } that the pod didn't tolerate—— Pod 没配 toleration,跑不到 control-plane 节点 - 出现
0/3 nodes are available: 3 node(s) had untolerated taint {node.cloudprovider.kubernetes.io/uninitialized: true}—— CNI 没就绪,kubelet 等不到网络插件初始化完成 - 没有 Events,且
Node-Selectors或Affinity字段为空 —— 先检查kubectl get componentstatuses(注意:1.19+ 默认不启用,改看kubectl get pods -n kube-system | grep scheduler)
Node NotReady 的真实原因怎么快速筛
NotReady 是表象,背后可能差着十万八千里:kubelet 挂了、cgroup 配置错、容器运行时连不上、甚至磁盘满了。
别只看 kubectl get nodes,得进节点查 kubelet 日志和系统状态:
- 查 kubelet 是否存活:
systemctl status kubelet,常见报错failed to run Kubelet: failed to create kubeClient: invalid configuration: no configuration has been provided—— /etc/kubernetes/kubelet.conf 被删或权限不对 - 查 cgroup 驱动是否匹配:
docker info | grep "Cgroup Driver"和cat /var/lib/kubelet/config.yaml | grep cgroupDriver必须一致(cgroupfs 或 systemd) - 查磁盘和 inodes:
df -h和df -i,/var/lib/docker 或 /var/lib/kubelet 满了会导致 kubelet 主动退服 - 如果节点刚重启过,检查
/proc/sys/net/bridge/bridge-nf-call-iptables是否为 1(CNI 依赖这个)
很多环境里,NotReady 看似是网络问题,结果是 kubelet 启动参数里漏了 --container-runtime-endpoint,尤其用 containerd 时容易忽略这个。









