更新Kubernetes清单后kubelet无法启动与Pod创建失败问题求助
故障排查步骤
- 优先排查kube-apiserver可用性:10.233.0.1是kube-apiserver的ClusterIP,首次连接失败二次成功大概率是kube-proxy转发规则异常,或是apiserver连接队列满:
- 执行
kubectl get pods -n kube-system -l component=kube-apiserver,检查所有master节点的apiserver pod是否有重启、崩溃回退的情况 - 登录master节点执行
journalctl -u kube-apiserver -f --since 1h,排查是否有证书验证失败、端口占用、连接拒绝类报错 - 执行
kubectl get pods -n kube-system -l k8s-app=kube-proxy检查kube-proxy状态,若集群用IPVS模式,执行ipvsadm -Ln核对10.233.0.1:443对应的真实master节点后端IP是否正确,是否存在残留无效规则
- 执行
- 排查kubelet重启根因:仅看systemctl状态无法定位问题,需拉取完整日志:
- 执行
journalctl -u kubelet -f --since 30m,重点查找启动失败的exit code对应报错,比如配置格式错误、证书验证失败、无法连接apiserver、CNI插件异常类信息 - 回滚你之前手动修改的
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf配置,手动新增的参数很可能和kubespray生成的默认配置冲突
- 执行
- 排查CNI插件异常:日志中nsenter找不到网络命名空间的报错,通常是Pod已被销毁但CNI仍在尝试查询状态,或是CNI插件版本与K8s版本不兼容:
- 执行
kubectl get pods -n kube-system检查你集群所用的CNI插件(Calico/Flannel等)的Pod是否正常运行 - 核对
/etc/cni/net.d/下的配置是否正确,是否存在多套CNI配置冲突的情况
- 执行
修复方案
- 处理controller、scheduler不健康问题:你使用的K8s v1.18.8版本中,
--port=0配置是关闭scheduler、controller的10251/10252非安全端口,kubectl get cs默认走非安全端口查询才会返回异常,组件本身实际是正常运行的。先取消两个manifest文件中--port=0的注释,恢复kubespray默认配置即可,不需要额外修改 - 处理kubelet重启循环问题:
- 回滚所有你手动修改的配置:包括10-kubeadm.conf新增的启动参数、scheduler和controller的manifest修改,完成后执行
systemctl daemon-reload重载配置 - 执行
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates检查kubelet证书有效期,如果过期按照你之前的证书更新步骤处理,注意证书和密钥需转换为Base64编码后再写入/etc/kubernetes/kubelet.conf - 确认swap分区已完全关闭,执行
swapoff -a,同时注释/etc/fstab中的swap挂载项,避免开机自动挂载
- 回滚所有你手动修改的配置:包括10-kubeadm.conf新增的启动参数、scheduler和controller的manifest修改,完成后执行
- 处理10.233.0.1首次连接失败问题:
- 清理无效转发规则:如果用IPVS模式,执行
ipvsadm -C后重启所有kube-proxy Pod;如果用iptables模式,执行iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X后重启kube-proxy Pod - 若apiserver并发请求较高,可修改kube-apiserver manifest,新增
--max-requests-inflight=3000、--max-mutating-requests-inflight=1000参数,缓解高并发下的连接拒绝问题
- 清理无效转发规则:如果用IPVS模式,执行
- 处理CNI报错:如果使用Calico插件,执行
kubectl rollout restart daemonset/calico-node -n kube-system重启所有Calico节点Pod,若问题仍存在,核对CNI插件版本与K8s v1.18.8的兼容性,必要时升级到匹配的插件版本
注意:你的集群是kubespray部署的,后续修改配置建议通过kubespray playbook执行,不要直接手动修改节点配置文件,避免集群节点配置不一致。
内容的提问来源于stack exchange,提问作者Sachith Muhandiram
相关产品推荐
相关产品推荐

