【问题标题】:Can anyone explain this Kubernetes HPA behavior?谁能解释这个 Kubernetes HPA 行为?
【发布时间】:2020-08-05 21:28:38
【问题描述】:

所以这发生在 EKS K8s v1.15 上。您可以在描述输出中看到 api 版本。 Millicpu 徘徊在 80 到 120 之间……这与来自 HPA 的副本数完全不匹配……

这是 YAML:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: sequencer
  namespace: djin-content
spec:
  minReplicas: 1
  maxReplicas: 10
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: sequencer
  metrics:
  - type: Pods
    pods:
      metricName: cpu_usage
      targetAverageValue: 500

这里是 kubectl 描述:

[root@ip-10-150-53-173 ~]# kubectl describe hpa -n djin-content
Name:                   sequencer
Namespace:              djin-content
Labels:                 <none>
Annotations:            kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"sequencer","namespace":"djin-con...
CreationTimestamp:      Wed, 05 Aug 2020 20:40:37 +0000
Reference:              Deployment/sequencer
Metrics:                ( current / target )
  "cpu_usage" on pods:  122m / 500
Min replicas:           1
Max replicas:           10
Deployment pods:        7 current / 7 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 4
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from pods metric cpu_usage
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:
  Type    Reason             Age                  From                       Message
  ----    ------             ----                 ----                       -------
  Normal  SuccessfulRescale  34m                  horizontal-pod-autoscaler  New size: 10; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  15m (x2 over 34m)    horizontal-pod-autoscaler  New size: 6; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  10m                  horizontal-pod-autoscaler  New size: 5; reason: All metrics below target
  Normal  SuccessfulRescale  9m51s (x2 over 23m)  horizontal-pod-autoscaler  New size: 3; reason: All metrics below target
  Normal  SuccessfulRescale  5m (x2 over 16m)     horizontal-pod-autoscaler  New size: 4; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  4m45s (x2 over 15m)  horizontal-pod-autoscaler  New size: 5; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  4m30s                horizontal-pod-autoscaler  New size: 7; reason: pods metric cpu_usage above target

自定义指标 API 被正确/频繁地填充并且运行良好。部署目标运行良好......我已经为这个 API 和副本计算浏览了整个 k8s 代码库,这没有任何意义......

【问题讨论】:

  • 指定targetAverageValue: 500m而不是targetAverageValue: 500有关系吗?
  • 不,Kubernetes的原生单位是milli。每当你提到没有单位的东西时,1/1000 是默认值。根据这一点,当定义为 500m 时,行为是相同的。

标签: kubernetes amazon-eks hpa


【解决方案1】:

指标似乎不匹配,您有 122m(毫核)与 / 500 个原始数据。

  "cpu_usage" on pods:  122m / 500

您没有指定计算自定义指标的内容,可能是额外的0 被添加到122m 使其成为1220 / 500(我假设cpu_usage 是自定义指标,因为常规指标服务器指标只是cpu) 但你可以试试:

targetAverageValue: 500m

更常见的对 CPU 使用率进行 HPA 的方法是使用指标服务器中的 CPU 使用百分比。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
...

扩展活动由您的 K8s 控制平面中的 kube-controlller-manager 管理,如果您启用了 EKS 控制平面日志,您还可以查看那里以查找更​​多信息。 ?

✌️

【讨论】:

【解决方案2】:

我前段时间找到了这个问题的答案,但忘记更新了。在一个著名的 k8s 项目问题中就该主题进行了详细讨论。这本质上是 k8s HPA 目标中的一个设计错误(功能?):https://github.com/kubernetes/kubernetes/issues/78761#issuecomment-670815813

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2013-04-16
    • 2021-01-08
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多