k3s集群Metrics server无法采集工作节点指标问题求助
问题定位与解决方案
从日志报错connect: no route to host可直接定位核心根因:集群网络连通性异常,主节点/metrics-server无法访问工作节点192.168.1.106的10250端口(kubelet默认指标端口),进而导致kubectl top命令拿不到工作节点指标、仪表盘访问metrics服务超时。
定位步骤
- 验证物理层连通性:在主节点执行
ping 192.168.1.106,如果ping不通先排查物理网络、IP冲突、路由器ACL配置问题 - 验证端口连通性:在主节点执行
nc -zv 192.168.1.106 10250,如果不通优先排查工作节点防火墙配置 - 验证容器网络连通性:在主节点执行
kubectl run -it --rm busybox --image=busybox:1.28 -- ping 10.42.1.11(metrics-server的PodIP),如果不通说明flannel(k3s默认CNI)跨节点网络故障
解决方案
场景1:工作节点防火墙拦截请求
树莓派默认的iptables/ufw会拦截k3s所需端口,在工作节点执行以下命令放通端口:
# 放通kubelet指标端口、flannel VXLAN通信端口 iptables -I INPUT -p tcp --dport 10250 -j ACCEPT iptables -I INPUT -p udp --dport 8472 -j ACCEPT # 若开启ufw则执行以下命令 ufw allow 10250/tcp ufw allow 8472/udp
操作完成后在主节点重新测试10250端口连通性,确认正常后等待2分钟再执行kubectl top nodes验证指标返回。
场景2:主机名解析异常
metrics-server默认通过主机名访问kubelet,若主节点无法解析k3s-node-01的IP也会触发报错,在主节点/etc/hosts添加映射即可:
192.168.1.106 k3s-node-01
同时在工作节点/etc/hosts添加主节点映射:
192.168.1.113 k3s-master
场景3:flannel网卡绑定错误
如果跨节点Pod网络不通,说明flannel绑定了错误的网卡,重新部署k3s agent并指定物理网卡IP即可:
# 卸载原有agent /usr/local/bin/k3s-agent-uninstall.sh # 重新部署agent,指定node-ip参数 curl -sfL https://get.k3s.io | \ K3S_URL=https://192.168.1.113:6443 \ K3S_TOKEN=<master-token> \ INSTALL_K3S_EXEC='agent --node-ip 192.168.1.106' sh -
场景4:metrics-server配置参数缺失
若以上配置都正常,修改k3s内置的metrics-server配置,添加跳过TLS校验、优先用IP访问kubelet的参数:
编辑主节点上的/var/lib/rancher/k3s/server/manifests/metrics-server.yaml,在容器的args字段下添加两行:
- --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP
保存后k3s会自动重新部署metrics-server,等待5分钟后验证仪表盘和top命令即可恢复正常。
内容的提问来源于stack exchange,提问作者Assaf Sapir
相关产品推荐
相关产品推荐

