Kubernetes 是什么导致库伯内特斯的豆荚变慢的?

Kubernetes 是什么导致库伯内特斯的豆荚变慢的?,kubernetes,Kubernetes,我集群上的某些pod在几乎所有方面都非常慢。启动时间、网络、i/o 我已经将这些容器中的应用程序代码最小化,而且似乎没有任何效果,这些容器基本上是运行一个简单的webapi并带有运行状况检查端点的最小容器 我想知道是否有人能帮我找出问题所在或调试这个 当我说各方面都慢时,我指的是几件事 启动非常慢。实际上,我必须将准备就绪探测器的初始延迟更改为近5分钟 在容器内部,运行任何命令的速度都很慢。运行apt get update大约需要5分钟,即使容器已经运行了几个小时 任何到RDS数据库的连接都将在

我集群上的某些pod在几乎所有方面都非常慢。启动时间、网络、i/o

我已经将这些容器中的应用程序代码最小化,而且似乎没有任何效果,这些容器基本上是运行一个简单的webapi并带有运行状况检查端点的最小容器

我想知道是否有人能帮我找出问题所在或调试这个

当我说各方面都慢时,我指的是几件事

  • 启动非常慢。实际上,我必须将准备就绪探测器的初始延迟更改为近5分钟

  • 在容器内部,运行任何命令的速度都很慢。运行
    apt get update
    大约需要5分钟,即使容器已经运行了几个小时

  • 任何到RDS数据库的连接都将在pod运行的前10分钟内超时,之后它会命中或未命中,有时是正常速度,有时我们会再次开始连接超时(主要是在pod有一段时间没有使用/请求的情况下)

  • 在具有相同基本映像的几乎相同的pod上,容器将在不到几秒钟内启动,运行
    apt get update
    可能需要3秒钟。我一辈子都看不出豆荚之间有什么不同,导致一些豆荚是“好豆荚”,而另一些豆荚是“坏豆荚”

    在本地运行这些映像中的任何一个都将很快启动(不到一秒钟左右)

    我的环境 集群(AWS)

    • 1.大型主机
    • 3.c4.xlarge节点
    • 每个节点约10-20个吊舱
    • 使用“标准”设置配置KOP(我没有做任何棘手的事情)
    我检查/尝试过的东西

    • 豆荚太多

      我的第一个想法是,也许我跑的豆荚太多了。我已经为这个(c4.xlarge)启动了全新的节点,并且这个pod是集群中唯一运行的pod,这个问题仍然存在

    • 节点资源

      检查每一个节点级别的指标,我无法发现任何异常情况(在几个全新的高性能节点上也进行了尝试)

    • 部署/吊舱指标

      我很高兴向大家展示任何人能想到的指标,没有什么看起来不正常。我让普罗米修斯跑了起来,并仔细研究了我想检查的每一项指标。我看不出“好”的跑动舱和“坏”的跑动舱有什么区别

    • 集群本身

      我实际上有两个集群,都配置了KOP,这在两个集群上都可以看到(尽管不总是相同的应用程序,这很奇怪)


    非常感谢这里的任何帮助

    这可能是由于资源限制的配置过于受限,或者由于缺少配置资源请求,使得POD可以在没有运行其工作负载所需需求的节点上进行配置


    您可以通过为部署到Kubernetes的每个应用程序定义适当的配置来解决这个问题。简而言之,您可以控制共享、字节内存和Linux的限制和请求

    您是否对特定的pod/图像或任何图像有此问题?是所有节点都有,还是只有一个特定的节点有?@white11发生在所有节点上。我的案例中的图像始终基于microsoft/dotnet。我已经试过了他们的debian:stretch和debian:jessie图像,并且都遇到了问题。我最近从ubuntu的基础上构建了自己的dotnet映像,同样的问题也发生了。我不确定这是否是dotnet的核心问题。(我只在dotnet图片上看到过,但我运行的90%都是dotnet图片)我会尝试对问题进行分类。尝试使用最简单的设置运行一个非常简单的映像,例如nginx:latest,并检查是否仍然存在问题。由于所有节点都存在您的速度慢问题,我认为这可能是外部问题(可能与负载平衡器有关)或您正在使用的映像。您有什么消息吗?@whites11是的,我犯了一个愚蠢的错误,花了很长时间才弄清楚。我没有注意到或意识到kubernetes能够将cpu节流到一个pod,出于某种原因,我有一种印象,它就像内存资源,如果它使用了太多的周期,它就会杀死pod。我以前看过CPU使用率图表,并将其限制在我认为合理的范围内。为了在合理的时间内启动,豆荚显然需要多一点果汁。一旦启动结束,尽管它们能够在有限的CPU下正常运行..我应该早就想到了:(