【问题标题】:Delay between k8s job created and k8s pod pendingk8s 作业创建和 k8s pod 挂起之间的延迟
【发布时间】:2019-04-20 17:21:46
【问题描述】:

我很快将 2000 个短期作业发送到我的 kube 集群,我观察到在创建作业和作业的 pod 开始挂起之间存在几分钟的延迟。有人知道可能是什么瓶颈吗?

etcd 会是瓶颈吗?

【问题讨论】:

  • 您是如何创造这些工作的?这 2000 个中的每一个都是独立创建的,或者它们是从单个作业中多次运行的批次的一部分?
  • 您是否通过描述检查过您的 pod?也许您的节点资源不足
  • 嗨,@DiegoMendes 这 2000 个工作是独立创建的。我写了一个脚本来创建 8 个线程的 2000 个作业。最初的几百个工作都很好,但是延迟越来越长。似乎有某种排队,但我不确定。我想知道是否有一些配置参数可以调整以缓解这个问题......
  • 嗨,@cookiedough 我还没有检查我的 pod,但我很确定资源不是问题,因为与我的工作负载相比,我发送的集群有足够的 cpu 和 ram,但是我会仔细检查...

标签: kubernetes


【解决方案1】:

从 10.000 英尺的角度来看,过程是:

  • 每次安排 pod/作业时,它都会被添加到队列中。

  • 调度程序读取该队列并将 POD 分配给一个节点。

  • 当节点接收到 Pod 的分配时,它通过调用运行时并请求创建来处理创建。

鉴于上述情况,延迟可能是:

  • 调度程序等待节点可用(状态报告)以调度 pod
  • 运行时调度节点中的 pod

ETCD 瓶颈也可能是一个问题,但不太可能,如果是 ETCD,您可能会在创建工作时注意到这一点。

另外,值得一提的是,在V1.14 no more than 100 pods per node can run at same time上,节点对每个节点可以同时运行多少个pod是有限制的,无论节点有多大,在这种情况下,您至少需要 21 个节点才能同时运行,20 个用于请求的 pod 和 1 个额外的节点来处理系统 pod。如果您在云提供商中运行 k8s,则每个提供商的限制可能不同。

不调查很难说问题出在哪里。

总结:

有一个工作队列来保证集群的可靠性(API/scheduler/ETCD)并防止突发调用影响服务的可用性,在pods被调度后,节点运行时会下载镜像并确保它会根据需要在自己的时间运行 POD。

如果问题是节点中同时运行的 Pod 的限制,它可能会变慢,因为调度程序在运行另一个 Pod 之前等待一个节点完成,添加更多节点将改善 de 结果

This link 详细介绍了一些 k8s 调度器性能问题的示例。

This link 详细描述了整个流程。

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2023-02-07
    • 2021-12-30
    • 1970-01-01
    • 2020-10-23
    • 2019-12-20
    • 2022-01-28
    • 1970-01-01
    相关资源
    最近更新 更多