Ubuntu 22.04单节点Kubernetes集群初始化失败,kubelet无法启动求助
排查Ubuntu 22.04上kubelet启动失败(退出码217/USER)的问题
问题场景
- 运行环境:VMware Workstation 17 Player + Ubuntu 22.04.1 LTS(64位)
- 操作目标:搭建单节点Kubernetes集群
- 核心错误:执行
sudo kubeadm init时卡在等待控制平面启动阶段,最终报错error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster;连接http://localhost:10248/healthz被拒绝;kubelet.service处于failed状态,Main PID退出码为217/USER - 已尝试的无效操作:
iptables -F清空规则swapoff -a关闭swap并确认无活跃swap单元kubeadm reset后重新初始化- 将Docker Cgroup Driver设置为
systemd
针对性排查步骤
退出码217/USER的核心原因是kubelet尝试以不存在的用户运行,或用户权限不足,按以下步骤排查:
1. 检查kubelet运行用户是否存在
首先确认kubelet配置中指定的运行用户:
grep -r "User=" /etc/systemd/system/kubelet.service.d/ /lib/systemd/system/kubelet.service
正常情况下kubelet会使用kubelet系统用户,检查该用户是否存在:
id kubelet
若用户不存在,手动创建:
sudo useradd -r -s /sbin/nologin kubelet
2. 修复kubelet数据目录权限
kubelet的数据目录默认是/var/lib/kubelet,确保目录属主为kubelet:kubelet:
ls -ld /var/lib/kubelet
如果权限不符,执行修正:
sudo chown -R kubelet:kubelet /var/lib/kubelet
3. 查看kubelet启动日志定位具体错误
通过journalctl获取kubelet启动的详细日志,找用户相关的报错:
sudo journalctl -u kubelet -f
重点关注类似User does not exist、Permission denied这类关键词。
4. 验证kubelet二进制文件权限
确保kubelet二进制文件有可执行权限:
ls -l $(which kubelet)
正常权限应为-rwxr-xr-x,若不符合则修正:
sudo chmod 755 $(which kubelet)
5. 检查SELinux状态(若启用)
Ubuntu默认禁用SELinux,若手动启用可能影响kubelet运行,检查状态:
sudo sestatus
若状态为enabled,临时切换到permissive模式测试:
sudo setenforce 0
然后重启kubelet:
sudo systemctl daemon-reload && sudo systemctl restart kubelet
6. 确认节点hostname解析正常
kubelet需要正确解析本地hostname,验证解析是否正常:
ping $(hostname) -c 2
若解析失败,在/etc/hosts中添加对应条目:
echo "$(hostname -I) $(hostname)" | sudo tee -a /etc/hosts
验证与重启
完成上述排查后,重启kubelet服务:
sudo systemctl daemon-reload && sudo systemctl restart kubelet
等待1分钟后检查状态:
sudo systemctl status kubelet
若kubelet正常运行,再重新执行sudo kubeadm init完成集群初始化。
内容的提问来源于stack exchange,提问作者user20862624
相关产品推荐
相关产品推荐

