【发布时间】:2021-01-27 12:25:30
【问题描述】:
我正在使用 GKE,并且有一个使用 NodePort 公开的 application-app1(pod),然后放在入口后面。
入口控制器已启动 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 集群中运行的其他一些应用程序也将其称为 app1。集群内的其他应用程序通过 kubernetes FQDN app1.default.svc.cluster.local 而不是通过负载均衡器路由调用 app1。这意味着这些请求不会通过入口负载均衡器。这意味着 HPA 不会以任何方式计算这些请求。
因此,这意味着总请求数 (Ct) 来自 LoadBalancer(C1) 和 FQDN(C2),Ct = C1 + C2。我的猜测是 hpa 只会考虑 C1 而不是 Ct。由于此处计算指标的方式,我的 hpa 不会相应地扩展我的应用程序。例如,如果 Ct 为 120,但 C1 为 90,则 pod 的数量将为 3,但实际上应该为 4。
我认为负载均衡器不计算通过 FQDN 来的请求是不是错了?
如果正在计算请求,我想我将不得不使用在 pod 级别计算请求的东西。类似于普罗米修斯中间件的东西。各位有什么建议吗?
【问题讨论】:
-
您的
EXTERNAL/INTERNAL流量的负载百分比能否以任何方式预测?负载百分比是相当稳定还是在内部和外部(90/10、10/90)之间波动很大? -
是的,这就是障碍。无法预测/关联流量类型。无论如何,如果可以预测它会有什么帮助?
标签: kubernetes google-kubernetes-engine metrics stackdriver hpa