问题标签 [hpa]

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 回答
291 浏览

kubernetes - 如何将外部指标提供给 HPA?

问题设置。假设我有 2 个 pod,A 和 B。我希望能够根据来自任意来源的任意数量动态扩展 pod A。假设 pod B 是这样一个源:例如,它可以有一个带有端点的 HTTP 服务器,该端点在请求时以 pod A 的所需副本数量进行响应。或者它可能是一个 ES 服务器或一个 SQL DB(没关系)。

问题。我需要定义哪些 kubernetes 对象来实现这一点(除了 HPA)?HPA 应该知道什么配置需要查找 B 以获取当前指标?B 的 API 应该是什么样子(或者有什么限制?)?

我做过的研究。不幸的是,官方文档并没有说太多,除了声明有这种可能性。还有两个存储库,一个包含一些我无法构建的 go 样板代码,另一个没有任何使用说明(尽管据称确实满足“HTTP 上的外部指标”要求)。

通过查看.yaml这些存储库中的配置,我得出一个结论,除了需要定义一个对象之外,DeploymentService需要定义一个APIService对象,该对象在 kubernetes API 中注册外部或自定义指标并将其与普通服务链接(您将在其中拥有您的pod) 和一些ClusterRoleClusterRoleBinding对象。但是没有任何解释。此外,我什至无法像其他对象一样在本地集群(1.15 版本)中使用 kubectl 列出现有的 APIServices。

0 投票
1 回答
51 浏览

kubernetes - 向 EKS 控制器管理器添加参数以启用 ScaleUp 行为

我已经在我们的 EKS 生产集群上实现了k8s HPA ,它运行良好。但是我们有一个数据科学应用程序,其中流量迅速增加。因此,查看了以下有关实现行为的文章:控制器管理器的 ScalUp参数。

https://github.com/kubernetes/enhancements/blob/master/keps/sig-autoscaling/20190307-configurable-scale-velocity-for-hpa.md#story-1-scale-up-as-fast-as-可能的

与此类似的东西:

我环顾四周,但不确定是否可以在 EKS 中修改控制器管理器(我们有 1.17 版)。

Kubernetes 未知字段“行为” https://github.com/awslabs/amazon-eks-ami/issues/176#issuecomment-462051548

感谢您对此的支持。

问候,阿里

0 投票
1 回答
364 浏览

kubernetes - 基于 NATS 服务器中发布的事件数量的水平缩放

我是 Nats 和 Kubernetes 的新手。我创建了一个 python 控制台应用程序,它订阅了 nats-server,并在 Kubernetes 中使用 Deployment 对象包装在一个 pod 中。现在我想根据这个 python 客户端在 nats-server 中发布的事件数自动缩放 pod。我怎么能做到这一点?任何人都可以给我一个想法吗?

提前致谢。

0 投票
1 回答
192 浏览

kubernetes - 批量水平 pod 自动缩放

查看HPA(对此很新),我正在处理的用例是将相同的 HPA 规则应用于所有部署(在特定命名空间中)。

所以我理想情况下想要实现这样的东西:

我希望通过标签/选择器来处理这个问题,而所有部署对象都标有特定标签(例如enableHpa),并以某种方式在内部使用选择器/macthLabelsHorizontalPodAutoscaler将其应用于所有这些对象。但它看起来name是必需的,并且需要针对特定​​的部署对象。

关于如何处理这种情况并避免hpa为每一个deployment按名称创建 s 的任何建议?

0 投票
1 回答
406 浏览

kubernetes - Kubernetes Deployment 充分利用了 cpu 和内存,而不会给它带来压力

我在 Kubernetes 上部署了一个应用程序并想测试 hpa。使用 kubectl top nodes 命令,我注意到 cpu 和内存在没有压力的情况下增加了。是否有意义?

此外,在强调使用 apache bench 部署时,cpu 和内存不会增加到足以通过目标并制作副本。

我的部署 yaml 文件太大了,无法提供它。这是我的容器之一。

它由 15 个容器组成,我有一个 VM,其中包含一个具有 2 个节点(主节点、工作节点)的集群。

我想强调部署,以便我可以看到它扩大规模。但是这里我觉得有问题!在不强调应用程序的情况下,

Pod 的 CPU/内存已经超过了目标,并且已经制作了 2 个副本(没有强调它)。我知道我向容器提供的请求越多,这个百分比就越少。但是,从一开始就增加内存/cpu 的使用量而不强调它是否有意义?

我希望,目标的左侧部分(pod 中内存的使用)处于开始的 0%,并且尽可能多地强调它要增加并创建副本。但是当我强调 apache bench 时,该值最多增加 10%

我们可以在这里看到 CPU 的使用情况: kubectl top pods

NAME CPU(cores) MEMORY(bytes) x-app-55b54b6fc8-7dqjf 76m 765Mi

!!59% 是 pod 的内存使用量,内存请求/内存的总和(内存使用量)描述。在我的情况下59% = 765Mi/1310Mi

HPA yaml 文件:

0 投票
1 回答
146 浏览

kubernetes - 如何在负载下安全终止 Pod

有一些场景需要在不减少 Deployment 总容量的情况下终止 Pod:

  • 用于维护的排水节点
  • 用于装箱的排水节点
  • 行为不端的 Pod / 在不触发 OOM Killer 的情况下处理内存泄漏

想象一下我们有两个 Pod 占用大量流量的情况,如果使用终止 Pod 的默认工作流程,然后让 Kubernetes 通过重新创建它来做出反应,我们将在任意时间内拥有 50% 的处理能力。

在高吞吐量应用程序中,这将通过以下一种或多种方式降低服务级别:

  • Rails 等非多线程非异步应用程序中的请求队列增加了响应时间
  • 在异步多线程应用程序的情况下,更高的上下文切换会增加响应时间
  • 具有严格响应时间 SLO 和超时的应用程序中的超时错误峰值
  • 如果我们不执行严格的响应时间 SLO 和超时,则依赖于相关高吞吐量应用程序的服务会出现级联减速

理想情况下,我要寻找的是一些先​​创建后销毁模式。类似于:我们要求 Kube 终止 Pod,但在将其从列出的任何服务中的 Endpoints 中删除之前,它会触发扩展,尊重 Readiness Gate,然后开始终止我们要求它终止的 Pod。我在 Kubernetes 中没有发现任何提及这种模式的内容。

人们如何处理这种情况?我可以想象以下内容:

  • 较低targeAverageUtilization的 HPA,因此我们可以容忍暂时减少 50% 的容量,但这意味着我们将支付比我们想要的更多的费用
  • 优化 Pod 准备就绪时间,使我们在几秒钟内保持供应不足,但这似乎非常困难,例如,AWS 负载均衡器需要至少 10 秒才能使新目标健康运行
  • 创建一个涉及的工作流程,而不是kubectl delete [pod]我们:
    • 将 HPAminReplicas增加到当前副本的一个以上
    • 等待 Pod 准备就绪
    • 等待几秒钟让它预热
    • 运行kubectl delete [pod]以杀死所需的 pod
    • 等待新的替换吊舱准备就绪
    • 等待几秒钟让它预热
    • minReplicas在 HPA 中恢复
    • 冒着整个操作与流量增加/峰值同时发生的风险,并看到我上面列出的任何退化影响

这些似乎都不是很好。尤其是最后一个,不会涉及 binpacking,因为我们无法替换 Cluster Autoscaler 排出实例的方式。

0 投票
1 回答
1023 浏览

kubernetes - 减少负载后 Kubernetes HPA 不会缩减

当 pod 的负载增加时,Kubernetes HPA 可以正常工作,但负载降低后,部署规模不会改变。这是我的 HPA 文件:

我的 Kubernetes 版本:

这是我的 HPA 描述:

0 投票
0 回答
317 浏览

kubernetes - Kubernetes 自定义指标在服务级别不可用

我已经在 Kubernetes 集群上安装了 Prometheus 服务器和适配器,以从 Kubernetes 对象中收集指标。

Prometheus 服务器和适配器是使用 Helm 图表安装的,它们运行良好。现在部署了 Spring Boot 应用程序,该应用程序在端点 /actuator/prometheus 提供指标。

在部署文件中添加以下注释:

现在我可以在 pod 级别看到自定义指标: 在此处输入图像描述

当我尝试查看服务级别的指标时,它会抛出错误:

来自服务器的错误(未找到):服务器找不到服务的指标 redis_queue_box_provider_size

收集到普罗米修斯服务器的指标样本: 在此处输入图像描述

我必须做任何配置来收集服务级别的指标吗?

0 投票
1 回答
204 浏览

kubernetes - 将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器

我正在使用 GKE 并有一个 application-app1(pod) 使用 NodePort 公开,然后放在入口后面。

ingress-controller 已经启动了一个 GCP 负载均衡器。现在,路径上的请求/app1/被路由到我的应用程序。

我在集群内启动了 stackdriver-metrics 适配器,然后我配置了一个 HPA,它使用来自负载均衡器的请求/秒指标。HPA 从 ExternalMetric 获取特定后端名称的指标。

一切都很完美。问题来了,

也在 kubernetes 集群中运行的其他一些应用程序也在调用 this app1。集群内的其他应用程序通过 kubernetes FQDN 调用 app1,app1.default.svc.cluster.local而不是通过负载均衡器路由。这意味着这些请求不会通过入口负载均衡器。这意味着这些请求不会以任何方式被 HPA 计算在内。

因此,这意味着总请求(Ct)来自 LoadBalancer(C1)和 FQDN(C2),Ct = C1 + C2。我的猜测是 hpa 只会考虑 C1 而不是 Ct。由于此处计算指标的方式,我的 hpa 不会相应地扩展我的应用程序。例如,如果 Ct 为 120,但 C1 为 90,则 pod 的数量将为 3,但实际上应该为 4。

考虑到负载均衡器不计算通过 FQDN 发出的请求,我在这里错了吗?

如果正在计算请求,我想我将不得不使用在 pod 级别计算请求的东西。类似于普罗米修斯中间件的东西。各位能不能推荐点别的?

0 投票
0 回答
597 浏览

kubernetes - 水平 pod 自动缩放器无法在 minikube 部署中获取指标

这是一个未解决的问题:https ://github.com/kubernetes/minikube/issues/9370

重现步骤:

  1. $ minikube start — extra-config=controller-manager.horizontal-pod-autoscaler-upscale-delay=1m — extra-config=controller-manager.horizontal-pod-autoscaler-downscale-delay=1m — extra-config=controller-manager.horizontal-pod-autoscaler-sync-period=10s — extra-config=controller-manager.horizontal-pod-autoscaler-downscale-stabilization=1m
  2. $ minikube add-ons enable metrics-server
  3. .yaml使用资源请求和限制创建:
  1. $ kubectl -n test-1 autoscale deployment orion --min=1 --max=5 --cpu-percent=50

失败命令的完整输出:

命令$ kubectl -n test-1 describe hpa orion返回:

命令$ minikube addons list返回:


正如您在命令输出中看到的那样,即使指标服务器似乎工作正常(hpa Orion 中的指标说:)resource cpu on pods (as a percentage of request): 0%,当涉及到 Orion hpa 产生的事件时,关于指标的计算存在错误:

这个水平 pod 自动缩放器无法正常工作的原因是什么?


其他详情:

Minikube 版本:

Kubernetes 版本: