假设我们在演示命名空间中部署了以下HPA(HorizontalPodAutoscaler(,并且该演示命名空间中的多个POD(POD-A、POD-B(具有相同的度量"istio_requests_per_second";,HPA如何确定度量";istio_requests_per_second;应该使用哪个吊舱?或者每个具有该指标的POD都将根据HPA目标进行评估?
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: httpbin
spec:
minReplicas: 1
maxReplicas: 5
metrics:
- type: Pods
pods:
metric:
name: istio_requests_per_second
target:
type: AverageValue
averageValue: "10"
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: httpbin
测试。。。
如果您使用的是prometheus,那么它就是k8的pod名称和返回的度量值之间的关联适配器。基本上,HPA向prometheus适配器请求度量istio_requests_per_second
。通过调用/apis/custom.metrics.k8s.io/v1beta1/namespaces/myNamespace/pods/mypod
,适配器获取该信息并查看为其应该查询的内容配置的规则。
https://github.com/kubernetes-sigs/prometheus-adapter/blob/master/docs/config-walkthrough.md
根据我的测试,我认为HPA使用'scaleTargetRef'来确定应该使用哪些POD的度量,并从度量服务器中提取这些度量,并根据目标配置进行评估。
根据Kubernetes文档:
对于对象度量和外部度量,将获取一个描述有问题对象的度量。将该度量与目标值进行比较,以产生如上所述的比率。在自动缩放/v2 API版本中,在进行比较之前,可以选择将该值除以Pod的数量。
它将根据目标吊舱的平均值计算比率。
参考文献:
1-https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-水平足自动秤工作吗