基础安装k3s后执行kubectl get node无节点资源的原因咨询
k3s安装后执行
get node返回No resources found的可能原因及排查方案 可能原因
- 安装时误加
--disable-agent参数:k3s server节点安装时如果指定该参数,仅会部署控制平面核心组件,不会启动当前节点的kubelet代理服务,也就没有节点资源会注册到集群。该场景下控制平面的静态Pod运行不受影响,因此cluster-info查询结果正常,属于该问题最高发的诱因。 - CentOS 7系统环境不兼容:
- 防火墙或SELinux拦截:firewalld默认规则会拦截kubelet与apiserver 6443端口的通信,SELinux强制模式也会阻断k3s组件的权限调用,最终导致kubelet无法完成节点注册流程。
- cgroup配置不匹配:CentOS 7默认的cgroup版本、驱动配置与k3s默认适配的cgroup驱动不兼容,会直接导致kubelet启动失败。
- kubelet启动异常:节点磁盘空间不足、kubelet默认10250端口被其他进程占用、节点主机名不符合DNS规范(包含下划线、大写字母、特殊符号等)都会导致kubelet启动失败,无法向apiserver注册节点。
- 注册证书异常:kubelet用于向apiserver认证的注册证书生成失败、权限配置错误,会导致注册请求被apiserver直接拒绝,节点无法加入集群。
排查操作步骤
- 检查k3s启动参数:执行
cat /etc/systemd/system/k3s.service | grep ExecStart查看启动命令中是否存在--disable-agent参数,如有则删除该参数后执行systemctl daemon-reload && systemctl restart k3s重启服务即可。 - 查看k3s运行日志定位错误:执行
journalctl -u k3s.service -f --since 1h过滤近1小时的服务运行日志,搜索kubelet、register相关的报错信息即可定位具体故障点。 - 校验系统基础配置:
- 执行
systemctl status firewalld确认防火墙状态,测试环境可直接执行systemctl stop firewalld && systemctl disable firewalld永久关闭防火墙。 - 执行
getenforce确认SELinux状态,返回Enforcing时可执行setenforce 0临时关闭,修改/etc/selinux/config文件中SELINUX=disabled实现永久关闭。
- 执行
- 校验主机名合法性:执行
hostname确认主机名仅包含小写字母、数字、横杠和点,不符合要求可执行hostnamectl set-hostname <合法主机名>修改后重启k3s服务。
内容的提问来源于stack exchange,提问作者RhythmicDevil
相关产品推荐
相关产品推荐

