一、前言
- 随着 Kubernetes 集群规模不断增长,对于服务延迟的要求越来越严苛,有时候观察到一些运行在 Kubernetes 平台上的服务正在面临偶发的延迟问题,这些断断续续的问题并不是由于应用本身的性能问题导致的。
- 慢慢发现,Kubernetes 集群上的应用产生的延迟问题看上去似乎是随机的,对于某些网络连接的建立可能会超过 100ms,从而使得下游的服务产生超时或者重试,这些服务本身处理业务的响应时间都能够很好地保持在 100ms 以内,而建立连接就需要花费 100ms 以上是不可忍受的。另外,对于一些应该执行非常快的 SQL 查询(毫秒量级),从应用的角度看居然超过 100ms,但是在 MySQL 数据库的角度看又是完全正常的,并没有发现可能出现的慢查询问题。
- 通过排查,可以将问题缩小到与 Kubernetes 节点建立连接的这个环节,包括集群内部的请求或者是涉及到外部的资源和外部的访问者的请求。最简单的重现这个问题的方法是:在任意的内部节点使用 Vegeta 对一个以 NodePort 暴露的服务发起 HTTP 压测,就能观察到不时会产生一些高延迟请求。那么,如何追踪定位到这个问题呢?
二、问题分析
- 试图用一个简单的例子来复现问题,那么就希望能够把问题的范围缩小,并移除不必要的复杂度。起初,数据在 Vegeta 和 Kubernetes Pods 之间的流转的过程中涉及了太多的组件,很难确定这是不是一个更深层次的网络问题,因此需要来做一个减法:
文章来源地址https://www.toymoban.com/news/detail-757641.html
文章来源:https://www.toymoban.com/news/detail-757641.html
到了这里,关于云原生之深入解析如何调试Kubernetes集群中的网络延迟问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!