有人能解释Kubernetes HPA的这种行为吗



所以这发生在EKS K8s v1.15上。您可以在描述输出中看到api版本。毫cpu徘徊在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和副本计算的整个k8代码库,这毫无意义。。。

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

"cpu_usage" on pods:  122m / 500

您没有指定计算自定义度量的内容,可能是在122m中添加了一个额外的0,使其成为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控制平面日志,您也可以查看那里以查找更多信息。

✌️

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

最新更新