您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

可观测性实战:快速定位 K8s 应用故障

时间:2023-02-14 16:31:43  来源:51CTO  作者:树欲静而风不止

故障发生在2023春节前两天,DeepFlow 团队内部访问工单系统出现问题,影响了所有北京区的同事,这篇文章将详细记录如何利用 DeepFlow 定位到对这次问题根因(网关 MSS 误变更导致报文大于 MTU,大数据报文被丢弃)。

01|背景介绍

工单系统是 DeepFlow 团队自主研发的一个跟踪工单的内部工具,部署在阿里公有云的容器服务(ACK)中,工单系统通过 Ingress 的方式对外提供服务,办公区与阿里云通过 VPN 连接,因此办公区可以直接使用域名访问工单系统。在《K8s 服务异常排障过程全解密》[1]文中对 K8s 访问方式做过总结,工单系统是比较典型的​​方式三​​的访问形式

 

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

集群外客户端通过 Ingress 访问集群内服务

  

下图是通过 DeepFlow 自动绘制的访问拓扑图,可以看出北京和广州办公区都是通过 Ingress 的形式来访问工单的入口服务 (ticket_web)。工单系统部署在基础服务的容器集群上,此容器集群所有的 Node 上都已经部署了 deepflow-agent,因此可以自动采集所有 POD 及 Node 的网络/系统/应用相关的数据,其中就包括阿里云 Nginx-ingress-controller 服务对应的 POD 以及应用的 POD

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

工单系统访问拓扑

02|排障过程

下午 3:00 左右,陆续收到同事反馈,工单系统加载不出来,首先和工单系统研发明确,并未做过任何变更

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

故障现场

  

依据《K8s 服务异常排障过程全解密》[2]总结的思路

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

K8s 服务异常排障思路

 

查看了对应的 ​​Node/POD​​ 负载、状态等都正常;登录到 DeepFlow 平台,调出了工单系统的访问拓扑(拓扑上标红部分表明有异常),从访问拓扑可知​​后端服务​​黄金指标也都一切正常;又通过图可看出来广州办公室对工单系统的访问也并没有异常(也同步与广州同事确认,访问一切正常),可推测 ​DNS/SVC​​ 也应该都正常;进一步结合拓扑图,可看出异常仅出现在北京办公室与 nginx-ingress-controller 之间

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

访问拓扑

  

继续分析标红的路径,查看对应的流日志,因为云下未部署采集器,因此仅支持查看的是 nginx-ingress-controller POD 以及 Node 的数据,发现了几个问题:

  

  • 服务端异常都是因为传输-连接超时导致的
  • 服务端异常时,服务端 (nginx-ingress-controller) 回复的数据包,都是大包
  • 服务端异常时,服务端 (nginx-ingress-controller) 都未收到任何客户端发送的数据

   

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

流日志

   

结合以上几点发现,怀疑方向转移到 MSS/MTU 上,立马咨询了 IT 同事,是不是变动过网关的 MSS/MTU 值,IT 同事否认了

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

聊天记录-01

  

既然云下部分未变动过,转而怀疑是不是 nginx-ingress-controller 动过 MSS/MTU,通过​​时序图​​查看 MSS 是否有变化,通过故障前后对比可知:

  

  • 客户端在故障前后发送的 MSS 确实发生过变动,从 1280 变为了 1380
  • 服务端 (nginx-ingress-controller) MSS 值一直未变动过

   

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

时序图

  

通过数据可明确,云下一定变动过 MSS 值,拿着数据截图又去找 IT 同事,最后 IT 同事一顿找,明确改了 MSS 值,将 MSS 值恢复后,工单系统恢复正常

  

可观测性实战:快速定位 K8s 应用故障-开源基础软件社区

聊天记录-02

03|问题总结

问:MSS 值变动了,为什么影响了工单系统

  • 因为云下的 MTU 值设置的是 1420,如果 MSS 值为 1380 + 报文头则会大于 MTU 值,因此大数据报文无法通过云下的网关,这就导致了 nginx-ingress-controller 收不到任何客户端的回应(客户端也未收到服务端的包)出现​​传输-连接超时​​的情况

    

问:MSS 值变动了,为什么其他内部系统未受到影响

  • 工单描述中包含了大量的图片和文件,因此存在传输大数据的情况,而其他系统大部分都是文字传输,所以未受到明显影响
  • 其他如 gitlab 存在图片和大文字传输的服务,并未使用 Ingress 的方式对外提供访问形式,而是利用阿里云 Terway 提供的内网直接访问 Headless 服务后端 POD 的方式,在协商 MSS 值时,后端 POD 的值为 1360(nginx-ingress-controller 的值为 1460),因此最终协商的取 1360 + 报文头则小于 MTU 值,所以也未受到明显影响

04|什么是 DeepFlow

DeepFlow[3] 是一款开源的高度自动化的可观测性平台,是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术,创新的实现了 AutoTracing、AutoMetrics、AutoTagging、SmartEncoding 等核心机制,帮助开发者提升埋点插码的自动化水平,降低可观测性平台的运维复杂度。利用 DeepFlow 的可编程能力和开放接口,开发者可以快速将其融入到自己的可观测性技术栈中。

Github 地址:https://github.com/deepflowys/deepflow

访问 DeepFlow Demo[4],体验高度自动化的可观测性新时代。

参考资料

 

 

[1] 《K8s 服务异常排障过程全解密》: ​​https://deepflow.yunshan.net/blog/020-k8s-service-exception-troubleshooting/​

 

[2] 《K8s 服务异常排障过程全解密》: ​​https://deepflow.yunshan.net/blog/020-k8s-service-exception-troubleshooting/​

 

[3] DeepFlow: ​​https://github.com/deepflowys/deepflow​

 

[4] DeepFlow Demo: ​​https://deepflow.yunshan.net/docs/zh/install/overview/​



Tags:K8s   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
我们一起聊聊K8s定时备份MySQL并发送到指定邮箱
边车容器(sidecar):边车容器就是与主容器一起在一个pod中运行的容器,为业务容器赋能,共享一个网络空间,所以可以用127.0.0.1:3306连接主容器的数据库。一、背景:一开始的初衷是,想...【详细内容】
2023-12-29  Search: K8s  点击:(73)  评论:(0)  加入收藏
升级就崩溃,K8s需要LTS版本!
Kubernetes集群不是在升级,就是在升级的路上。而对于维护K8s集群的团队来说,最担心的莫过于,系统因为K8s升级而引发了服务器大规模崩溃。想象一下,K8s升级发生在某个晚上,突然某...【详细内容】
2023-12-05  Search: K8s  点击:(218)  评论:(0)  加入收藏
k8s部署维护问题汇总
集群问题系统Error: unknown flag: --etcd-quorum-read删除service 里面的相应字段start request repeated too quickly for kube-apiserver.service查看是不是有之前的进程...【详细内容】
2023-11-30  Search: K8s  点击:(196)  评论:(0)  加入收藏
五分钟 k8s 实战-滚动更新与优雅停机
当我们在生产环境发布应用时,必须要考虑到当前系统还有用户正在使用的情况,所以尽量需要做到不停机发版。所以在发布过程中理论上之前的 v1 版本依然存在,必须得等待 v2 版本启...【详细内容】
2023-11-30  Search: K8s  点击:(239)  评论:(0)  加入收藏
五分钟 K8s 实战-应用探针
今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了...【详细内容】
2023-11-27  Search: K8s  点击:(182)  评论:(0)  加入收藏
Kubernetes创始人发声!K8s在被反噬!
Kubernetes 变得太复杂了,它需要学会克制,否则就会停止创新,直至丢失大本营。Kubernetes 联合创始人Tim Hockin 罕见发声。在今年的 KubeCon 上,他建议,Kubernetes 核心维护者应...【详细内容】
2023-11-27  Search: K8s  点击:(156)  评论:(0)  加入收藏
K8s-服务网格实战-配置 Mesh(灰度发布)
在上一篇 k8s-服务网格实战-入门Istio中分享了如何安装部署 Istio,同时可以利用 Istio 实现 gRPC 的负载均衡。今天我们更进一步,深入了解使用 Istio 的功能。从 Istio 的流量...【详细内容】
2023-11-08  Search: K8s  点击:(339)  评论:(0)  加入收藏
Wasm的野心:取代K8s,不如结合K8s
作者丨B. Cameron Gain编译丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)虽然WebAssembly (Wasm)已被证明在浏览器和某些有针对性的服务器部署中可以很好地工作,但允许开发人员“...【详细内容】
2023-11-07  Search: K8s  点击:(375)  评论:(0)  加入收藏
在本地 K8s 中轻松部署自签 TLS 证书
随着互联网的飞速发展,安全性日益成为我们关注的焦点。HTTPS 已从一项奢侈的技术逐渐成为现代网络交互的标准。它不仅仅是保护信息的重要工具,更是实现信任和品质的象征...【详细内容】
2023-11-03  Search: K8s  点击:(254)  评论:(0)  加入收藏
K8s-服务网格实战-入门Istio
背景终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配...【详细内容】
2023-11-01  Search: K8s  点击:(231)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(54)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(68)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(86)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条