dbaplus社群 07月09日 10:06
pod丢包了,你会怎么查?
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了在Kubernetes环境下,作者排查CAT红盘,并最终定位到容器丢包问题的全过程。通过细致的故障现象分析、共性查找、实时观察、抓包分析等步骤,作者成功找到了问题根源——lldpd协议。文章不仅提供了问题解决的详细步骤,还分享了排查过程中遇到的挑战和经验,为读者提供了宝贵的实践参考。

🧐 **故障现象与影响面分析**: 作者首先关注到CAT红盘,并通过容器速查大盘发现Pod丢包。通过确定受影响的Pod、Node和集群范围,以及业务是否受到影响,为后续排查奠定了基础。初步分析发现,丢包集中在特定Node上,但业务似乎并未受到明显影响。

🔍 **寻找共性与实时观察**: 为了深入分析,作者尝试摘掉业务流量和关闭就绪/存活探针,但丢包现象依然存在。通过在Pod内执行命令,作者观察到丢包频率为每30秒增加一次。同时,作者还利用ifconfig、netstat等命令,进一步确认了丢包现象。

💡 **网络抓包与问题定位**: 作者使用tcpdump在宿主机上进行抓包分析,并结合之前观察到的丢包规律,最终将问题锁定在lldpd协议上。通过针对性的抓包分析,确认了丢包时间与lldpd探测吻合,从而找到了问题的根源。

✅ **解决方案与经验总结**: 针对发现的问题,作者提出了关闭lldpd的解决方案。文章还总结了排查过程中遇到的问题,例如dropwatch、systemtap等工具的限制,以及centos7和5.4内核环境下的调试困难。最后,作者还提出了后续的改进建议,例如Pod丢包监控和lldpd状态监控等。

ClayWangzhi 2025-07-09 07:15 广东

CAT突然发生诡异红盘,让我不知所措……


起因

CAT 发生红盘, 排查问题 查看容器速查大盘,发现某个 Pod 发生丢包。


故障现象

某个 Pod 发生丢包



根因定位

1、确定影响面

1)哪些 Pod 发生丢包, 单个 or 多个 Pod/Node/Cluster , 分布规律: 发现丢包的 Pod ,集中在某个 Node 上面

2)丢包的 Pod 上面业务是否受到影响:该 Node 上的 Pod 丢包已经持续了很久,没有业务反馈受到影响,本次红盘与 Pod 丢包无关

2、找共性

    摘掉业务流量观察: 丢包未减少

    关掉就绪/存活探针观察:丢包未减少

    丢包不随业务访问流量变化

3、实时观察,丢包频率

Pod 内执行,发现丢包每30s 加1

    watch -n 1 cat /sys/class/net/eth0/statistics/rx_dropped
    # 相同的观察丢包的命令
    ifconfig eth0 | grep drop
    cat /proc/net/dev
    netstat -i

    本环境 CNI 插件为 calico, 找到 Pod eth0 对应宿主机上的 veth pair

    方法一:

      # pod 内执行,查询 eth0 的对端 index
      cat /sys/class/net/eth0/iflink

        # 宿主机执行,根据 index 号查询 veth pair
         ip a | grep ${index}

        方法二:

          # 宿主机执行
          route -n | grep ${pod_ip}

          宿主机,执行相同的丢包查询命令, 网卡名称换一下, 发现 califxxx 没有发生丢包

          4、抓包

            # 宿主机 tcpdump 抓包, 然后 wireshark 分析
            tcpdump -i  calif33e3f0e409 -nn -w /tmp/container.pcap

            根据之前发现的规律 "Pod 内丢包每30s 加1" 进行排查,发现 lldp 探测很可疑

            针对 lldpd 协议继续抓包, 观察 丢包时间是否吻合, 确认吻合,找到问题

              tcpdump -i calif33e3f0e409 ether proto 0x88cc -vv

              5、补充印证

              排查问题常规命令, dmesg -T 、vim /var/log/messages、history

              history 命令排查到,有安装过 lldpd 并启动了,后续巡检发现,仅故障主机安装过 lldpd


              解决方案

              容器环境用不到 lldpd, 关闭即可

                systemctl stop lldpd


                后续TODO

                  加 Pod 丢包监控

                  可选: lldpd 状态监控, 新增巡检项, 堡垒机 拦击 安装 lldpd 的命令等。


                其他碎碎念

                1、 其实 关不关 lldpd 并不影响应用,lldp 是一个二层的协议。

                2、使用 dropwatch 没分析出来, rpm 安装的内核(5.4.xx),addr2line 和 /proc/kallsyms 解析不到函数

                3、还是 centos7 和 5.4 的内核, systemtap 依赖的 kernel-debuginfo 没有下载包,无法进一步排查

                4、一样, bpftrace 也是, yum 安装不了, 安装很繁琐,最后 docker 起了个 ubuntu privileged 封装了个,使用起来也有些问题, dog:下次还是用 Ubuntu 22.04.4 LTS 吧

                5、很怪异, tcpdump 在 Pod 里面抓包时, drop 不再增加


                作者丨ClayWangzhi

                来源丨公众号:SRE运维进阶之路(ID:sre-k8s)

                dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


                阅读原文

                跳转微信打开

                Fish AI Reader

                Fish AI Reader

                AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

                FishAI

                FishAI

                鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

                联系邮箱 441953276@qq.com

                相关标签

                CAT红盘 容器丢包 Kubernetes lldpd 网络排查
                相关文章