我正在使用 GKE 并有一个 application-app1(pod) 使用 NodePort 公开,然后放在入口后面。
ingress-controller 已经启动了一个 GCP 负载均衡器。现在,路径上的请求/app1/
被路由到我的应用程序。
我在集群内启动了 stackdriver-metrics 适配器,然后我配置了一个 HPA,它使用来自负载均衡器的请求/秒指标。HPA 从 ExternalMetric 获取特定后端名称的指标。
- external:
metricName: loadbalancing.googleapis.com|https|request_count
metricSelector:
matchLabels:
resource.labels.backend_target_name: k8s-be-30048--my-backend
targetAverageValue: 20
type: External
一切都很完美。问题来了,
也在 kubernetes 集群中运行的其他一些应用程序也在调用 this app1
。集群内的其他应用程序通过 kubernetes FQDN 调用 app1,app1.default.svc.cluster.local
而不是通过负载均衡器路由。这意味着这些请求不会通过入口负载均衡器。这意味着这些请求不会以任何方式被 HPA 计算在内。
因此,这意味着总请求(Ct)来自 LoadBalancer(C1)和 FQDN(C2),Ct = C1 + C2。我的猜测是 hpa 只会考虑 C1 而不是 Ct。由于此处计算指标的方式,我的 hpa 不会相应地扩展我的应用程序。例如,如果 Ct 为 120,但 C1 为 90,则 pod 的数量将为 3,但实际上应该为 4。
考虑到负载均衡器不计算通过 FQDN 发出的请求,我在这里错了吗?
如果正在计算请求,我想我将不得不使用在 pod 级别计算请求的东西。类似于普罗米修斯中间件的东西。各位能不能推荐点别的?