Kubernetes 如何";或-基于外部度量匹配HorizontalPodAutoscaler中的度量选择器

Kubernetes 如何";或-基于外部度量匹配HorizontalPodAutoscaler中的度量选择器,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,首先要避免x-y问题:我想基于来自特定入口的负载平衡器指标实现HPA ...HPAmanifest... - type: External external: metricName: loadbalancing.googleapis.com|https|request_count metricSelector: matchLabels: resource.labels.target_proxy_name: k8s-tps-app

首先要避免x-y问题:我想基于来自特定入口的负载平衡器指标实现HPA

...HPAmanifest...
- type: External
    external:
      metricName: loadbalancing.googleapis.com|https|request_count
      metricSelector:
        matchLabels:
          resource.labels.target_proxy_name: k8s-tps-appname-appname-ingress--64658eaf6b9dce83
      targetAverageValue: 50
我有一个基于stackdriver提供的
request\u count
外部指标的HPA。 我希望通过以下方式匹配标签,以便仅获取到达特定入口的请求

...HPAmanifest...
- type: External
    external:
      metricName: loadbalancing.googleapis.com|https|request_count
      metricSelector:
        matchLabels:
          resource.labels.target_proxy_name: k8s-tps-appname-appname-ingress--64658eaf6b9dce83
      targetAverageValue: 50
问题是,通过这样做,我忽略了HTTP流量(这确实发生了,我们无法阻止),这意味着如果有大量HTTP请求,我的应用程序将无法扩展

如果我没有弄错的话,表达相似的东西会使HPA捕获包含这两个标签的度量,这意味着根本不会匹配任何度量。(注意,它们之间的唯一区别是“tp”后面的“s”,它区分来自http/s的流量)

是否可以使用“或”匹配(或者使用正则表达式)来实现基于来自特定入口的负载平衡器度量的HPA

注意:我不在label
url-map
上进行过滤,因为在stackdriver web UI上,我看到由于某种原因,图形不匹配(同时我会提供更好的外观)

谢谢

下面是作者的话

基于多指标的自动标定

您可以将多个度量与单个HorizontalPodAutoscaler结合使用,将外部度量与Autoscaling Deployments中描述的其他度量类型与自定义度量相结合。在HPA对象规范的度量列表中指定要用作单独项的每个度量。HPA将根据每个指标计算复制副本的数量,并选择最高的一个

有关更多选项,请参阅链接[2],[3]

[2]
[3]

我不确定当时到底出了什么问题,尽管答案正是我排除的(根据我最初的问题):为了过滤到达特定入口的请求,必须在标签
url映射上进行过滤

因此,我的工作HPA现在在匹配标签中有:

...
      metricSelector:
        matchLabels:
          resource.labels.url_map_name: k8s-tps-appname-appname-ingress--345afb364
根据我这里的问题,它不会导致使用“或”选择器的问题。注意,入口注释是带有连字符的
url-map
,它在
url\u-map\u-name
中被“转换”(带下划线);所有其他注释也会出现这种情况(在我最初的问题中,
target proxy
,因为ingress注释在标签中变成了
target\u proxy\u name


对于未来的读者:您当前不能
匹配标签中的条件(1.15)在k8s中。

我知道这并不能回答问题:根据对LB的请求数量这样的指标设置HPA不是一个好主意。原因是,无论创建多少个POD,LB的请求数量都将保持不变。因此,每当LB请求超过阈值时,HPA都将扩大到最大numpod的ber,当请求数低于该阈值时,它将缩小到最小值。相反,您应该尝试获取每个pod(后端)处理的请求数