Kubernetes HPA未使用istio上的prometheus适配器使用自定义度量进行缩放

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

我在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.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"}