You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kubeadm搭建的K8s集群无法获取工作节点Pod日志,求排查方案

调试无法获取Kubernetes工作节点Pod日志的问题

从你给出的信息来看,master节点上的Pod日志能正常获取,但工作节点的Pod日志无法获取,报错是无法连接到工作节点的192.168.18.111:10250——这个端口是kubelet的API端口,kubectl获取Pod日志的流程是:kubectl -> kube-apiserver -> 目标节点kubelet -> 容器日志,所以问题核心集中在master与工作节点kubelet的通信链路上,下面是一步步的调试思路:

1. 先验证Master到工作节点的10250端口连通性

这是最常见的触发原因,先从网络层面排查:

  • 在Master节点执行端口连通性测试:

    nc -zv 192.168.18.111 10250
    # 或者用telnet
    telnet 192.168.18.111 10250
    

    如果显示连接失败,先检查工作节点的防火墙/安全组:

    • 对于firewalld环境,开放10250端口:
      firewall-cmd --add-port=10250/tcp --permanent
      firewall-cmd --reload
      
    • 对于iptables环境,添加允许规则:
      iptables -A INPUT -p tcp --dport 10250 -j ACCEPT
      
    • 云环境下还要检查安全组规则,确保允许Master节点的IP访问工作节点的10250端口。
  • 确认工作节点的kubelet是否在监听10250端口:

    ss -tulpn | grep 10250
    

    同时检查kubelet服务状态:

    systemctl status kubelet
    

    如果服务未运行,重启kubelet:systemctl restart kubelet,并实时查看启动日志排查异常:journalctl -u kubelet -f

2. 检查工作节点kubelet的配置

如果kubelet仅监听本地回环地址,也会导致Master无法访问:

  • 查看kubelet主配置文件(通常路径/var/lib/kubelet/config.yaml),确认address字段设置为0.0.0.0或者工作节点的实际IP(192.168.18.111),而非127.0.0.1。
  • 检查kubelet的认证配置:查看/etc/kubernetes/kubelet.conf中的CA证书路径是否正确,同时确认kubelet配置里的authentication.x509.clientCAFile指向了正确的集群CA文件,保证Master的kubeconfig能通过kubelet的身份认证。

3. 验证Flannel网络的跨节点连通性(辅助排查)

虽然Pod已经处于Running状态,但跨节点网络异常可能间接影响kubelet的状态上报:

  • 检查所有Flannel Pod的运行状态:
    kubectl get pods -n kube-system -l app=flannel
    
    确保所有节点上的Flannel Pod都处于Running状态,无频繁重启或启动失败情况。
  • 在Master节点ping工作节点上的Pod IP(比如10.244.2.39),如果ping不通,说明Flannel网络存在问题,需要检查Flannel配置是否与kubeadm初始化时指定的--pod-network-cidr一致,以及节点间的VXLAN端口(默认8472)是否连通。

4. 检查Kube-apiserver的配置

Master的kube-apiserver如果无法正确识别工作节点的可访问IP,也会导致通信失败:

  • 查看kube-apiserver的启动参数,确认是否包含--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname,这个参数会让apiserver优先使用节点的内部IP访问kubelet,避免使用无法连通的地址。
  • 查看kube-apiserver的日志,排查是否有与kubelet通信相关的错误:
    kubectl logs -n kube-system kube-apiserver-k8smaster
    

5. 本地验证工作节点的容器日志

登录到目标工作节点(比如k8s-node2),直接用容器运行时获取日志,确认日志本身无异常:

  • 先找到目标Pod对应的容器ID:
    crictl ps | grep httpd
    
  • 然后获取容器日志:
    crictl logs <容器ID>
    
    如果能正常获取日志,说明问题完全集中在Master到工作节点的kubelet通信链路上,无需排查容器日志本身。

内容的提问来源于stack exchange,提问作者jungler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:41