核心问题出在cgroup驱动不一致、token或ca证书失效、cni网络插件冲突三处:需统一docker与kubelet的cgroup driver为systemd,用kubeadm token create --print-join-command获取有效token,清理并重配cni避免网段冲突。

kubeadm join 执行失败、节点卡在 NotReady、kubelet 日志反复报 "node not found" 或连接拒绝——这些不是配置遗漏,而是几个关键环节没对齐。核心问题通常就出在 cgroup 驱动、证书信任链、网络插件冲突这三处,其他都是衍生产物。
检查并统一 Docker 和 kubelet 的 cgroup 驱动
这是最常被跳过的硬性前提。Docker 默认用 cgroupfs,但新版 kubeadm(1.22+)强制要求 systemd。不一致会导致 kubelet 启动后立即退出,日志里会出现 "failed to run Kubelet: misconfiguration: cgroup driver..." 这类明确提示。
- 查当前驱动:
docker info | grep "Cgroup Driver",如果输出是cgroupfs,必须改 - 编辑
/etc/docker/daemon.json,确保含{"exec-opts": ["native.cgroupdriver=systemd"]} - 执行
systemctl daemon-reload && systemctl restart docker - 重启
kubelet:systemctl restart kubelet,再看journalctl -u kubelet -n 50是否还有驱动报错
确认 token 和 ca-cert-hash 是否有效且匹配
token 过期(默认 24 小时)或 --discovery-token-ca-cert-hash 计算错误,都会让 kubeadm join 卡在 TLS 握手阶段,日志里常见 "x509: certificate signed by unknown authority" 或直接无响应。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 在 Master 上重新生成 token:
kubeadm token create --print-join-command - 不要手动拼接 hash;用命令直接输出完整 join 命令,它已内置正确 hash
- 若必须手算,务必用 Master 节点上的 CA 证书:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1 - 注意:token 是 Master 节点生成的,不能跨集群复用;不同版本 kubeadm 对 hash 算法无差异,但证书路径必须准确
排查 Calico/Flannel 等 CNI 插件导致的网络冲突
节点能 join 成功、kubectl get nodes 显示名字但状态一直是 NotReady,大概率是 CNI 没起来。典型表现是 kubelet 日志里反复刷 "container runtime network not ready",且 kubectl get pods -A 中 calico-node 或 kube-flannel-ds 处于 Pending 或 CrashLoopBackOff。
- 先确认 Pod 网络 CIDR 是否与宿主机网段重叠:比如虚拟机 IP 是
192.168.141.0/24,而 Calico 默认用192.168.0.0/16,就会冲突 - 解决方式不是“重装”,而是修改 CNI 配置:Calico 用
calicoctl改IPPool,Flannel 改net-conf.json中的Network字段 - 删掉旧 CNI 配置残留:
rm -rf /etc/cni/net.d/* && systemctl restart kubelet,再应用新 manifest - 别忽略
iptables清理:iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X,尤其在多次 reset 后
验证 kubelet 客户端证书是否过期或权限异常
节点已加入、kubectl get nodes 能看到但状态为 NotReady,且 kubelet 日志出现 "x509: certificate has expired or is not yet valid" 或 "Forbidden: User \"system:node:xxx\" cannot get nodes",说明证书链断了。
- 检查证书有效期:
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates - 证书过期需轮换:在 Master 上运行
kubeadm certs renew kubelet-client,再把新证书和 key 拷到 Node 的对应路径并重启kubelet - 权限问题多见于升级后:比如从 1.16 升到 1.19,但
RoleBinding还只绑了kubelet-config-1.16,需手动创建对应版本的ConfigMap和RoleBinding - 注意:
kubelet启动时会自动生成客户端证书,但如果/var/lib/kubelet/pki/下已有过期证书且权限为 root:root,它可能拒绝覆盖
真正卡住人的地方往往不在第一步,而在你 fix 了 A 问题后,B 问题才浮出水面——比如修完 cgroup 驱动,发现 token 过期;token 更新了,又撞上 Calico 网段冲突;网段调好了,证书却过期了。每个环节都得单独验证,不能假设“前面没问题,肯定是后面”。










