我正在使用GKE,并且有一个application-app1(pod),它使用NodePort公开,然后放在入口后面。
入口控制器已启动GCP负载平衡器。现在,来自路径/app1/
的请求将路由到我的应用程序。
我启动了集群内部的stackdriver-metrics适配器,然后配置了HPA,该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,则吊舱数将为3,但实际应为4。
在这里我是否认为负载均衡器不计入通过FQDN发出的请求是错误的?
如果要计算请求数,我想我将不得不使用在Pod级别计算请求数的东西。像普罗米修斯中间件一样。你们还能提出其他建议吗?
答案 0 :(得分:0)
回答以下评论:
是的,那是障碍。无法预测/关联流量类型。无论如何,如果可以预测它会有什么帮助?
如果可以预测(例如,始终为70%(外部)/ 30%(内部),则可以调整扩展指标以包含负载均衡器指标不知道的流量。
您可以选择使用Custom Metrics
(例如:每秒查询)来代替从负载均衡器本身收集指标(不会考虑内部流量)。
您的应用程序可以向Cloud Monitoring报告自定义指标。您可以配置Kubernetes来响应这些指标并自动扩展您的工作量。例如,您可以根据指标来扩展应用程序,例如每秒查询,每秒写入,网络性能,与其他应用程序通信时的延迟或其他对您的工作负载有意义的指标。 可以为以下任意一项选择自定义指标:
- 特定节点,Pod或任何类型的任何Kubernetes对象,包括CustomResourceDefinition(CRD)。
- 部署中所有Pod报告的指标的平均值
- Cloud.google.com: Kubernetes Engine: Custom and external metrics: Custom metrics
有关于创建Custom Metrics
的官方文档:
您还可以查看Metrics Explorer
中的可用指标。
通过HPA
进行缩放时,您还可以使用多个指标:
如果将工作负载配置为基于多个指标自动扩展,则HPA会分别评估每个指标,并使用扩展算法根据每个指标确定新的工作负载规模。自动缩放操作选择了最大比例。
- Cloud.google.com: Kubernetes Engine: HorizontalPodAutoscaler
关于更多解决方法,您还可以使用CPU
使用量指标。
其他资源: