在kubernetes hpa中,外部指标的值很奇怪

在kubernetes hpa中,外部指标的值很奇怪,kubernetes,Kubernetes,我正在研究库伯内特并测试一些例子 我在将外部指标应用于hpa时遇到问题 我用普罗米修斯适配器做了一个外部度量 因此,我可以使用 kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/ 指挥部 结果如下 {"kind":"APIResourceList","apiVersion":"v1","groupVersion":"exte

我正在研究库伯内特并测试一些例子

我在将外部指标应用于hpa时遇到问题

我用普罗米修斯适配器做了一个外部度量

因此,我可以使用

kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/
指挥部

结果如下

{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"external.metrics.k8s.io/v1beta1","resources":[{"name":"redis_keys","singularName":"","namespaced":true,"kind":"ExternalMetricValueList","verbs":["get"]}]}
{"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{"selfLink":"/apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys"},"items":[{"metricName":"redis_keys","metricLabels":{},"timestamp":"2020-10-28T08:39:09Z","value":"23"}]}
我可以使用

kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys
指挥部

结果如下

{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"external.metrics.k8s.io/v1beta1","resources":[{"name":"redis_keys","singularName":"","namespaced":true,"kind":"ExternalMetricValueList","verbs":["get"]}]}
{"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{"selfLink":"/apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys"},"items":[{"metricName":"redis_keys","metricLabels":{},"timestamp":"2020-10-28T08:39:09Z","value":"23"}]}
我将这个指标应用于hpa

以下是hpa配置

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: taskqueue-autoscaler
spec:
  scaleTargetRef:
          #apiVersion: extensions/v1beta1
    apiVersion: apps/v1
    kind: Deployment
    name: taskqueue-consumer
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: External
    external:
      metricName: redis_keys
      targetAverageValue: 20
在制定hpa之后

我测试了这个命令

kubectl get hpa
结果很奇怪

NAME                   REFERENCE                       TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
taskqueue-autoscaler   Deployment/taskqueue-consumer   11500m/20 (avg)   1         10        2          63m
我认为它的值(11500m)是错误的,因为查询值的结果是23


在这种情况下,我应该在哪里看到呢?

事实上这是对的,但它也很复杂,因为它涉及到HPA资源的一些不同的事情,而这些事情并不是很明显。所以我会一次一件地解释这件事

首先是计量单位。Metrics API将尽可能返回整个单位,但也会返回毫单位,这可能导致上述情况。实际上,你看到的是11.5米转换成11.5米,但两者是一样的。请查看网站上的此链接,其中包含更多内容

接下来,您将看到两个副本,其中Metrics API的值为23。由于您已将该度量设置为外部度量的平均值,因此在查看HPA资源时,该度量的值除以群集中的副本数将得到11.5或11500m。这解释了为什么您只看到2个副本,而度量值“高于”您的阈值。请在上查看此链接。并将这一行中关于外部指标的内容放低,确认您看到上述内容的原因

外部指标支持Value和AverageValue目标类型, 该函数与使用对象类型时的函数完全相同


希望这会有所帮助,一些调整会使它更好地符合您的期望。祝你好运

事实上,这是对的,但它也很复杂,因为它涉及到HPA资源的一些不同的事情,而这些事情并不是很明显。所以我会一次一件地解释这件事

首先是计量单位。Metrics API将尽可能返回整个单位,但也会返回毫单位,这可能导致上述情况。实际上,你看到的是11.5米转换成11.5米,但两者是一样的。请查看网站上的此链接,其中包含更多内容

接下来,您将看到两个副本,其中Metrics API的值为23。由于您已将该度量设置为外部度量的平均值,因此在查看HPA资源时,该度量的值除以群集中的副本数将得到11.5或11500m。这解释了为什么您只看到2个副本,而度量值“高于”您的阈值。请在上查看此链接。并将这一行中关于外部指标的内容放低,确认您看到上述内容的原因

外部指标支持Value和AverageValue目标类型, 该函数与使用对象类型时的函数完全相同

希望这会有所帮助,一些调整会使它更好地符合您的期望。祝你好运