Kubernetes HPA未使用istio上的prometheus适配器使用自定义度量进行缩放
我在istio中有两个部署运行同一服务的v1和v2。我已经设置了一个自定义指标“istio total requests”,通过prometheus adapater收集 我已经设置了一个HPA来扩展v2部署,当我发送请求时可以看到目标值增加,但没有发生的是HPA没有扩展POD/副本的数量 我正在minikube v1.13.1上运行kubernetes v1.19,无法理解为什么它不能扩展Kubernetes HPA未使用istio上的prometheus适配器使用自定义度量进行缩放,kubernetes,prometheus,istio,prometheus-operator,horizontal-pod-autoscaling,Kubernetes,Prometheus,Istio,Prometheus Operator,Horizontal Pod Autoscaling,我在istio中有两个部署运行同一服务的v1和v2。我已经设置了一个自定义指标“istio total requests”,通过prometheus adapater收集 我已经设置了一个HPA来扩展v2部署,当我发送请求时可以看到目标值增加,但没有发生的是HPA没有扩展POD/副本的数量 我正在minikube v1.13.1上运行kubernetes v1.19,无法理解为什么它不能扩展 prometheus: url: http://prometheus.istio-system.sv
prometheus:
url: http://prometheus.istio-system.svc.cluster.local
rules:
default: false
custom:
# this rule matches cumulative cAdvisor metrics measured in seconds
- seriesQuery: 'istio_requests_total{kubernetes_namespace!="",kubernetes_pod_name!=""}'
seriesFilters: []
resources:
# template: <<.Resource>>
# skip specifying generic resource<->label mappings, and just
# attach only pod and namespace resources by mapping label names to group-resources
overrides:
kubernetes_namespace: {resource: "namespace"}
kubernetes_pod_name: {resource: "pod"}
# specify that the `container_` and `_seconds_total` suffixes should be removed.
# this also introduces an implicit filter on metric family names
name:
# we use the value of the capture group implicitly as the API name
# we could also explicitly write `as: "$1"`
matches: "^(.*)_total"
as: "${1}_per_second"
# matches: ""
# as: ""
# specify how to construct a query to fetch samples for a given series
# This is a Go template where the `.Series` and `.LabelMatchers` string values
# are available, and the delimiters are `<<` and `>>` to avoid conflicts with
# the prometheus query language
metricsQuery: "sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)"
请参见HPA拉动和测量度量值,但不缩放,它下面的窗口显示prometheus适配器成功查询度量值
HPA说明
最后一个我不清楚的问题是,在上面的hpa定义中,选择器的用途是什么?是从普罗米修斯查询的数据范围中选择特定值吗
例如,我知道我查询的字段默认由特使输出,如下所示:
istio_requests_total{app="istio-ingressgateway",chart="gateways",connection_security_policy="unknown",destination_app="translate-pod",destination_canonical_revision="0.0.1",destination_canonical_service="translate-pod",destination_principal="spiffe://cluster.local/ns/default/sa/default",destination_service="translate-service.default.svc.cluster.local",destination_service_name="translate-service",destination_service_namespace="default",destination_version="0.0.1",destination_workload="translate-deployment",destination_workload_namespace="default",heritage="Tiller",install_operator_istio_io_owning_resource="unknown",instance="172.17.0.5:15020",istio="ingressgateway",istio_io_rev="default",job="kubernetes-pods",kubernetes_namespace="istio-system",kubernetes_pod_name="istio-ingressgateway-6cfd75fc57-flmhp",operator_istio_io_component="IngressGateways",pod_template_hash="6cfd75fc57",release="istio",reporter="source",request_protocol="http",response_code="200",response_flags="-",service_istio_io_canonical_name="istio-ingressgateway",service_istio_io_canonical_revision="latest",source_app="istio-ingressgateway",source_canonical_revision="latest",source_canonical_service="istio-ingressgateway",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account",source_version="unknown",source_workload="istio-ingressgateway",source_workload_namespace="istio-system"}
选择器是否允许您进一步过滤序列数据,如果没有,目的是什么以及如何使用它?根据您的屏幕截图,HPA按预期工作,因为您的度量值低于阈值。如果该值未超过阈值,HPA将不会触发放大。相反,在您的情况下,它可能会触发缩放 您现在使用的度量是
istio\u requests\u per\u second
。这是由每秒的总请求计算得出的。第一个屏幕截图显示平均值为200m
,即0.2
。您的阈值是10
,因此在这种情况下,HPA肯定不会增大
对于选择器,它使您能够在度量下选择目标标签。例如,如果只想根据
GET
方法缩放实例。在这种情况下,您可以定义与GET
方法标签匹配的选择器。Ryan,下面是从HPA发送到Prom的查询:kubectl GET--raw”/api/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/%2A/istio\u每秒请求数?labelSelector=app%3Dtranslate-pod%2Cversion%3D0.2&metricLabelSelector=version%3D0.0.2”在这种情况下,在HPA中,我定义了一个带有matchLabel的选择器,如原始帖子所示。我可以看到该版本在查询中被传递到那里。当我手动运行此查询时,无论是否有版本=0.0.2的结束部分,我都会得到相同的答案,这就是为什么我不清楚其目的。如果可能的话,您介意为两个调用共享您的查询结果吗?我将发布另一个问题,因为您已经解决了原始问题,而且在这个小空间里有太多的信息要发布。
istio_requests_total{app="istio-ingressgateway",chart="gateways",connection_security_policy="unknown",destination_app="translate-pod",destination_canonical_revision="0.0.1",destination_canonical_service="translate-pod",destination_principal="spiffe://cluster.local/ns/default/sa/default",destination_service="translate-service.default.svc.cluster.local",destination_service_name="translate-service",destination_service_namespace="default",destination_version="0.0.1",destination_workload="translate-deployment",destination_workload_namespace="default",heritage="Tiller",install_operator_istio_io_owning_resource="unknown",instance="172.17.0.5:15020",istio="ingressgateway",istio_io_rev="default",job="kubernetes-pods",kubernetes_namespace="istio-system",kubernetes_pod_name="istio-ingressgateway-6cfd75fc57-flmhp",operator_istio_io_component="IngressGateways",pod_template_hash="6cfd75fc57",release="istio",reporter="source",request_protocol="http",response_code="200",response_flags="-",service_istio_io_canonical_name="istio-ingressgateway",service_istio_io_canonical_revision="latest",source_app="istio-ingressgateway",source_canonical_revision="latest",source_canonical_service="istio-ingressgateway",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account",source_version="unknown",source_workload="istio-ingressgateway",source_workload_namespace="istio-system"}