【问题标题】:Kubernetes - HPA replicas issueKubernetes - HPA 副本问题
【发布时间】:2019-12-11 00:21:56
【问题描述】:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: myservice
  namespace: mynamespace
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myservice
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: memory
      targetAverageValue: 700Mi

15 分钟后,我看到 REPLICAS 长到了 2 个。从那以后它就没有下来了。

C:\Users\myuser>kubectl get hpa
NAME            REFERENCE                  TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
myservice    Deployment/myservice    490412032/700Mi          1         3         2          4h14m

这些服务没有流量,如下所示,MEMORY 远低于 700Mi(如 HPA 指标中所述)。

C:\Users\myuser>kubectl top pod
NAME                                     CPU(cores)   MEMORY(bytes)
myservice-6ff6bdc8d-jx4pc             29m          463Mi
myservice-6ff6bdc8d-zktnm             29m          471Mi

我很困惑为什么创建了第二个副本,为什么它没有下降?我错过了什么吗?请提出建议。

【问题讨论】:

  • 平均值是否考虑了所有 pod 的总数,而不是仅考虑一个 pod?
  • 这就是我的问题,如果第一个 pod 内存是 463Mi,为什么它创建了 2nd pod?
  • 接受的答案是正确的。但是,请记住,内存使用量通常不是合适的缩放指标,因为它不是“流动的”。例如,添加一个额外的副本并不一定会减少现有副本的内存使用量(在某些应用程序中可能是这种情况,但通常并非如此)。 CPU 使用率通常是一个更好的扩展指标。
  • @weibeld 感谢您指出这一点。我的应用程序是内存密集型的,而不是 CPU 密集型的。你在这里建议什么?
  • 可能是 CPU 利用率而不是内存利用率。您只需将memory 更改为cpu 并调整该值即可。

标签: kubernetes


【解决方案1】:

没有下降的原因:

HPA控制器计算副本数的方式是

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

在您的情况下,currentMetricValue 是根据 pod 中给定指标的平均值计算得出的,因此 (463 + 471)/2 = 467Mi 因为设置了 targetAverageValue

desiredMetricValue 是 700Mi,所以 desiredReplicas

ceil[2 * (467 / 700)] = ceil[1.34] = 2

因为 ceil(x) 将为您提供大于或等于 x 的最小整数。


上涨的原因:

假设第一个 pod 大约是 463Mi,desiredReplicas

ceil[2 * (463 / 700)] = ceil[1.32] = 2

因此,如果您希望它只是该工作负载的一个 pod,targetAbsoluteValue 至少需要为 950Mi。

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 2019-03-13
    • 2021-12-14
    • 2021-09-07
    • 2021-01-27
    • 2020-04-16
    • 2020-03-07
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多