问题标签 [horizontal-pod-autoscaling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

kubernetes - Cluster Autoscaler 和 Horizo​​ntal Pod Autoscaler 一起工作

我的一个部署有一个激活了 Cluster Autoscaler 和 HPA 的集群。

这是 HPA 的定义:

现在,在我的集群使用非常少的情况下,这意味着此部署将只有 1 个可用副本。

而且由于集群的使用率不高,可能是包含该副本的节点被安排删除(缩减)的情况。

在这种情况下,它会使我的部署停机(当集群节点被删除时,部署的唯一副本也会被删除,因此需要在新的 Pod 中重新调度)。我不希望这种情况发生(停机时间)。

从这个问题:https ://github.com/kubernetes/kubernetes/issues/48307看来,Pod Disruption Budgets 不适用于只有 1 个副本的部署。

所以解决我的问题的唯一方法是minReplicas设置为 2?

或者我还能做些什么来防止这种停机时间,并且仍然让minReplicas为 1?

0 投票
1 回答
70 浏览

openshift - 有没有办法控制 OpenShift 路由以与水平 pod 自动缩放器协同工作?

我正在使用 Horizo​​ntal Pod Autoscaler 在 OpenShift 环境中缩放我的 pod。我有一个在 pod 中运行的 Web 应用程序。随着 pod 的扩展,我在 HTTP 请求的前几秒内收到了 HTTP 状态代码 404 错误。这是因为路由正在向正在启动的 pod 发送请求吗?如果是这样,有什么办法可以防止错误?我试过设置router.openshift.io/haproxy.health.check.interval一个很小的值,但我仍然无法避免这个错误。

0 投票
0 回答
221 浏览

kubernetes - Kubernetes HPA pod 自定义指标显示为

我已设法安装 Prometheus 及其适配器,我想使用其中一个 pod 指标进行自动缩放

检查我要使用的 apipods/http_request并将其添加到我的 HPA 配置中

应用 yaml 并检查 hpa 状态后,它显示为<unkown>

但是当使用其他 pod 指标时,例如pods/memory_usage_bytes正确检测到值

有没有办法检查这个指标的正确值?以及如何为我的 hpa 配置正确添加它

参考https://www.ibm.com/support/knowledgecenter/SSBS6K_3.2.0/manage_cluster/hpa.html

0 投票
0 回答
90 浏览

prometheus - 更新 targetValue 后 HPA 不会在自定义指标上扩展

我有一个 AWS EKS 集群,并且设置了 Prometheus 和 Prometheus-Adapter。问题是,我为我的 HPA 指标目标值(阈值一)尝试了不同的值,在某些情况下,我可以看到放大工作,但另一个失败。

提供我的 HPA:

在这种情况下,当我将目标值设置为 2 时,我可以看到我的 HPA 完美运行✅,这是日志:您可以看到当我的当前值为 8 时,它已成功扩展到 8/2 = 4 个节点✅,:

但是,现在,如果我更新我的 HPA 文件,将目标值更改为更大的值,例如 5。(我删除整个 HPA 并创建一个新的。)

从日志中可以看到我可以刮到目标数(开头是0),但是我等了很久之后,没有任何放大的行为发生❌。当前值被抓取,但没有发生放大操作❌。在我的情况下,我应该有 8/5,这是 2 个所需的副本,但是,没有任何反应。❌</p>

这是我获得 hpa 并描述 HPA 时所拥有的:

注意:从描述中,我看到了一些EventforFailedGetPodsMetricFailedComputeMetricsReplicas,我相信这只是因为 HPA 的初始设置,因为从 HPA 中,我可以抓取指标以及AbleToScaleandScalingActive也是True

0 投票
1 回答
806 浏览

kubernetes - 在 Google Kubernetes Engine 上使用 Horizo​​ntal Pod Autoscaler 失败并显示:无法读取所有指标

我正在尝试设置 Horizo​​ntal Pod Autoscaler 以根据 CPU 使用率自动扩展和缩减我的 api 服务器 pod。

我目前为我的 API 运行了 12 个 pod,但它们使用的 CPU 约为 0%。

我的 api_hpa.yaml 看起来像:

现在已经 24 小时了,即使没有看到 CPU 使用情况,HPA 仍然没有将我的 pod 缩减到 4 个。

当我查看 GKE 部署详细信息仪表板时,我看到警告无法读取所有指标

这是否会导致自动缩放器无法缩小我的 pod?

我该如何解决?

据我了解,GKE 会自动运行一个指标服务器:

这是该指标服务器的配置:

编辑:2021-03-13

这是 api 服务器部署的配置:

0 投票
0 回答
14 浏览

kubernetes - 如何在 pod 的 kubernetes 集群实例中的扩展服务之间并行化大型数据库读取任务?

假设需要读取一个大型数据库,假设读取服务部署在 Kubernetes 集群中并横向扩展(约 10 个 Pod)。

在它们之间同步读取任务的策略是什么?(在纯 Java 的情况下,forkjoin 线程池看起来很有用,但这里是无法管理生成过程的单独实例)

0 投票
1 回答
1171 浏览

kubernetes - 如何让k8s cpu和内存HPA协同工作?

我正在为 CPU 和内存使用 k8s HPA 模板,如下所示:

由于 pod 的 CPU 使用率低于 CPU 的缩减触发器,因此拥有两个不同的 HPA 会导致为触发内存 HPA 限制而启动的任何新 pod 立即被 CPU HPA 终止。它总是终止最新启动的 pod,这会保留旧的 pod 并再次触发内存 HPA,从而导致无限循环。有没有办法指示 CPU HPA 每次都终止使用率较高的 pod 而不是新生的 pod?

0 投票
1 回答
516 浏览

kubernetes - 如何在 Kubernetes 中大量不活动的 Pod 中有效地使用 CPU?

我有很多服务。一天中,少数服务忙了十个小时左右,而其他大部分服务都处于空闲状态或使用少量cpu。

过去,我把所有的服务都放在一个有两个cpu的虚拟机里,并根据cpu的使用情况进行缩放,最忙的时候有两个虚拟机,但大多数时候只有一个。

服务 实例 一天的忙碌时间 cpu 忙时
(核心/服务)
空闲时的cpu
(核心/服务)
繁忙的服务 2 8~12小时 0.5~1 0.1~0.5
繁忙的服务 2 8~12小时 0.3~0.8 0.1~0.3
非活动服务 30 0~1小时 0.1~0.3 < 0.1

现在,我想把它们放在kubernetes中,每个节点有两个CPU,并使用节点自动伸缩和HPA,为了使节点自动伸缩,我必须为所有服务设置requests CPU,这正是我遇到的困难。

这是我的设置。

服务 实例 忙碌的时间 请求 cpu
(cpu/服务)
总请求 CPU
繁忙的服务 2 8~12小时 300m 600m
繁忙的服务 2 8~12小时 300m 600m
非活动服务 30 0~1小时 100m 3000米

注意:不活动的服务请求CPU设置为100m,因为忙的时候小于100m就不好用了。

使用此设置,节点的数量将始终大于三个,这太昂贵了。我认为问题在于,虽然这些服务需要 100m 的 CPU 才能正常工作,但它们大多处于空闲状态。

我真的希望所有的服务都可以自动伸缩,我认为这是 Kubernetes 的好处,它可以帮助我更灵活地分配 Pod。我的想法错了吗?我不应该为非活动服务设置请求 CPU 吗?

即使我忽略不活动的服务。我发现 kubernetes 更多时候有两个以上的节点。如果我有更多的活动服务,即使在非高峰时间,请求 CPU 也会超过 2000m。有什么解决办法吗?

0 投票
1 回答
237 浏览

java - Java Garbage Collector 会干扰 HPA 的缩减吗?

我有一个 Spring API,大量使用部署在 kubernetes 集群上的内存。

我将自动缩放(HPA)配置为将内存消耗视为缩放标准,并运行负载测试在扩大时一切正常,但是在缩小时内存不会下降,因此创建的 pod 不会被删除。如果我再次运行测试,将创建新的 pod,但不会删除

使用可视 VM 进行本地分析,我认为问题与 GC 有关。本地 GC 在测试期间正常工作,但在请求结束时它停止运行并留下垃圾,并且在很长一段时间后才再次运行。所以我相信留下的这些垃圾正在阻止 HPA 缩小规模。

有没有人对可能导致这种效果的原因或我可以尝试的东西有任何提示?

PS。在分析器中,我没有任何内存泄漏的迹象,当我手动运行 GC 时,剩下的垃圾被删除了

以下是一些额外的细节:

  • Java 版本:11
  • 春季版:2.3
  • Kubernetes 版本:1.17
  • Docker 镜像:openjdk:11-jre-slim
  • HPA 请求内存:1Gi
  • HPA 限制内存:2Gi
  • HPA 内存利用率指标:80%
  • HPA 最小豆荚:2
  • HPA 最大吊舱数:8
  • JVM OPS:-Xms256m -Xmx1G

负载测试后的 Visual VM

负载测试后新的 Relic Memory 驻留

0 投票
0 回答
39 浏览

kubernetes - 如何根据 Horizo​​ntalPodAutoscaler 的队列大小设置 maxReplicas?

在我们的 Kubernetes 集群中,我有一个配置了外部指标的 HPA 来监控队列大小。此外,我启用了 HPAScaleToZero 门,因此如果队列上没有消息,则不会运行任何 pod。大多数情况下,这可以正常工作,但偶尔会有大量消息被推送到队列中。发生这种情况时,我需要 1 个以上的 pod 来清除积压。如果仅将 1 条消息推送到队列中,我无法弄清楚如何将 pod 的数量固定到队列的大小,而 HPA 不会超出我的需要。我希望它可以像下面这样扩展,最多 3 个 pod。

我尝试创建多个 HPA 定义,但它们最终发生冲突并为使用谁的“maxReplicas”而争论不休。SinglePod 规范将创建 1 个 pod。然后 MultiPod 将创建 2 个新的并从 SinglePod 中删除一个。然后 SinglePod 会反击并从 MultiPod 中杀死 2。这样反复进行,直到队列大小低于 MultiPod 阈值。

SinglePod 规格:

MultiPod 规格:

关于如何做到这一点的任何建议?谢谢,史蒂夫