Kubernetes 如何";或-基于外部度量匹配HorizontalPodAutoscaler中的度量选择器
首先要避免x-y问题:我想基于来自特定入口的负载平衡器指标实现HPAKubernetes 如何";或-基于外部度量匹配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
...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
注意:我不在labelurl-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(后端)处理的请求数