kubeadm init执行失败求助:kubelet异常及10250端口占用问题
kubeadm init执行失败求助:kubelet异常及10250端口占用问题
看起来你在初始化Kubernetes集群的过程中碰到了一连串的小麻烦,别着急,咱们一步步拆解排查来解决。
先处理当前最紧急的「10250端口被占用」问题
首先得搞清楚到底是哪个进程占了这个kubelet的默认端口,执行下面的命令就能查到:
- 如果你装了
lsof工具:sudo lsof -i :10250 - 如果没装
lsof,用系统自带的ss命令也行:
命令输出里会显示占用端口的进程PID和名称,接下来分情况处理:sudo ss -tulpn | grep 10250- 如果是旧的kubelet进程:说明之前的kubelet没有彻底停止,先停掉服务再杀残留进程:
sudo systemctl stop kubelet sudo kill -9 <查到的进程PID> - 如果是其他无关进程:根据进程名称判断是否可以停止,优先停掉占用进程再重试kubeadm init(不建议修改kubelet默认端口,避免后续兼容性问题)。
- 如果是旧的kubelet进程:说明之前的kubelet没有彻底停止,先停掉服务再杀残留进程:
再回头解决之前的「kubelet无法启动/健康检查失败」问题
结合你之前的日志,有两个关键问题要彻底处理:
- Swap彻底关闭:你执行的
sudo swapoff -a只是临时关闭,重启机器后swap会自动恢复。要彻底关闭,需要编辑/etc/fstab文件,注释掉所有包含swap的行,然后再执行一次sudo swapoff -a。Kubernetes生产环境要求必须关闭swap(除非你专门测试NodeSwap特性门控,新手不建议这么做)。 - CRI沙箱镜像版本不一致:日志里提示你的容器运行时用的是
registry.k8s.io/pause:3.6,但kubeadm推荐用3.9版本。这个警告看似小事,但可能导致kubelet和容器运行时不兼容,手动拉取正确镜像并修改Docker配置:
在# 拉取指定版本的pause镜像 sudo docker pull registry.k8s.io/pause:3.9 # 编辑Docker守护进程配置 sudo nano /etc/docker/daemon.jsondaemon.json里添加或修改沙箱镜像配置:
保存后重启Docker和kubelet:{ "sandbox-image": "registry.k8s.io/pause:3.9" }sudo systemctl restart docker sudo systemctl restart kubelet
通用排查技巧
如果后续还是碰到kubelet启动问题,一定要看kubelet的日志找具体原因:
sudo journalctl -u kubelet -f
这条命令会实时输出kubelet的日志,里面会明确告诉你是配置错误、依赖缺失还是其他问题。
另外,如果你之前多次执行kubeadm init失败,建议先清理残留的K8s资源再重新初始化:
sudo kubeadm reset sudo rm -rf ~/.kube/config /etc/kubernetes/pki /var/lib/etcd
备注:内容来源于stack exchange,提问作者sina kzm
相关产品推荐
相关产品推荐

