我正在研究 kubernetes 并测试一些示例。
我在将外部指标应用于 hpa 时遇到问题。
我用普罗米修斯适配器做了一个外部指标。
所以我可以使用外部指标
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/
Run Code Online (Sandbox Code Playgroud)
命令。
结果如下。
{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"external.metrics.k8s.io/v1beta1","resources":[{"name":"redis_keys","singularName":"","namespaced":true,"kind":"ExternalMetricValueList","verbs":["get"]}]}
Run Code Online (Sandbox Code Playgroud)
我可以使用获得指标值
kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys
Run Code Online (Sandbox Code Playgroud)
命令。
结果如下。
{"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"}]}
Run Code Online (Sandbox Code Playgroud)
我将该指标应用于 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
Run Code Online (Sandbox Code Playgroud)
制作hpa后,
我测试了这个命令。
kubectl get hpa
Run Code Online (Sandbox Code Playgroud)
结果很奇怪。
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
taskqueue-autoscaler Deployment/taskqueue-consumer 11500m/20 (avg) 1 10 2 63m
Run Code Online (Sandbox Code Playgroud)
我认为它的值(11500m)是错误的,因为查询值的结果是23。
在这种情况下我应该在哪里查看?
小智 5
实际上这是正确的,但它也很复杂,因为它会涉及到 HPA 资源的一些不同的事情,这些事情并不是立即显而易见的。所以我会一次解释一件事。
首先,计量单位。Metrics API 将在可能的情况下尝试返回整个单位,但也会返回毫单位,这可能会导致上述情况。实际上,您看到的是 11.5 转换为 11500m,但两者是相同的。查看有关HPA 指标“数量”的链接,其中包含更多内容。
接下来,您现在会看到两个副本,其指标 API 的值为 23。由于您已将指标设置为外部指标的 AverageValue,因此它将指标的值除以指标 API 中的副本数量。查看 HPA 资源时,集群结果为 11.5 或 11500m。这解释了为什么您只看到 2 个副本,而指标值“高于”您的阈值。查看有关使用多个和自定义指标自动缩放的链接,特别是有关“对象”指标的部分。在页面下方,他们滑入有关外部指标的这一行,确认您看到上述内容的原因。
外部指标支持 Value 和 AverageValue 目标类型,其功能与使用 Object 类型时完全相同。
希望这会有所帮助,并且进行一些调整应该可以使其更好地符合您的期望。祝你好运!
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |