繁体   English   中英

Kubernetes HPA为自定义指标获取了错误的当前值

[英]Kubernetes HPA gets wrong current value for a custom metric

在实际度量标准值低于100/500 (根据Prometheus)的情况下,HPA状态显示132500m / 500

$ kubectl get hpa -n frontend --context testing
NAME       REFERENCE              TARGETS                               MINPODS   MAXPODS   REPLICAS   AGE
frontend   Deployment/streaming   50237440 / 629145600, 132500m / 500   2         5         2          4d

HPA清单是:

---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: frontend
  namespace: streaming
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: streaming
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Pods
    pods:
      metricName: redis_memory_used_rss_bytes
      targetAverageValue: 629145600
  - type: Pods
    pods:
      metricName: redis_db_keys
      targetAverageValue: 500

它应该打印正常结果,例如:

$ kubectl get hpa -n streaming --context streaming-eu
NAME       REFERENCE              TARGETS                               MINPODS   MAXPODS   REPLICAS   AGE
frontend   Deployment/streaming   50237440 / 629145600, 87 / 500   2         5         2          4d

问题在于该132500m值是错误的(Prometheus查询报告一个正常值)。 我想,由于HPA并未扩大该指标,因此它认为它的价值有些不同。

使用Oliver006 / redis_exporter及其指标作为HPA的自定义Pod指标来重现此问题。

Kubernetes版本

Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.6", GitCommit:"6260bb08c46c31eea6cb538b34a9ceb3e406689c", GitTreeState:"clean", BuildDate:"2017-12-21T06:34:11Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}`
Server Version: version.Info{Major:"1", Minor:"9+", GitVersion:"v1.9.4-gke.1", GitCommit:"10e47a740d0036a4964280bd663c8500da58e3aa", GitTreeState:"clean", BuildDate:"2018-03-13T18:00:36Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}

云提供商

GKE 1.9.4

我认为这是一个指标转换问题。

这是有关此问题的贡献者的一个很好的评论 ,但这是关于http_requests指标的:

如果您查看Prometheus适配器的文档,将会看到所有累积(计数器)指标都转换为费率指标,因为HPA的算法与直接缩放累积指标根本不兼容(直接缩放累积指标不兼容)总的来说有意义)。

在您的情况下,您的http_requests_total已转换为http_requests,因此在使用Prometheus适配器时,它始终会显示为来自度量标准API的毫请求。

因此,在您的情况下,它将返回类似于132500毫记录的内容。 只需将值除以1000,您将获得正确的平均值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM