【发布时间】:2021-09-27 15:46:17
【问题描述】:
我们在 Kubernetes 集群中有多个使用 Apache Ignite 的应用程序。 Ignite 创建了各种大小如下的线程池:
Math.max(8, Runtime.getRuntime().availableProcessors())
所以基本上线程池的大小总是至少为 8,但如果系统认为有更多处理器,则可能更多。
我们遇到的问题是,一些 pod 使用 8 大小的池进行旋转,而其他 pod 使用 36 大小,这是节点上的 CPU 数量。
我们使用 Helm 部署所有应用,但我们不为任何 pod 设置任何 CPU 限制。理论上,它们都应该看到相同数量的可用 CPU。
还有什么可能导致同一节点上的 pod 看到有多少可用处理器的不同视图?
更新
我们在所有应用程序中都有一个运行状况端点,它使用与 Ignite 相同的 Runtime#availableProcessors() 方法显示 JVM 报告的 CPU 数量。
我们所有的应用程序,包括 Ignite 认为有 36 个 CPU 的应用程序,在进程启动后都会报告 2 个处理器。
我在该方法的 Java 文档中发现了以下有趣的一行:
此值可能会在虚拟机的特定调用期间发生变化。因此,对可用处理器数量敏感的应用程序应偶尔轮询此属性并适当调整其资源使用情况。
似乎我们处于竞争状态,在应用程序启动的早期,该值报告为 36,但在某些时候下降到 2。根据 Ignite bean 的触发时间,它们会看到 36 或 2。
【问题讨论】:
-
您有任何 HPA
$ kubectl get hpa --all-namespaces吗?此外,此 HELM 是公开的还是您的私有? -
@PjoterS 我们确实有 1 个 HPA,并且 Helm 图表是私有的(它们非常简单,我会看看是否可以将它们发布到原始问题)
-
如果您可以粘贴您的部署和 HPA YAML,这将有很大帮助。乍一看,HPA 似乎只针对一个池。
-
@PjoterS 也许......但我们有几个没有 HPA 的应用程序也看到 36 个 CPU。我会尝试发布它们,我只是不确定我是否看到了相关性。我确实添加了一条说明,我们在每个报告可用处理器数量的应用程序中进行了健康检查,并且 每个 应用程序在启动后显示 2。让我觉得启动时存在竞争条件,数字从 36 开始,然后下降到 2,并且根据 Ignite 的启动时间,它可能会看到错误的数字。
标签: kubernetes kubernetes-helm