Rootless模式运行k3s服务正常但Pod持续Pending如何解决
问题根因
核心故障是k3s内置containerd的fuse-overlayfs存储快照器初始化失败,日志明确报错系统PATH内找不到mount.fuse3可执行文件。该问题导致k3s agent组件无法正常启动,控制平面节点始终无法完成注册,集群没有可用的节点承载Pod调度,所有Pod因此长期卡在Pending状态。日志里的metrics接口503、控制节点不存在等报错,都是该核心问题引发的连带异常,不是根因。
修复方案
二选一即可,优先选方案1,存储性能更好。
- 方案1:安装缺失依赖,启用fuse-overlayfs(推荐)
- 先停当前运行的rootless k3s服务:
systemctl --user stop k3s-rootless - 安装对应系统的依赖包:
- Debian/Ubuntu系执行:
sudo apt install -y fuse3 fuse-overlayfs - RHEL/CentOS/Rocky/Alma系执行:
sudo dnf install -y fuse3 fuse-overlayfs - Arch系执行:
sudo pacman -S fuse3 fuse-overlayfs
- Debian/Ubuntu系执行:
- 验证依赖安装成功:执行
which mount.fuse3,命令返回可执行文件路径即为正常 - 清理之前初始化失败生成的脏数据:
rm -rf ~/.rancher/k3s/agent/containerd/ - 重启服务:
systemctl --user start k3s-rootless
- 先停当前运行的rootless k3s服务:
- 方案2:切换为native快照器,无需额外依赖(性能略差)
- 停服务:
systemctl --user stop k3s-rootless - 编辑k3s-rootless的systemd unit配置,在ExecStart对应的k3s启动命令末尾加上参数
--snapshotter=native - 重载systemd配置:
systemctl --user daemon-reload - 清理旧的异常containerd数据:
rm -rf ~/.rancher/k3s/agent/containerd/ - 启动服务:
systemctl --user start k3s-rootless
- 停服务:
结果验证
服务启动后等待1-2分钟,执行以下校验:
- 执行
k3s kubectl get nodes,返回的节点状态为Ready即说明节点注册成功 - 执行
k3s kubectl get pods -A,之前处于Pending状态的kube-system系统组件会逐步拉取镜像、进入Running状态
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

